Статьи

Работа с ресурсами приложения на Windows Phone

Конечный продукт
Что вы будете создавать

В предыдущих уроках мы узнали о ресурсах приложений, MAT (Multilingual App Toolkit) и о том, как тестировать локализованное приложение. В этом руководстве мы не только подведем итоги, но и создадим локализованную панель приложений, которую вы сможете использовать в любом месте вашего приложения.

Разработчикам часто приходится использовать одну и ту же панель приложения на нескольких страницах своего проекта, и они обычно заканчивают копированием и вставкой кода XAML и C #, что не рекомендуется.

В этом руководстве вы узнаете, как использовать ресурсы приложений и как добавлять локализацию и глобализацию в свои приложения. Вы также научитесь использовать файлы App.xaml и App.xaml.cs для создания локализованной панели приложений, которую можно использовать в любом месте приложения Windows Phone.

Пользователи Windows Phone не все носители английского языка. На самом деле, только 34% из них говорят по-английски. Это означает, что 66% говорят на языке, отличном от английского, и поэтому важно создавать локализованные приложения.

Одна из эффективных стратегий увеличения загрузки приложений — сделать ваше приложение более подходящим для пользователей Windows Phone, которые не говорят по-английски. Чем больше языков поддерживает ваше приложение, тем больше загрузок оно получит и тем выше будут оценки вашего приложения. Поддерживая французский, немецкий, арабский и испанский языки, вы поддерживаете около 75% рынка Windows Phone.

В этом уроке мы будем переводить все ресурсы нашего приложения на французский и арабский языки. Вот несколько простых советов, которые следует иметь в виду, прежде чем мы начнем:

  • Обязательно назовите все ресурсы, которые вы будете использовать, значимым имена, потому что мы будем ссылаться на строковые ресурсы по их имени,   не их ценность. Попробуйте дать каждому ресурсу уникальный   имя, которое имеет смысл.
  • Попробуйте собрать все свои строковые ресурсы в AppResources.resx , включая заголовки кнопок и сообщения об ошибках.
  • Включить многострочную поддержку и перенос текста в элементах управления.
  • Всегда сохраняйте свою работу и не забывайте часто перестраивать проект, чтобы внести изменения, внесенные вами в AppResources.resx .

Валюты, числа, дата, время и региональные форматы отличаются от культуры к культуре. К счастью, класс CultureInfo заботится об этих деталях для каждого языка. На самом деле, вы даже можете получить текущие культурные данные телефона и показать его информацию в MessageBox используя одну строку кода:

1
MessageBox.Show(CultureInfo.CurrentCulture.Name);
Получите информацию о текущей культуре телефонов и управляйте своим приложением в зависимости от культуры телефонов

Однако функция InitializeLanguage() в App.xaml.cs выполняет работу автоматически при каждом запуске приложения и устанавливает RootFrame.Language на основе значения ресурса AppResources.ResourceLanguage . Обратите внимание, что если ваше приложение не поддерживает какой-либо язык, кроме en-US (английский, США), оно использует нейтральный и используемый по умолчанию файл проекта AppResources.resx .

В этом уроке мы создадим одностраничное приложение, которое покажет пользователю некоторые мудрые старые высказывания. Для начала, в MainPage.xaml , мы добавим несколько элементов TextBlock без указания их содержимого, добавив следующие две строки кода в родительский ContentPanel   сетка:

1
2
<TextBlock TextWrapping=»Wrap» FontSize=»30″></TextBlock>
<TextBlock TextWrapping=»Wrap» FontSize=»30″></TextBlock>

Мы также вносим следующие изменения в файл AppResources.resx по умолчанию:

  • изменение строкового значения ApplicationTitle
  • добавление двух строк, как показано на следующем скриншоте
Добавление ваших строковых ресурсов в файл AppResourcesresx

Давайте теперь вернемся к MainPage.xaml . После добавления строк, которые нам понадобятся в нашем приложении, мы устанавливаем свойство Text элемента управления TextBlock чтобы указать содержимое каждого TextBlock блока.

