0

私は、英語とアラビア語の 2 つの言語で動作する Windows Phone 8 アプリケーションに取り組んでいます。 デフォルトの言語は英語です。 その後、ユーザーは [設定] ページで言語を英語からアラビア語に、またはアラビア語から英語に変更できます。

ユーザーがホームページの「都市」ボタンをクリックすると、リストボックスに都市が表示されます。デフォルトでは、都市を英語の値、つまりTextBlock x:Name="city" Text="{Binding CityNameEn}"にバインドしています。以下はUIコードです。

<ListBox x:Name="citiesList" SelectionChanged="citiesList_SelectionChanged">
<ListBox.ItemTemplate>
       <DataTemplate>
             <Grid Height="50" Margin="0,10,0,0">
                   <Grid.RowDefinitions>
                        <RowDefinition Height="40"/>
                        <RowDefinition Height="10"/>
                   </Grid.RowDefinitions>

                   <StackPanel x:Name="dataRow" Grid.Row="0" Orientation="Horizontal">
                        <TextBlock x:Name="city" Text="{Binding CityNameEn}" Foreground="#FF501F6E" Style="{StaticResource PhoneTextNormalStyle}" HorizontalAlignment="Left" FontSize="28" Width="420"/>
                        <Image x:Name="arrow" Stretch="Fill" Margin="0,0,0,0" Source="Images/arrow.png" Height="20"/>
                   </StackPanel>

                   <Image  x:Name="line" Grid.Row="1" Width="460" HorizontalAlignment="Center" Source="Images/separator.png"  />
              </Grid>
        </DataTemplate>
 </ListBox.ItemTemplate>

以下のようにリストボックスのソースを設定しています。private void Cities_Page_Loaded(object sender, RoutedEventArgs e) {cityList.ItemsSource = Constants.cities; }

以下は、City の Data Context クラスです。

class City
{

public string CityId { get; set; }

public string CityNameAr { get; set; }

public string CityNameEn { get; set; }

public string DisplayOrder { get; set; }

public int FocusedCityIndex { get; set; }

}

言語が英語の場合、すべての都市が英語で表示されます。テキスト ブロックを、英語の値を含むプロパティ CityNameEn にバインドするためです。

ユーザーが設定ページで言語を英語からアラビア語に変更したとき。 次に、以下のようにローカライズを実装しました。

if (selectedItem.Equals("English"))
{
   Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
 Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
}
else
{
   Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ar");
   Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ar");
}

ユーザーがホームページの都市ボタンをクリックすると、すべての都市がアラビア語で表示されるようになりました。 *ユーザーが言語を英語からアラビア語に変更したため。*

ただし、テキストブロックが英語の値を含むプロパティにバインドされているため、都市は英語でのみ表示されます。 *都市をアラビア語で表示するには、テキストブロックのバインドを、アラビア語の値を含むプロパティに変更する必要があります。*

言語の変更に基づいてテキスト ブロックのバインド プロパティを変更するにはどうすればよいですか。

ありがとう。

4

1 に答える 1

0

次のように、現在のカルチャに基づいて都市名を返すCity.CityNameゲッター プロパティをクラスに追加できます。City

class City
{
    public string CityId { get; set; }

    public string CityNameAr { get; set; }

    public string CityNameEn { get; set; }

    public string CityName
    {
        get
        {
            if (Thread.CurrentThread.CurrentCulture.Name == "en-US")
                return this.CityNameEn;
            else
                return this.CityNameAr;
        }
    }

    public string DisplayOrder { get; set; }

    public int FocusedCityIndex { get; set; }
}

次に、XAML でそのプロパティを使用します。

<TextBlock x:Name="city" Text="{Binding CityName}" Foreground="#FF501F6E" Style="{StaticResource PhoneTextNormalStyle}" HorizontalAlignment="Left" FontSize="28" Width="420"/>
于 2013-07-11T07:42:47.753 に答える