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