Вместо того, чтобы показывать «МОЕ ПРИЛОЖЕНИЕ» в качестве заголовка, мы используем строку «Мое локализованное приложение». Мы можем сделать это, используя привязку, которая делает ссылку на ресурсы приложения, привязывая значение строки. Чтобы сделать эту ссылку, мы будем использовать не само строковое значение, а его атрибут (имя), ApplicationTitle .

1
Text=»{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}»

Каждый из двух элементов TextBlock будет иметь поговорку. Мы просто будем использовать ту же строку кода, заменив атрибут ApplicationTitle атрибутом нашего высказывания. Вот как должен выглядеть ваш код:

1
2
3
4
<StackPanel>
    <TextBlock TextWrapping=»Wrap» Text=»{Binding Path=LocalizedResources.HappinessSaying, Source={StaticResource LocalizedStrings}}» FontSize=»30″></TextBlock>
    <TextBlock TextWrapping=»Wrap» Text=»{Binding Path=LocalizedResources.NelsonMandelaSaying, Source={StaticResource LocalizedStrings}}» FontSize=»30″></TextBlock>
</StackPanel>

Вот как выглядит результат:

Результат после привязки ресурсов String

Теперь нам нужно только добавить другие языки и перевести.

Чтобы добавить другой язык, перейдите в свойства проекта, щелкнув правой кнопкой мыши проект в окне обозревателя решений . Обязательно получите доступ к свойствам проекта, а не к свойствам решения.

Доступ к свойствам проекта для добавления новых поддерживаемых языков

На вкладке приложения вы должны увидеть раздел « Поддерживаемые языки ». Выберите язык, который вы хотите поддерживать. Как упоминалось ранее в этом уроке, мы добавим французский и арабский. Как видно из списка, вы даже можете выбрать культуру в зависимости от региона, например, французский (Франция), французский (Бельгия). Для этого урока мы просто выберем общий, игнорируя диалект и регион.

После сохранения изменений вы заметите, что Visual Studio автоматически сгенерировал два новых файла .resx:

  • AppResources.ar.resx для арабского
  • AppResources.fr.resx для французского
Новые файлы AppResourcesresx для каждого нового поддерживаемого языка

Обратите внимание, что вновь созданные файлы имеют то же содержимое, что и AppResources.resx . Вы не должны изменять атрибуты (имена). Вам нужно только перевести значения.

Multilingual App Toolkit очень полезен для перевода строковых ресурсов. Он интегрирован в Visual Studio, предоставляя поддержку для создания локализованных приложений Windows и Windows Phone и помогая с переводом ресурсов приложений. Multilingual App Toolkit упрощает добавление других языков и позволяет легко импортировать и экспортировать файлы переводов.

Вы можете скачать Multilingual App Toolkit в виде расширения Visual Studio с сайта разработчика Microsoft. После установки инструментария выберите « Включить многоязычный инструментарий приложения» в меню « Сервис» .

Включить многоязычный набор инструментов приложения из меню инструментов

После включения MAT Visual Studio создает новые файлы .xlf для каждого из поддерживаемых языков, добавленных ранее. Это означает, что вы можете создавать машинные переводы, щелкнув правой кнопкой мыши файл .xlf и выбрав « Создать машинные переводы» . Вы также можете изменить переведенные строковые ресурсы в целевом теге во всех файлах .xlf .


Вы можете протестировать локализованное приложение с помощью эмулятора.

  • Отладьте ваш проект и перейдите в настройки эмулятора .
  • Перейдите на вкладку « Язык » и добавьте новый язык. Важно не перезагружать телефон.
  • Перейдите на вкладку « Регион » и выберите свой регион.
  • Перезагрузите телефон.

После перезагрузки телефона Visual Studio может выдать ошибку, потеряв соединение с эмулятором. После перезагрузки телефона снова отладить проект. Вот как приложение выглядит для арабского:

Новые результаты после добавления новых поддерживаемых языков и изменения культуры по умолчанию на эмуляторах Английский США на Арабский

Теперь, когда мы закончили со строковыми ресурсами, мы добавим локализованную панель приложения в наше приложение.

