Локализация и глобализация приложений
Пример локализации приложения
Используя ресурсы, определенные в файлах ресурсов для различных языков, мы можем, используя систему привязки данных, задавать локализованные ресурсы для необходимых свойств элементов в XAML-файлах. Кроме того, мы можем обращаться к локализованным ресурсом (которые подбираются автоматически в зависимости от настроек телефона) в C#-коде.
Здесь мы рассмотрим модифицированный пример "Globalization Sample" ("Пример глобализации"), http://code.msdn.microsoft.com/Globalization-Sample-a2237b7a. Он, рис. 27.2, помимо демонстрации кода для глобализации приложения, содержит пример локализации на несколько языков. Приложение изначально подготовлено для Windows Phone 7, проведено преобразование его к проекту для Windows Phone 8 – этим объясняется некоторые отличия в структуре проекта от проекта, созданного изначально для Windows Phone 8.
В файле App.xaml (как в данном проекте, так и в проектах, создаваемых по шаблонам, есть объявление ресурса приложения, который используется для доступа к локализованным строкам (Листинг 53.1).
<Application.Resources>
<local:LocalizedStrings xmlns:local="clr-namespace:sdkGlobalizationCS"
x:Key="LocalizedStrings" />
</Application.Resources>
Листинг
53.1.
Ресурс в файле App.xaml для локализации
Кроме того, в проекте располагается файл кода LocalizedString.cs – он нужен для работы системы локализации, предоставляя доступ к ресурсам приложения, Листинг 53.2.
namespace sdkGlobalizationCS
{
public class LocalizedStrings
{
public LocalizedStrings()
{
}
private static sdkGlobalizationCS.AppResources localizedResources =
new sdkGlobalizationCS.AppResources();
public sdkGlobalizationCS.AppResources LocalizedResources { get { return localizedResources; } }
}
}
Листинг
53.2.
Код файла LocalizedString.cs
В Листинге 53.3 приведен фрагмент кода файла MainPage.xaml. Он демонстрирует ссылки на локализованные ресурсы приложения при определении свойств элементов управления. При этом ссылки разрешаются и в режиме разработки (может потребоваться перестроение проекта), что позволяет видеть в окне конструктора экраны приложения, близкие к тем, которые будут выводиться при его испытании на эмуляторе или на реальном устройстве.
<!--TitlePanel contains the name of the application and page title-->
<StackPanel x:Name="TitlePanel" Grid.Row="0"
Margin="12,17,0,28">
<TextBlock Text="{Binding Path=LocalizedResources.AppTitle,
Source={StaticResource LocalizedStrings}}" x:Name="textBlockPageTitle"
FontSize="24" HorizontalAlignment="Center" />
</StackPanel>
<Button x:Name="btnMessage" Content="{Binding Path=LocalizedResources.ButtonMsgText,
Source={StaticResource LocalizedStrings}}"
Grid.Column="1" HorizontalAlignment="Left"
Margin="48,609,-1,0" VerticalAlignment="Top"
Width="177" Click="btnMessage_Click"/>
Листинг
53.3.
Фрагмент кода файла MainPage.xaml
Обратите внимание на то, что в приведенных фрагментах кода для задания текста, который выводится в заголовочной части окна приложения и текста, который представляет собой подпись к кнопке используется следующая запись:
Text="{Binding Path=LocalizedResources.AppTitle,
Source={StaticResource LocalizedStrings}}"
Content="{Binding Path=LocalizedResources.ButtonMsgText,
Source={StaticResource LocalizedStrings}}"
Text и Content – имена свойств элементов управления.
LocalizedStrings – имя ресурса, определенное в App.xaml
LocalizedResources.AppTitle и LocalizedResources.ButtonMsgText – это имена ресурсов, заданные в файлах ресурсов. В частности, LocalizedResources – объект, который определен в LocalizedStrings.cs, а AppTitle и ButtonMsgText – имена ресурсов в файлах ресурсов (рис. 27.3).

