Как отображать элементы средства выбора в соответствии с языком локализации в Xamarin.Forms xaml - PullRequest
1 голос
/ 06 мая 2020

Стандартный способ создания средства выбора с помощью 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», «Обезьяна-капуцин» и др. c. Я хочу использовать строки локализации в качестве разметки расширения (x: Stati c).

Использование stati c разметки

Языковой ресурс по умолчанию

Испанский sh языковой ресурс

Как я могу этого добиться?

Ответы [ 3 ]

1 голос
/ 06 мая 2020

Вы можете привязать .resx к ViewModel, а затем привязать ViewModel к Picker, чтобы добиться этого.

Создайте два файла .resx, один для английского sh языка.

<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>

Другой - для испанского sh язык

<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>

Создать Обезьяна класс:

public class Monkey
{
    public string Name { set; get; }
}

Создать 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 });
    }
}

Теперь в Xaml Данные привязки средства выбора:

<Picker x:Name="picker"
        Title="Select a monkey"
        ItemDisplayBinding="{Binding Name}"
        TitleColor="Red" />

Контекст привязки на странице содержимого:

MonkeyModel monkeyModel = new MonkeyModel();

picker.ItemsSource = monkeyModel.Monkeys;

Эффект в испанском языке sh настройка языка:

enter image description here

Настройка языка по умолчанию:

enter image description here

0 голосов
/ 06 мая 2020

@ 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>
0 голосов
/ 06 мая 2020

Временным решением является добавление элементов непосредственно в средство выбора при создании экземпляра представления.

1-) Обычные ресурсы локализации,

язык по умолчанию "en-US"

Engli sh resources

Spani sh resources

2-) Объявить базовый c средство выбора

3-) Заполните средство выбора в соответствующем контроллере представления

Результат:

Engli sh

Испанский sh

...