[英]Passing an Android translatable string to ValueConverter
I'm trying to pass a @string/something
to a value converter so I can use it to format the output, so say I have a DateTime
value, I want to pass something like "Signup Date: {0}"
to the ValueConverter. 我正在尝试将@string/something
传递给值转换器,以便我可以使用它来格式化输出,所以说我有一个DateTime
值,我想将"Signup Date: {0}"
传递给ValueConverter 。
The problem is, the text above is translatable, so it came from the strings.xml
file of any given language. 问题是,上面的文本是可翻译的,因此它来自任何给定语言的strings.xml
文件。 So far, I tried this: 到目前为止,我试过这个:
<TextView
local:MvxBind="Text SignupDate, Converter=FriendlyDate, ConverterParameter=@string/release_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="5"
android:paddingTop="8dp"
style="@style/WhiteParagraphText" />
Note the ConverterParameter=@string/release_date
. 注意ConverterParameter=@string/release_date
。 How can I do it? 我该怎么做?
You can do this with a value converter that takes the string resource name as parameter, looks its id up in the resources and gets the value from the resources by this id. 您可以使用将字符串资源名称作为参数的值转换器,在资源中查找其ID并通过此ID从资源获取值。
public class FriendlyDateValueConverter : MvxValueConverter<DateTime, string>
{
protected override string Convert(DateTime value, Type targetType, object parameter, CultureInfo culture)
{
var param = parameter as string;
if (string.IsNullOrEmpty(param))
{
return string.Empty;
}
var globals = MvvmCross.Platform.Mvx.Resolve<IMvxAndroidGlobals>();
var res = globals.ApplicationContext.Resources;
var id = res.GetIdentifier(param, "string", globals.ApplicationContext.PackageName);
// id=0, if the resource could not be found -> add some error handling
var format = res.GetString(id);
return string.Format(format, value);
}
}
Usage 用法
<TextView
local:MvxBind="Text SignupDate, Converter=FriendlyDate, ConverterParameter='release_date'"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="5"
android:paddingTop="8dp" />
Note: pass 'release_date'
instead of @string/release_date
as parameter. 注意:传递'release_date'
而不是@string/release_date
作为参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.