我的viewModel
中有以下列表。但是,为了支持多种语言,我希望此字符串来自string.xml
。可能吗?
private List<Thing> _items = new List<Thing>()
{
new Thing("Open"),
new Thing("Close"),
};
答案 0 :(得分:5)
如果您正在构建原生的Android和iOS应用程序,则可以使用界面:
public interface ILocalization {
string GetLocalizedString(string key);
}
在Android和iOS项目中,您有一个实现界面的类:Android:
public class LocalizationAndroid : ILocalization
{
public Activity context;
public LocalizationAndroid(Activity _context) {
context = _context;
}
public string GetLocalizedString(string key)
{
var resourceId = (int)typeof(Resource.String).GetField(key).GetValue(null);
return context.GetString(resourceId);
}
}
的iOS:
public class LocalizationIOS : ILocalization
{
public string GetLocalizedString(string key)
{
return NSBundle.MainBundle.LocalizedString(key, null);
}
}
然后将类的一个实例(在视图中实例化)传递给视图模型以获取字符串。字符串必须放在iOS项目的 Localizable.strings 文件和Android项目的 Strings.xml 文件中。
在ViewModel上你会得到:
public class MyViewModel
{
public ILocalization LocalizationObject;
private List<Thing> _items;
public MyViewModel(ILocalization _localizationObject)
{
LocalizationObject = _localizationObject;
_items.Add(new Thing(LocalizationObject.GetLocalizedString("Open")));
_items.Add(new Thing(LocalizationObject.GetLocalizedString("Closed")));
}
}
考虑到你添加了两个字符串&#34; Open&#34;和&#34;关闭&#34;对于&#34; Open&#34;和&#34;关闭&#34; Strings.xml (Android)和 Localizable.strings (iOS)上的键。