如何根据 Xamarin.Forms xaml 中的本地化语言显示 Picker 项目
How to show Picker items according to localization language in Xamarin.Forms xaml
使用 xaml 创建选择器的标准方法如下。
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/picker/populating-itemssource
<Picker x:Name="picker"
Title="Select a monkey"
TitleColor="Red">
<Picker.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>Baboon</x:String>
<x:String>Capuchin Monkey</x:String>
<x:String>Blue Monkey</x:String>
<x:String>Squirrel Monkey</x:String>
<x:String>Golden Lion Tamarin</x:String>
<x:String>Howler Monkey</x:String>
<x:String>Japanese Macaque</x:String>
</x:Array>
</Picker.ItemsSource>
</Picker>
我不想使用硬编码文本 "Baboon"、"Capuchin Monkey" 等。我想使用本地化字符串作为扩展标记 (x:Static)。
Use of static markup
Default language resource
Spanish language resource
我怎样才能做到这一点?
您可以将 .resx
绑定到 ViewModel ,然后为 Picker
绑定 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>
另一个是西班牙语
<data name="Baboon" xml:space="preserve">
<value>Babuino</value>
</data>
<data name="Blue" xml:space="preserve">
<value>Mono azul</value>
</data>
<data name="Capuchin" xml:space="preserve">
<value>Mono capuchino</value>
</data>
<data name="Golden" xml:space="preserve">
<value>Tamarin León Dorado</value>
</data>
<data name="Howler" xml:space="preserve">
<value>Mono aullador</value>
</data>
<data name="Japanese" xml:space="preserve">
<value>Mono japonés</value>
</data>
<data name="Squirrel" xml:space="preserve">
<value>Mono ardilla</value>
</data>
创建 猴子 class :
public class Monkey
{
public string Name { set; get; }
}
创建MonkeyModel class:
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 });
}
}
现在 Xaml 选择器绑定数据:
<Picker x:Name="picker"
Title="Select a monkey"
ItemDisplayBinding="{Binding Name}"
TitleColor="Red" />
内容页中的绑定上下文:
MonkeyModel monkeyModel = new MonkeyModel();
picker.ItemsSource = monkeyModel.Monkeys;
西班牙语设置效果:
默认语言设置:
解决方法是在实例化视图时将项目直接添加到选取器。
1-) 正常本地化资源,
default language "en-US"
English resources
Spanish resources
2-) Declare a basic picker
3-) Populate the picker in the corresponding view controller
结果:
English
Spanish
@Junior Jiang - 如果您想将它与视图模型绑定一起使用,MSFT 的回答几乎涵盖了它。
不过,您仍然可以直接使用它进入 XAML 和 Localize Text in Xamarin.Forms。
基本上,您将再次拥有 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>
使用 xaml 创建选择器的标准方法如下。
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/picker/populating-itemssource
<Picker x:Name="picker"
Title="Select a monkey"
TitleColor="Red">
<Picker.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>Baboon</x:String>
<x:String>Capuchin Monkey</x:String>
<x:String>Blue Monkey</x:String>
<x:String>Squirrel Monkey</x:String>
<x:String>Golden Lion Tamarin</x:String>
<x:String>Howler Monkey</x:String>
<x:String>Japanese Macaque</x:String>
</x:Array>
</Picker.ItemsSource>
</Picker>
我不想使用硬编码文本 "Baboon"、"Capuchin Monkey" 等。我想使用本地化字符串作为扩展标记 (x:Static)。
Use of static markup
Default language resource
Spanish language resource
我怎样才能做到这一点?
您可以将 .resx
绑定到 ViewModel ,然后为 Picker
绑定 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>
另一个是西班牙语
<data name="Baboon" xml:space="preserve">
<value>Babuino</value>
</data>
<data name="Blue" xml:space="preserve">
<value>Mono azul</value>
</data>
<data name="Capuchin" xml:space="preserve">
<value>Mono capuchino</value>
</data>
<data name="Golden" xml:space="preserve">
<value>Tamarin León Dorado</value>
</data>
<data name="Howler" xml:space="preserve">
<value>Mono aullador</value>
</data>
<data name="Japanese" xml:space="preserve">
<value>Mono japonés</value>
</data>
<data name="Squirrel" xml:space="preserve">
<value>Mono ardilla</value>
</data>
创建 猴子 class :
public class Monkey
{
public string Name { set; get; }
}
创建MonkeyModel class:
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 });
}
}
现在 Xaml 选择器绑定数据:
<Picker x:Name="picker"
Title="Select a monkey"
ItemDisplayBinding="{Binding Name}"
TitleColor="Red" />
内容页中的绑定上下文:
MonkeyModel monkeyModel = new MonkeyModel();
picker.ItemsSource = monkeyModel.Monkeys;
西班牙语设置效果:
默认语言设置:
解决方法是在实例化视图时将项目直接添加到选取器。
1-) 正常本地化资源,
default language "en-US"
English resources
Spanish resources
2-) Declare a basic picker
3-) Populate the picker in the corresponding view controller
结果:
English
Spanish
@Junior Jiang - 如果您想将它与视图模型绑定一起使用,MSFT 的回答几乎涵盖了它。
不过,您仍然可以直接使用它进入 XAML 和 Localize Text in Xamarin.Forms。
基本上,您将再次拥有 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>