Query localized items

You can query items that have a localized field in multiple cultures. You can query all items from a specific culture, for example all items translated in French.

In the following example, you query all dynamic items that have a localized field with a value that applies to a specific culture. To do so:

  1. Get an instance of the DynamicModuleManager class.
  2. Resolve the name of the dynamic content type using the TypeResolutionService class.
  3. Get the localized field name for the specified culture using the LstringPropertyDescriptor class.
    For example, a localized name for a field, called Title in French culture is Title_fr.
  4. Filter the data items by passing the localized field name for the culture and select the Master version using the ContentLifecycleStatus class.
C#
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Descriptors;
using Telerik.Sitefinity.DynamicModules;
using Telerik.Sitefinity.DynamicModules.Model;
using Telerik.Sitefinity.GenericContent.Model;
using Telerik.Sitefinity.Model;
using Telerik.Sitefinity.Utilities.TypeConverters;

namespace Telerik.Sitefinity.Documentation.CodeSnippets.DevGuide.SitefinityEssentials.Multilingual
{
    public partial class MultilingualSnippets
    {
        public static IEnumerable<DynamicContent> LocalizedQuery(string typeName, string fieldName, string targetCulture)
        {
            DynamicModuleManager manager = DynamicModuleManager.GetManager();

            Type dynamicType = TypeResolutionService.ResolveType(typeName);
            CultureInfo c = new CultureInfo(targetCulture);

            // transform the given culture for persistence as it may be different than the one in the UI
            var persistenceCulture = new CultureInfo(AppSettings.CurrentSettings.GetCultureName(new CultureInfo(targetCulture)));
            string fieldNameForCulture = LstringPropertyDescriptor.GetFieldNameForCulture(fieldName, persistenceCulture);

            var result = manager.GetDataItems(dynamicType)
                .Where(x => x.GetValue<string>(fieldNameForCulture) != null)
                .Where(x => x.Status == ContentLifecycleStatus.Master)
                .ToList();

            return result;
        }
    }
}

As a result, you get a list of all items translated in the specified culture.

Want to learn more?
Enhance your Sitefinity skills by enrolling in free training sessions. Become Sitefinity certified through Progress Education Community to strengthen your professional credentials.
New to Sitefinity?