我有一个resx文件,用于在MyAppResources类中的可移植类库中进行本地化。因此,在代码中,我可以使用以下内容获取本地化字符串:
View.FindViewById<Button>(Resource.Id.btnCacheClear).Text = MyAppResources.TextClearCache;
但是还有一种方法可以在axml中设置这个字符串吗?
<Button
android:id="@+id/btnCacheClear"
android:text= ?? />
Thx,Tom
答案 0 :(得分:1)
我认为最简洁的方法是定义一个自定义属性,该属性将通过ResourceManager
从您的PCL资源中读取。
我正在使用MvvmCross,并使用自定义语言绑定解析器:
public class CustomLanguageBindingParser : MvxBindingParser , IMvxLanguageBindingParser
{
protected override MvxSerializableBindingDescription ParseBindingDescription()
{
this.SkipWhitespace();
string resourceName = (string)this.ReadValue();
// Pass the resource name in as the parameter on the StringResourceConverter.
return new MvxSerializableBindingDescription
{
Converter = "StringResource",
ConverterParameter = resourceName,
Path = null,
Mode = MvxBindingMode.OneTime
};
}
public string DefaultConverterName { get; set; }
public string DefaultTextSourceName { get; set; }
}
转换器:
public class StringResourceConverter : IMvxValueConverter
{
private static ResourceManager manager = new ResourceManager(typeof(AppResources));
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// Ignore value. We are using parameter only.
return manager.GetString((string)parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在MvxAndroidSetup类中注册解析器:
protected override void InitializeIoC()
{
base.InitializeIoC();
Mvx.RegisterType<IMvxLanguageBindingParser, CustomLanguageBindingParser>();
}
在.axml中,定义名称空间xmlns:local="http://schemas.android.com/apk/res-auto"
并调用资源。例如,在TextView上:local:MvxLang="Text MyResourceKey"
这会挂钩到MvvmCross绑定系统。第一部分&#34; Text&#34;确定目标属性,而第二部分则解析为资源键。语言绑定解析器将其转换为与自定义转换器的绑定,并将键转换为转换器参数。转换器根据转换器参数执行字符串查找。
答案 1 :(得分:0)
不支持在 Android Designer 中使用RESX文件中的字符串/任何资源,目前只能通过代码设置它们。