Поддержка Azure Cosmos db на арабском, японском, китайском, арабском, испанском, французском CRUD - PullRequest
0 голосов
/ 23 сентября 2019

Я изучаю cosmos db, так что один вопрос, если кто-нибудь сделал такое многоязычное хранение данных и операцию CRUD для cosmos db.Как это сделать?В Azure я не нашел никакой документации, если бы такие мультиязычность поддерживала и обрабатывал / пример кода для этого.Любая помощь, пожалуйста.

1 Ответ

0 голосов
/ 23 сентября 2019

Мы храним один документ для всех языков.Примером являются продукты, которые имеют названия и описания.В этом документе любое свойство, которое должно быть переводимым, то есть обращенное к клиенту, настроено на использование разработанного нами пользовательского класса под названием LocalizeString.

В наших операциях CRUD нет ничего особенного.Использовал этот подход в течение нескольких лет, и он работал довольно хорошо.HTH.

Вот пользовательский класс:

public class LocalizedString
    {
        public const string DefaultLanugage = "en";
        public const string French = "fr";
        public const string German = "de";
        public const string Italian = "it";
        public const string Portuguese = "pt";
        public const string Spanish = "es";

        public LocalizedString()
        {
            Translations = new Dictionary<string, string>();
        }

        public static Dictionary<string, string> AvailableLanguages = new Dictionary<string, string>
        {
            { DefaultLanugage, "English" },
            { Spanish, "Spanish" },
            { French, "French" },
            { Italian, "Italian" },
            { Portuguese, "Portuguese" },
            { German, "German" }
        };

        public LocalizedString(string value, string lanuage = DefaultLanugage)
        {
            Translations = new Dictionary<string, string>
            {
                { lanuage, value }
            };
        }

        public Dictionary<string, string> Translations { get; set; }

        public string GetValue(string language = DefaultLanugage)
        {
            if (Translations.ContainsKey(language))
            {
                return Translations[language];
            }

            if (Translations.ContainsKey(DefaultLanugage))
            {
                return Translations[DefaultLanugage];
            }

            return string.Empty;
        }

        public static LocalizedString SetValue(LocalizedString item, string value, string lanuage = DefaultLanugage)
        {
            if (item == null)
            {
                item = new LocalizedString();
            }

            if (item.Translations.ContainsKey(lanuage))
            {
                item.Translations[lanuage] = value;
            }
            else
            {
                item.Translations.Add(lanuage, value);
            }

            return item;
        }

        public static List<CultureInfo> SupportedCultures => AvailableLanguages.Select(x => new CultureInfo(x.Key)).ToList();
    }

Использование выглядит следующим образом:

public class Product
{
    public LocalizedString Description { get; set; }
    ...
}

 // Setting the value
item.Description = LocalizedString.SetValue(item.Description, model.TranslatedVersion.Description, model.SelectedLanugage);
 // Getting the value
item.Description.GetValue(request.SelectedLanguage)

Вот как выглядит json:

"Description": {
                "Translations": {
                    "en": "Standard",
                    "es": "Estándar"
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...