Цель работы: освоить технологию локализации и глобализации приложений
Магазин приложений для Windows Phone позволяет разработчику распространять приложения на множестве локальных рынков, во многих странах. Для этого приложение должно поддерживать языки тех регионов, где планируется его распространение, то есть, его следует локализовать. Конечно, если приложение рассчитано на какой-то определенный регион, оно не нуждается в локализации, но такие приложения имеют ограниченный потенциал распространения. Выход же на глобальный рынок увеличивает потенциальную выгоду разработчика, в чём бы она ни заключалась: в продажах приложения, в использовании приложения как рекламной площадки, в привлечении внимания аудитории к другим приложениям разработчика с помощью качественных бесплатных приложений.
Локализация, это, в сущности, перевод приложения (в частности, это касается, строковых ресурсов) на язык того региона, в которой планируется распространять приложение. Глобализация – это подготовка приложения к особенностям тех регионов, где планируется его распространять. Как минимум, это означает использование форматов даты, времени, валюты, принятых в том или ином регионе распространения.
Предположим, осуществляется разработка приложения, рассчитанного на глобальный рынок. В идеале, конечно, следует локализовать приложение на языки всех тех регионов, где планируется распространение. При этом в качестве языка по умолчанию лучше всего указать язык, который чаще всего используется в приложениях и понятен огромному количеству пользователей по всему миру. Речь идёт об английском языке. Если на какой-то язык локализация сделана не будет, пользователь, на телефоне которого установлен такой язык, получит приложение, ресурсы которого взяты из данных языка по умолчанию.
Проекты приложений для Windows Phone уже готовы к локализации, в частности, в них предусмотрена папка Resources, в которой присутствует файл AppResources.resx для языка по умолчанию. Этот файл представляет собой таблицу, в которой есть следующие столбцы:
Для настройки состава языков, поддерживаемых приложением, а так же – языка по умолчанию (нейтрального языка) служит окно свойств проекта, которое можно вызвать из контекстного меню проекта, рис. 27.1. Нейтральный язык можно задать, нажав на кнопку Сведения о сборке, появится соответствующее окно, оно так же присутствует на рис. 27.1.
(рис 53.1) Настройки языков, поддерживаемых приложением
При добавлении в список нового языка создаётся новый файл ресурсов, соответствующим образом названный. Выбор ресурсов для использования в конкретном экземпляре приложения, запущенном на конкретном устройстве, по умолчанию, осуществляется автоматически.
Используя ресурсы, определенные в файлах ресурсов для различных языков, мы можем, используя систему привязки данных, задавать локализованные ресурсы для необходимых свойств элементов в XAML-файлах. Кроме того, мы можем обращаться к локализованным ресурсом (которые подбираются автоматически в зависимости от настроек телефона) в C#-коде.
Здесь мы рассмотрим модифицированный пример "Globalization Sample" ("Пример глобализации"), http://code.msdn.microsoft.com/Globalization-Sample-a2237b7a. Он, рис. 27.2, помимо демонстрации кода для глобализации приложения, содержит пример локализации на несколько языков. Приложение изначально подготовлено для Windows Phone 7, проведено преобразование его к проекту для Windows Phone 8 – этим объясняется некоторые отличия в структуре проекта от проекта, созданного изначально для Windows Phone 8.
(рис 53.2) Проект приложения, демонстрирующего локализацию и глобализацию
В файле App.xaml (как в данном проекте, так и в проектах, создаваемых по шаблонам, есть объявление ресурса приложения, который используется для доступа к локализованным строкам (Листинг 53.1).
<Application.Resources>
<local:LocalizedStrings xmlns:local="clr-namespace:sdkGlobalizationCS"
x:Key="LocalizedStrings" />
</Application.Resources>
Кроме того, в проекте располагается файл кода 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.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"/>
Обратите внимание на то, что в приведенных фрагментах кода для задания текста, который выводится в заголовочной части окна приложения и текста, который представляет собой подпись к кнопке используется следующая запись:
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).
(рис 53.3) Один из файлов ресурсов
Имена ресурсов в различных файлах ресурсов должны совпадать. В нашем случае ресурсы ButtonMsgText и MessageText добавлены в файл языка по умолчанию (AppResource.resx) и в файл для русского языка (AppResource.ru_RU.resx). В первом случае ресурсы имеют англоязычное написание, во втором – русскоязычное. Если в системе, в которой будет запущено приложение, используется какой-то другой язык, для отображения соответствующего ресурса будет выбран язык по умолчанию, то есть – английский. Автоматически формируемый файл AppResources.Designer.cs, используемый в системе локализации (при добавлении нового ресурса в файл ресурсов, здесь автоматически формируется соответствующий код для возврата ресурса) можно настроить на возврат при обращении к ресурсу не только строк, но и других объектов.
В коде, который собран в MainPage.xaml.cs, Листинг 53.4, обрабатывается выбор языка из списка, установка региональных параметров, соответствующих выбранному языку, и вывод данных, отформатированных с использованием региональных параметров. Это – пример глобализации приложения.
using System;
using System.Windows.Controls;
using Microsoft.Phone.Controls;
using System.Globalization;
using System.Threading;
using System.Windows;
namespace sdkGlobalizationCS
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
}
private void LocList_SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
{
// Установка текущих региональных параметров в соответствии с выбранными и отображение сведений,
// таких, как информация о дате, времени, валюте, и других, в соответствующем формате.
string nl;
string cul;
nl = locList.SelectedIndex.ToString();
switch (nl)
{
case "0":
cul = "zh-CN";
break;
case "1":
cul = "zh-TW";
break;
case "2":
cul = "cs-CZ";
break;
case "3":
cul = "da-DK";
break;
case "4":
cul = "nl-NL";
break;
case "5":
cul = "en-GB";
break;
case "6":
cul = "en-US";
break;
case "7":
cul = "fi-FI";
break;
case "8":
cul = "fr-FR";
break;
case "9":
cul = "de-DE";
break;
case "10":
cul = "el-GR";
break;
case "11":
cul = "hu-HU";
break;
case "12":
cul = "it-IT";
break;
case "13":
cul = "ja-JP";
break;
case "14":
cul = "ko-KR";
break;
case "15":
cul = "nb-NO";
break;
case "16":
cul = "pl-PL";
break;
case "17":
cul = "pt-BR";
break;
case "18":
cul = "pt-PT";
break;
case "19":
cul = "ru-RU";
break;
case "20":
cul = "es-ES";
break;
case "21":
cul = "sv-SE";
break;
default:
cul = "en-US";
break;
}
//Установка текущих ррегиональных параметров потока на выбранные
CultureInfo newCulture = new CultureInfo(cul);
Thread.CurrentThread.CurrentCulture = newCulture;
CultureInfo cc, cuic;
cc = Thread.CurrentThread.CurrentCulture;
cuic = Thread.CurrentThread.CurrentUICulture;
// Отображение названия региональных параметров на языке выбранного региона
regionalFrmt.Text = cc.NativeName;
// Отображение названия региональных параметров на языке локализации
displayLang.Text = cuic.DisplayName;
// Вывод даты (в сокращенной и полной формах) для текущих региональных параметров
DateTime curDate = DateTime.Now;
longDate.Text = cc.DateTimeFormat.LongDatePattern.ToString() + " " + curDate.ToString("D");
shortDate.Text = cc.DateTimeFormat.ShortDatePattern.ToString() + " " + curDate.ToString("d");
// Отображение времени (в полной форме) для текущих региональных параметров
longTime.Text = cc.DateTimeFormat.LongTimePattern + " " + curDate.ToString("T");
// Вывод форматированного представления валюты с символом валюты для текущих региональных параметров
Int64 money = 123456789;
currencyFrmt.Text = money.ToString("C");
}
private void btnMessage_Click(object sender, System.Windows.RoutedEventArgs e)
{
//Пример использования локализованных строк в коде
//Вывод локализованного сообщения
MessageBox.Show(sdkGlobalizationCS.AppResources.MessageText);
}
}
}
Обратите внимание на то, как доступ к локализованным ресурсам осуществляется в коде. Так, для получения локализованного текста, который выводится в сообщении, используется следующая команда:
sdkGlobalizationCS.AppResources.MessageText
Здесь MessageText – это имя ресурса в файле ресурсов.
В проектах приложений, созданных по стандартным шаблонам, есть всё необходимое для их локализации. Существуют различные подходы к локализации приложений. Например, сначала разработчик создает приложение на знакомом ему языке, после чего находит в XAML-коде и в файлах программного кода все строки, которые нужно локализовать, создаёт ресурсы, соответствующие этим строкам на различных языках в RESX-файлах и меняет прямое указание строк ссылками на соответствующие ресурсы. Глобализация – это подготовка приложения к глобальному рынку. С технической точки зрения она заключается, в частности, в использовании форматов данных, применяемых в том или ином регионе. Кроме того, приложение не должно содержать материалов, которые покажутся оскорбительными пользователям какого-либо региона, в котором планируется распространять приложение. Для тестирования локализованных приложений можно воспользоваться либо эмулятором, либо аппаратным устройством, настраивая язык системы для проверки каждой из версий.
Так как локализация приложений позволяет успешно распространять их на множестве рынков, которые поддерживает Магазин Windows Phone, всегда, когда приложение может использоваться глобально, следует рассматривать возможность его локализации. Выполните локализацию приложения на английский язык (предполагается, что при разработке вы используете русский язык), установите его в качестве языка по умолчанию, в качестве отчёта о проделанной работе продемонстрируйте таблицу с перечнем имен, русскоязычных и англоязычных значений, соответствующих строк.
К данной лекции подготовлено видеоприложение и демонстрационный программный проект.
Цель работы: освоить технологию локализации и глобализации приложений
Магазин приложений для Windows Phone позволяет разработчику распространять приложения на множестве локальных рынков, во многих странах. Для этого приложение должно поддерживать языки тех регионов, где планируется его распространение, то есть, его следует локализовать. Конечно, если приложение рассчитано на какой-то определенный регион, оно не нуждается в локализации, но такие приложения имеют ограниченный потенциал распространения. Выход же на глобальный рынок увеличивает потенциальную выгоду разработчика, в чём бы она ни заключалась: в продажах приложения, в использовании приложения как рекламной площадки, в привлечении внимания аудитории к другим приложениям разработчика с помощью качественных бесплатных приложений.
Локализация, это, в сущности, перевод приложения (в частности, это касается, строковых ресурсов) на язык того региона, в которой планируется распространять приложение. Глобализация – это подготовка приложения к особенностям тех регионов, где планируется его распространять. Как минимум, это означает использование форматов даты, времени, валюты, принятых в том или ином регионе распространения.
Предположим, осуществляется разработка приложения, рассчитанного на глобальный рынок. В идеале, конечно, следует локализовать приложение на языки всех тех регионов, где планируется распространение. При этом в качестве языка по умолчанию лучше всего указать язык, который чаще всего используется в приложениях и понятен огромному количеству пользователей по всему миру. Речь идёт об английском языке. Если на какой-то язык локализация сделана не будет, пользователь, на телефоне которого установлен такой язык, получит приложение, ресурсы которого взяты из данных языка по умолчанию.
Проекты приложений для Windows Phone уже готовы к локализации, в частности, в них предусмотрена папка Resources, в которой присутствует файл AppResources.resx для языка по умолчанию. Этот файл представляет собой таблицу, в которой есть следующие столбцы:
Для настройки состава языков, поддерживаемых приложением, а так же – языка по умолчанию (нейтрального языка) служит окно свойств проекта, которое можно вызвать из контекстного меню проекта, рис. 27.1. Нейтральный язык можно задать, нажав на кнопку Сведения о сборке, появится соответствующее окно, оно так же присутствует на рис. 27.1.
(рис 53.1) Настройки языков, поддерживаемых приложением
При добавлении в список нового языка создаётся новый файл ресурсов, соответствующим образом названный. Выбор ресурсов для использования в конкретном экземпляре приложения, запущенном на конкретном устройстве, по умолчанию, осуществляется автоматически.
Используя ресурсы, определенные в файлах ресурсов для различных языков, мы можем, используя систему привязки данных, задавать локализованные ресурсы для необходимых свойств элементов в XAML-файлах. Кроме того, мы можем обращаться к локализованным ресурсом (которые подбираются автоматически в зависимости от настроек телефона) в C#-коде.
Здесь мы рассмотрим модифицированный пример "Globalization Sample" ("Пример глобализации"), http://code.msdn.microsoft.com/Globalization-Sample-a2237b7a. Он, рис. 27.2, помимо демонстрации кода для глобализации приложения, содержит пример локализации на несколько языков. Приложение изначально подготовлено для Windows Phone 7, проведено преобразование его к проекту для Windows Phone 8 – этим объясняется некоторые отличия в структуре проекта от проекта, созданного изначально для Windows Phone 8.
(рис 53.2) Проект приложения, демонстрирующего локализацию и глобализацию
В файле App.xaml (как в данном проекте, так и в проектах, создаваемых по шаблонам, есть объявление ресурса приложения, который используется для доступа к локализованным строкам (Листинг 53.1).
<Application.Resources>
<local:LocalizedStrings xmlns:local="clr-namespace:sdkGlobalizationCS"
x:Key="LocalizedStrings" />
</Application.Resources>
Кроме того, в проекте располагается файл кода 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.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"/>
Обратите внимание на то, что в приведенных фрагментах кода для задания текста, который выводится в заголовочной части окна приложения и текста, который представляет собой подпись к кнопке используется следующая запись:
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).
(рис 53.3) Один из файлов ресурсов
Имена ресурсов в различных файлах ресурсов должны совпадать. В нашем случае ресурсы ButtonMsgText и MessageText добавлены в файл языка по умолчанию (AppResource.resx) и в файл для русского языка (AppResource.ru_RU.resx). В первом случае ресурсы имеют англоязычное написание, во втором – русскоязычное. Если в системе, в которой будет запущено приложение, используется какой-то другой язык, для отображения соответствующего ресурса будет выбран язык по умолчанию, то есть – английский. Автоматически формируемый файл AppResources.Designer.cs, используемый в системе локализации (при добавлении нового ресурса в файл ресурсов, здесь автоматически формируется соответствующий код для возврата ресурса) можно настроить на возврат при обращении к ресурсу не только строк, но и других объектов.
В коде, который собран в MainPage.xaml.cs, Листинг 53.4, обрабатывается выбор языка из списка, установка региональных параметров, соответствующих выбранному языку, и вывод данных, отформатированных с использованием региональных параметров. Это – пример глобализации приложения.
using System;
using System.Windows.Controls;
using Microsoft.Phone.Controls;
using System.Globalization;
using System.Threading;
using System.Windows;
namespace sdkGlobalizationCS
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
}
private void LocList_SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
{
// Установка текущих региональных параметров в соответствии с выбранными и отображение сведений,
// таких, как информация о дате, времени, валюте, и других, в соответствующем формате.
string nl;
string cul;
nl = locList.SelectedIndex.ToString();
switch (nl)
{
case "0":
cul = "zh-CN";
break;
case "1":
cul = "zh-TW";
break;
case "2":
cul = "cs-CZ";
break;
case "3":
cul = "da-DK";
break;
case "4":
cul = "nl-NL";
break;
case "5":
cul = "en-GB";
break;
case "6":
cul = "en-US";
break;
case "7":
cul = "fi-FI";
break;
case "8":
cul = "fr-FR";
break;
case "9":
cul = "de-DE";
break;
case "10":
cul = "el-GR";
break;
case "11":
cul = "hu-HU";
break;
case "12":
cul = "it-IT";
break;
case "13":
cul = "ja-JP";
break;
case "14":
cul = "ko-KR";
break;
case "15":
cul = "nb-NO";
break;
case "16":
cul = "pl-PL";
break;
case "17":
cul = "pt-BR";
break;
case "18":
cul = "pt-PT";
break;
case "19":
cul = "ru-RU";
break;
case "20":
cul = "es-ES";
break;
case "21":
cul = "sv-SE";
break;
default:
cul = "en-US";
break;
}
//Установка текущих ррегиональных параметров потока на выбранные
CultureInfo newCulture = new CultureInfo(cul);
Thread.CurrentThread.CurrentCulture = newCulture;
CultureInfo cc, cuic;
cc = Thread.CurrentThread.CurrentCulture;
cuic = Thread.CurrentThread.CurrentUICulture;
// Отображение названия региональных параметров на языке выбранного региона
regionalFrmt.Text = cc.NativeName;
// Отображение названия региональных параметров на языке локализации
displayLang.Text = cuic.DisplayName;
// Вывод даты (в сокращенной и полной формах) для текущих региональных параметров
DateTime curDate = DateTime.Now;
longDate.Text = cc.DateTimeFormat.LongDatePattern.ToString() + " " + curDate.ToString("D");
shortDate.Text = cc.DateTimeFormat.ShortDatePattern.ToString() + " " + curDate.ToString("d");
// Отображение времени (в полной форме) для текущих региональных параметров
longTime.Text = cc.DateTimeFormat.LongTimePattern + " " + curDate.ToString("T");
// Вывод форматированного представления валюты с символом валюты для текущих региональных параметров
Int64 money = 123456789;
currencyFrmt.Text = money.ToString("C");
}
private void btnMessage_Click(object sender, System.Windows.RoutedEventArgs e)
{
//Пример использования локализованных строк в коде
//Вывод локализованного сообщения
MessageBox.Show(sdkGlobalizationCS.AppResources.MessageText);
}
}
}
Обратите внимание на то, как доступ к локализованным ресурсам осуществляется в коде. Так, для получения локализованного текста, который выводится в сообщении, используется следующая команда:
sdkGlobalizationCS.AppResources.MessageText
Здесь MessageText – это имя ресурса в файле ресурсов.
В проектах приложений, созданных по стандартным шаблонам, есть всё необходимое для их локализации. Существуют различные подходы к локализации приложений. Например, сначала разработчик создает приложение на знакомом ему языке, после чего находит в XAML-коде и в файлах программного кода все строки, которые нужно локализовать, создаёт ресурсы, соответствующие этим строкам на различных языках в RESX-файлах и меняет прямое указание строк ссылками на соответствующие ресурсы. Глобализация – это подготовка приложения к глобальному рынку. С технической точки зрения она заключается, в частности, в использовании форматов данных, применяемых в том или ином регионе. Кроме того, приложение не должно содержать материалов, которые покажутся оскорбительными пользователям какого-либо региона, в котором планируется распространять приложение. Для тестирования локализованных приложений можно воспользоваться либо эмулятором, либо аппаратным устройством, настраивая язык системы для проверки каждой из версий.
Так как локализация приложений позволяет успешно распространять их на множестве рынков, которые поддерживает Магазин Windows Phone, всегда, когда приложение может использоваться глобально, следует рассматривать возможность его локализации. Выполните локализацию приложения на английский язык (предполагается, что при разработке вы используете русский язык), установите его в качестве языка по умолчанию, в качестве отчёта о проделанной работе продемонстрируйте таблицу с перечнем имен, русскоязычных и англоязычных значений, соответствующих строк.
К данной лекции подготовлено видеоприложение и демонстрационный программный проект.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.