На этом этапе мы создадим панель приложения, которую мы можем использовать в любом месте нашего приложения. Для этого мы будем использовать файл App.xaml , в котором мы определяем глобальные стили и ресурсы XAML, которые будут использоваться в приложении.

В теге ApplicationResources в App.xaml мы добавляем панель приложения, содержащую только значок и пункт меню. Не забудьте дать имя на панель приложения, используя атрибут x:key чтобы мы могли ссылаться на него позже.

1
2
3
4
5
6
<shell:ApplicationBar x:Key=»myAppBar» IsVisible=»True» IsMenuEnabled=»True» >
    <shell:ApplicationBarIconButton IconUri=»/Assets/AppBar/questionmark.png» Text=»test» Click=»Help_Click» />
    <shell:ApplicationBar.MenuItems>
        <shell:ApplicationBarMenuItem Text=»Rate and review» Click=»RateReview_Click» />
    </shell:ApplicationBar.MenuItems>
</shell:ApplicationBar>

В RateReview_Click событий RateReview_Click мы используем одну из задач телефона, чтобы найти пользователей в магазине, если они хотят оставить отзыв или оценить приложение. Что касается Help_Click событий Help_Click , мы просто добавляем немного кода C # для навигации между различными страницами. Обратите внимание, что я добавил новую страницу XAML AboutTheApp.xaml , на которой мы показываем информацию о нашем приложении.

В файле App.xamls.cs добавьте следующий оператор, чтобы мы могли воспользоваться классом задач телефона:

1
using Microsoft.Phone.Shell;

Когда пользователь нажимает на пункт меню «Оценить и просматривать», приложение открывает магазин на странице, где пользователь может оценить и / или просмотреть приложение. Мы используем MarketPlaceReviewTask следующим образом:

1
2
MarketplaceReviewTask review = new MarketplaceReviewTask();
review.Show();

Что касается Help_Click событий Help_Click , следующий фрагмент кода заботится о перемещении между двумя страницами:

1
(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri(«/AboutTheApp.xaml», UriKind.RelativeOrAbsolute));

После создания панели приложения, которую мы хотим использовать, мы добавляем новый экземпляр панели приложения, используя приведенный ниже фрагмент кода в MainPage.xaml.cs, а затем делаем его ссылающимся на тот, который в App.xaml .

1
2
3
InitializeComponent();
ApplicationBar = new ApplicationBar();
ApplicationBar = ((ApplicationBar)Application.Current.Resources[«myAppBar»]);

Мы вообще не использовали AppResources для построения панели приложения, что означает, что свойства текста уже установлены независимо от культуры телефона. На самом деле, мы не можем использовать привязки при работе с панелями приложений.

Вот почему мы будем ссылаться на панель приложения, которую мы создали ранее в App.xaml.cs, и изменим значение строки, используя простой блок кода сразу после метода InitializeComponent() . Используемые строки также добавляются в AppResources.resx .

1
2
3
4
5
// Standard XAML initialization
InitializeComponent();
var appBar = App.Current.Resources[«myAppBar»] as ApplicationBar;
((ApplicationBarIconButton)appBar.Buttons[0]).Text = AppResources.AboutAppBarIconText;
((ApplicationBarMenuItem)appBar.MenuItems[0]).Text = AppResources.RateAppBarMenuItemText;

После добавления строковых ресурсов переведите их и пересоберите   проэкт. Наконец, добавьте информацию о странице AboutTheApp.xaml . Вот как выглядит результат:

О странице приложения Английская версия
Конечный результат на английском
Окончательный результат на французском

В этом руководстве мы узнали о культуре телефона, о том, как использовать ресурсы приложений, как создать локализованное приложение и панель приложений, а также о том, как создать панель приложений, которую мы можем использовать в любом месте нашего приложения. Мы также узнали, как сделать ссылку на строковое значение в файлах AppResources, используя привязки.

И, наконец, мы узнали, как мы используем задачи по телефону, чтобы помочь пользователям оценить и просмотреть приложение в магазине. Не стесняйтесь скачать пример проекта и задать любой вопрос, который приходит вам в голову в комментариях ниже.