Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据Xamarin.Forms xaml中的本地化语言显示选择器项_Xaml_Xamarin_Xamarin.forms_Picker_Itemsource - Fatal编程技术网

如何根据Xamarin.Forms xaml中的本地化语言显示选择器项

如何根据Xamarin.Forms xaml中的本地化语言显示选择器项,xaml,xamarin,xamarin.forms,picker,itemsource,Xaml,Xamarin,Xamarin.forms,Picker,Itemsource,使用xaml创建选择器的标准方法如下 狒狒 卷尾猴 蓝猴 松鼠猴 金狮狨 吼猴 日本猕猴 我希望使用本地化字符串作为扩展标记(x:Static),而不是使用硬代码文本作为“Baboon”、“capuchinmonkey”等 如何实现这一点?您可以将.resx绑定到ViewModel,然后为选择器绑定ViewModel以实现这一点 创建两个.resx文件,一个是英文文件 <data name="Baboon" xml:space="preserve"> <valu

使用xaml创建选择器的标准方法如下


狒狒
卷尾猴
蓝猴
松鼠猴
金狮狨
吼猴
日本猕猴
我希望使用本地化字符串作为扩展标记(x:Static),而不是使用硬代码文本作为“Baboon”、“capuchinmonkey”等


如何实现这一点?

您可以将
.resx
绑定到ViewModel,然后为
选择器绑定ViewModel以实现这一点

创建两个
.resx
文件,一个是英文文件

<data name="Baboon" xml:space="preserve">
  <value>Baboon</value>
</data>
<data name="Blue" xml:space="preserve">
  <value>Blue Monkey</value>
</data>
<data name="Capuchin" xml:space="preserve">
  <value>Capuchin Monkey</value>
</data>
<data name="Golden" xml:space="preserve">
  <value>Golden Lion Tamarin</value>
</data>
<data name="Howler" xml:space="preserve">
  <value>Howler Monkey</value>
</data>
<data name="Japanese" xml:space="preserve">
  <value>Japanese Monkey</value>
</data>
<data name="Squirrel" xml:space="preserve">
  <value>Squirrel Monkey</value>
</data>
创建MonkeyModel类:

public class MonkeyModel
{
    public List<Monkey> Monkeys { set; get; }
    public MonkeyModel()
    {
        Monkeys = new List<Monkey>();
        Monkeys.Add(new Monkey() { Name = AppResources.Blue });
        Monkeys.Add(new Monkey() { Name = AppResources.Capuchin });
        Monkeys.Add(new Monkey() { Name = AppResources.Baboon });
        Monkeys.Add(new Monkey() { Name = AppResources.Squirrel });
        Monkeys.Add(new Monkey() { Name = AppResources.Golden });
        Monkeys.Add(new Monkey() { Name = AppResources.Howler });
        Monkeys.Add(new Monkey() { Name = AppResources.Japanese });
    }
}
西班牙语环境中的效果:

默认语言设置:


您可以将
.resx
绑定到ViewModel,然后为
选择器绑定ViewModel以实现此目的

创建两个
.resx
文件,一个是英文文件

<data name="Baboon" xml:space="preserve">
  <value>Baboon</value>
</data>
<data name="Blue" xml:space="preserve">
  <value>Blue Monkey</value>
</data>
<data name="Capuchin" xml:space="preserve">
  <value>Capuchin Monkey</value>
</data>
<data name="Golden" xml:space="preserve">
  <value>Golden Lion Tamarin</value>
</data>
<data name="Howler" xml:space="preserve">
  <value>Howler Monkey</value>
</data>
<data name="Japanese" xml:space="preserve">
  <value>Japanese Monkey</value>
</data>
<data name="Squirrel" xml:space="preserve">
  <value>Squirrel Monkey</value>
</data>
创建MonkeyModel类:

public class MonkeyModel
{
    public List<Monkey> Monkeys { set; get; }
    public MonkeyModel()
    {
        Monkeys = new List<Monkey>();
        Monkeys.Add(new Monkey() { Name = AppResources.Blue });
        Monkeys.Add(new Monkey() { Name = AppResources.Capuchin });
        Monkeys.Add(new Monkey() { Name = AppResources.Baboon });
        Monkeys.Add(new Monkey() { Name = AppResources.Squirrel });
        Monkeys.Add(new Monkey() { Name = AppResources.Golden });
        Monkeys.Add(new Monkey() { Name = AppResources.Howler });
        Monkeys.Add(new Monkey() { Name = AppResources.Japanese });
    }
}
西班牙语环境中的效果:

默认语言设置:


一种解决方法是在实例化视图时直接将项目添加到选择器中

1-)正常本地化资源

2-)

3-)

结果:


一种解决方法是在实例化视图时直接将项目添加到选择器中

1-)正常本地化资源

2-)

3-)

结果:


@Junior Jiang-MSFT的答案几乎涵盖了它,如果您想将其用于视图模型绑定的话

但是,您仍然可以将其直接用于XAML

基本上,您会有2个或更多带有翻译的资源文件,您可以直接在XAML中调用翻译后的字符串,如下所示:

<ContentPage ...
             xmlns:resources="clr-namespace:LocalizationDemo.Resx">
    <Label Text="{x:Static resources:AppResources.NotesLabel}" />
    <Entry Placeholder="{x:Static resources:AppResources.NotesPlaceholder}" />
    <Button Text="{x:Static resources:AppResources.AddButton}" />
</ContentPage>

@Junior Jiang-MSFT的答案几乎涵盖了它,如果您想将其用于视图模型绑定的话

但是,您仍然可以将其直接用于XAML

基本上,您会有2个或更多带有翻译的资源文件,您可以直接在XAML中调用翻译后的字符串,如下所示:

<ContentPage ...
             xmlns:resources="clr-namespace:LocalizationDemo.Resx">
    <Label Text="{x:Static resources:AppResources.NotesLabel}" />
    <Entry Placeholder="{x:Static resources:AppResources.NotesPlaceholder}" />
    <Button Text="{x:Static resources:AppResources.AddButton}" />
</ContentPage>


非常感谢您的帮助,这很有意义。在阅读你的答案之前,我已经用一种简单的方式做到了这一点。我只是在视图实例化时直接将项目(添加默认资源字符串)添加到选择器中。@humbertropolis好的,如果答案有帮助,请记住投票:-)非常感谢您的帮助,这很有意义。在阅读你的答案之前,我已经用一种简单的方式做到了这一点。我只是在实例化视图时直接将项目(添加默认资源字符串)添加到选择器中。@humbertropolis好的,如果答案有帮助,请记住投票支持:-)
MonkeyModel monkeyModel = new MonkeyModel();

picker.ItemsSource = monkeyModel.Monkeys;
<ContentPage ...
             xmlns:resources="clr-namespace:LocalizationDemo.Resx">
    <Label Text="{x:Static resources:AppResources.NotesLabel}" />
    <Entry Placeholder="{x:Static resources:AppResources.NotesPlaceholder}" />
    <Button Text="{x:Static resources:AppResources.AddButton}" />
</ContentPage>