在XAML中本地化类型参数(例如x:String)

时间:2016-09-14 13:06:21

标签: xaml xamarin localization internationalization xamarin.forms

Localizing Xamarin.Forms Apps with RESX Resource Files中,可以翻译字符串,图像等。你大部分时间都可以这样做:

<Label Text="{i18n:Translate NotesLabel}" />

现在我想使用Picker

<Picker x:Name="IndustryTypePicker1" SelectedIndex="{Binding Industry}" HorizontalOptions="FillAndExpand">
    <Picker.Items>
        <x:String>1</x:String> 
        <x:String>2</x:String>
    </Picker.Items>
</Picker>

我们在这里使用<x:String>标签。如何在XAML中本地化这些类型参数?或者这只能在代码中使用吗?

1 个答案:

答案 0 :(得分:2)

我没有尝试过,但这可行:

<Picker>
  <Picker.Items>
    <i18n:TranslateExtension Text="1" />
    <i18n:TranslateExtension Text="2" />
  </Picker.Items>
</Picker>

要使其与XamlC一起使用,您可能需要修复TranslateExtension的签名:

public class TranslateExtension : IMarkupExtension

为:

public class TranslateExtension : IMarkupExtension<string>

并实现新界面:

string IMarkupExtension<string>.ProvideValue(IServiceProvider serviceProvider)
{
    ...
    return translation;    
}

object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
{
    return (this as IMarkupExtension<string>).ProvideValue(serviceProvider);
}