Mvvm 如何根据语言变化制作应用程序

Mvvm 如何根据语言变化制作应用程序,mvvm,unicode,xamarin.forms,Mvvm,Unicode,Xamarin.forms,我开发了一个可以支持两种语言的应用程序。如果我需要这个应用程序支持多种语言,那就更糟了。让我们假设十种语言如何实现这一要求 现在我要做的是用我使用的两种语言对它进行硬编码,然后检索它。如果我要为十种语言做这件事,听起来不太好,有没有什么聪明的方法可以做到这一点 例如, 我正在视图模型中使用MVVM模式。我使用该属性,并以其简单的方式进行此操作 public string GetPageTitle => AppResources.VitalSignsViewPage_Title; 我的资源

我开发了一个可以支持两种语言的应用程序。如果我需要这个应用程序支持多种语言,那就更糟了。让我们假设十种语言如何实现这一要求

现在我要做的是用我使用的两种语言对它进行硬编码,然后检索它。如果我要为十种语言做这件事,听起来不太好,有没有什么聪明的方法可以做到这一点

例如,

我正在视图模型中使用MVVM模式。我使用该属性,并以其简单的方式进行此操作

public string GetPageTitle => AppResources.VitalSignsViewPage_Title;
我的资源文件,我有两个数据集,如果语言发生了变化,它将使用写数据集,这就是我现在正在做的,有没有合适的智能方法来处理多种语言

有一些解决办法可以做到这一点。我向你推荐基本的 解决方案

这是一个语言服务接口(如果您需要,可以选择 使用依赖项注入):

您可以创建本地化服务:

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;
        }
    }
}
您可以访问以下翻译:

有一些解决办法可以做到这一点。我向你推荐基本的 解决方案

这是一个语言服务接口(如果您需要,可以选择 使用依赖项注入):

您可以创建本地化服务:

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;
        }
    }
}
您可以访问以下翻译:


我的解决方案解决了您的问题吗?如果您的问题已完成,并且有下面的答案,您可以将其标记为已完成我的答案。是的,很抱歉这是我的解决方案解决了您的问题吗?如果您的问题已完成,并且有下面的答案,您可以将其标记为已完成我的答案。是的,非常抱歉
public class LanguageRow
{
    public LanguageRow()
    {
        Values = new List<string>();
    }

    public string Code { get; set; }
    public List<string> Values { get; set; }
}
[
  {
    "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);