Локализация и глобализация приложений
Пример локализации приложения
Используя ресурсы, определенные в файлах ресурсов для различных языков, мы можем, используя систему привязки данных, задавать локализованные ресурсы для необходимых свойств элементов в 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).