Как сделать приложение в соответствии с изменением языка - PullRequest
0 голосов
/ 27 марта 2019

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

Теперь я жестко связываю его с обоими используемыми языками и затем извлекаю его.Если я собираюсь сделать это для десяти языков, это звучит не очень хорошо, есть ли какой-нибудь умный способ сделать это.

в качестве примера;

Я делаю с шаблоном MVVM в моей модели представления.Я использую свойство и делаю это простым способом

public string GetPageTitle => AppResources.VitalSignsViewPage_Title;

и моим файлом ресурсов. У меня есть два набора данных, если язык изменился, он будет использовать набор данных записи. Это то, что я делаю сейчас.любой правильный способ для многих языков.

1 Ответ

2 голосов
/ 27 марта 2019

Есть несколько решений для достижения этой цели.Я рекомендую вам базовое решение,

Вот интерфейс для языковой службы (опционально, если вы используете Dependency Injection):

public interface ILanguageService
{
    string GetString(string text);
    void ChangeLanguage(bool isALang);
    bool IsALanguage();
}

Вы можете создать службу длялокализация:

namespace Service.Language
{
    public sealed class LanguageService : ILanguageService
    {
        List<LanguageRow> LanguageList;
        private bool IsFirstLang;

        public LanguageService()
        {
            LanguageList = JsonHelper.ReadJSON<List<LanguageRow>>("Service.Language.MultiLanguage.json", typeof(LanguageService));
            IsFirstLang = true;
        }

        public void ChangeLanguage(bool IsFirstLang)
        {
            IsFirstLang =  !IsFirstLang;
        }

        public bool IsALangueage()
        {
            return IsFirstLang;
        }

        public string GetString(string text)
        {
            string result;
            try
            {
                var row = LanguageList.FirstOrDefault(i => i.Code.Equals(text));
                result = IsFirstLang? row.Values[0] : row.Values[1];
            }
            catch
            {
                result = text;
            }
            return result;
        }
    }
}

Вот модель для сериализации для json:

public class LanguageRow
{
    public LanguageRow()
    {
        Values = new List<string>();
    }

    public string Code { get; set; }
    public List<string> Values { get; set; }
}

Наконец, вот файл json: (EN-FR)

[
  {
    "Code": "VitalSignsViewPage_Title",
    "Values": [ "Page Title", "Titre de la page" ]
  },
  {
    "Code": "VitalSignsViewPage_SubTitle",
    "Values": [ "Sub Title", "Sous-titre" ]
  },
  {
    "Code": "VitalSignsViewPage_SubSubTitle",
    "Values": [ "Sub Sub Title", "Sous sous-titre" ]
  }
]

Вы можете получить доступ к таким переводам, как:

ILanguageService _langService = new LangService()
_langService.GetString(AppResources.VitalSignsViewPage_Title);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...