Поделиться через


Работа с локализацией watchOS в Xamarin

Адаптация приложений watchOS для нескольких языков

Apple Watch, отображающая локализованное содержимое

Приложения watchOS локализованы с помощью стандартных методов iOS:

  • Использование идентификатора локализации на элементах раскадровки
  • Файлы .strings , связанные с раскадровкой, и
  • Файлы localizable.strings для текста, используемого в коде.

Раскадровки и ресурсы по умолчанию находятся в базовом каталоге, а переводы на конкретный язык и другие ресурсы хранятся в каталогах LPROJ. IOS и Watch OS автоматически будут использовать выбор языка пользователя для загрузки правильных строк и ресурсов.

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

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

Смотреть приложение

Приложение watch содержит раскадровки, описывающую пользовательский интерфейс приложения. Все элементы управления (например Label , и Image), поддерживающие локализацию, имеют идентификатор локализации.

Каждый каталог lproj для конкретного языка должен содержать файлы строковых файлов с переводами для каждого элемента (с помощью идентификатора локализации), а также изображения, на которые ссылается раскадровка.

Расширение Watch

Расширение часы — это место, в котором выполняется код приложения. Любой текст, отображаемый пользователю из кода, должен быть локализован в расширении, а не в приложении наблюдения.

Расширение также должно содержать каталоги lproj, зависящие от языка, но файлы .strings требуют только перевода текста, используемого в коде.

Глобализация решения "Контрольные значения"

Глобализация — это процесс локализации приложения. При просмотре приложений это означает проектирование раскадровки с различными длинами текста, что гарантирует, что каждый макет экрана настраивается соответствующим образом в зависимости от того, какой текст отображается. Кроме того, необходимо убедиться, что любые строки, на которые ссылается код расширения часов, можно преобразовать с помощью LocalizedString метода.

Смотреть приложение

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

  1. Создайте каталог Base.lproj и переместите в него каталог Interface.storyboard.

  2. Создайте <каталоги language.lproj> для каждого языка, который вы хотите поддерживать.

  3. Каталоги LPROJ должны содержать текстовый файл Interface.strings (имя файла должно соответствовать имени буфера хранения). При необходимости можно разместить любые изображения, требующие локализации в этих каталогах.

Проект приложения watch выглядит следующим образом после внесения этих изменений (добавлены только английские и испанские языковые файлы):

Проект приложения

Раскадровка текста

При редактировании раскадровки выберите каждый элемент и обратите внимание на идентификатор локализации, который отображается на панели свойств :

Идентификатор локализации, отображаемый на панели свойств

В папке Base.lproj создайте пары "ключ-значение", как показано ниже, где ключ формируется идентификатором локализации и именем свойства элемента управления, присоединенным точкой (.).

"AgC-eL-Hgc.title" = "WatchL10nEN"; // interface controller title
"0.text" = "Welcome to WatchL10n"; // Welcome
"1.text" = "Language settings are in Apple Watch App"; // How to change language
"2.title" = "Greetings"; // Greeting
"6.title" = "Detail";
"39.text" = "Second screen";

Обратите внимание на то, что идентификатор локализации может быть простой строкой чисел (например. "0", "1" и т. д.) или более сложная строка (например, AgC-eL-Hgc). Labelэлементы управления имеют свойство и Buttonимеют Text Title свойство, которое отражается таким образом, как заданы локализованные значения, обязательно используйте имя свойства нижнего регистра, как показано в приведенном выше примере.

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

Раскадровки изображений

Пример решения также содержит изображение в каждой языковой gradient@2x.png папке. Это изображение может отличаться для каждого языка (например, он может иметь внедренный текст, который требует перевода или использовать локализованную иконографию).

Просто задайте свойство image изображения в раскадровки, а правильный образ будет отображаться на часах в соответствии с языком, выбранным пользователем.

Установка свойства image Image в раскадровке

Примечание. Так как все apple Watches имеют дисплей Retina, требуется только @2x версия изображения. Вам не нужно указывать @2x в раскадровки.

Расширение Watch

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

Структура каталогов расширений часов для поддержки локализации

Строки в коде

Файл Localizable.strings имеет немного отличается от структуры, отличной от структуры, связанной с раскадровкой. В этом случае можно выбрать любую строку "ключ"; Рекомендация Apple — использовать ключ, который отражает фактический текст, который будет отображаться на языке по умолчанию:

"Breakfast time" = "Breakfast time!"; // morning
"Lunch time" = "Lunch time!"; // midday
"Dinner time" = "Dinner time!"; // evening
"Bed time" = "Bed time!"; // night

Метод NSBundle.MainBundle.LocalizedString используется для разрешения строк в переведенные аналоги, как показано в приведенном ниже коде.

var display = "Breakfast time";
var localizedDisplay =
  NSBundle.MainBundle.LocalizedString (display, comment:"greeting");
displayText.SetText (localizedDisplay);

Изображения в коде

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

  1. Вы можете изменить Image элемент управления, задав его значение строкового имени изображения, уже существующего в приложении "Просмотр", например.

    displayImage.SetImage("gradient"); // image in Watch App (as shown above)
    
  2. Вы можете переместить изображение из расширения в часы, а FromBundle приложение автоматически выберет правильное изображение для выбора языка пользователя. В примере решения есть изображение language@2x.png в каждой языковой папке, и оно отображается DetailController с помощью следующего кода:

    using (var image = UIImage.FromBundle ("language")) {
        displayImage.SetImage (image);
    }
    

    Обратите внимание, что при ссылке на имя файла образа не нужно указывать @2x .

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

Локализация

После настройки решения переводчики должны обработать файлы и изображения .strings для каждого языка, который вы хотите поддерживать.

Вы можете создать столько каталогов .lproj , сколько вам нужно (по одному для каждого поддерживаемого языка). Они называются с помощью языковых кодов, таких как en, es, de, ja, pt-BR и т. д. (для английского, испанского, немецкого, японского и португальского (бразильского) соответственно).

В присоединенном примере используются переводы (созданные компьютером) для демонстрации локализации приложения watchOS.

Смотреть приложение

Эти значения используются для перевода пользовательского интерфейса, определенного в раскадровки часового приложения. Значение ключа — это сочетание идентификатора локализации каждого элемента управления раскадровки и преобразуемого свойства.

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

es.lproj/Interface.strings

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

"AgC-eL-Hgc.title" = "Spanish"; // app screen heading
"0.text" = "Bienvenido a WatchL10n"; // Welcome to WatchL10n
"1.text" = "Ajustes de idioma están en Apple Watch App"; // Change the language in the Apple Watch App
"2.title" = "Saludos"; // Greetings
"6.title" = "2nd"; // second screen heading
"39.text" = "Segunda pantalla"; // second screen

Расширение Watch

Эти значения используются в коде для перевода информации перед отображением пользователю. Ключ выбирается разработчиком во время написания кода и обычно содержит фактическую строку для перевода.

Файл es.lproj/Localizable.strings

Строки языка (машинный перевод) охватывают следующие строки:

"Breakfast time" = "la hora del desayuno"; // morning
"Lunch time" = "hora de comer"; // midday
"Dinner time" = "hora de la cena"; // evening
"Bed time" = "la hora de dormir"; // night

Тестирование

Метод изменения языковых настроек отличается от симулятора и физических устройств.

Симулятор

На симуляторе выберите язык для тестирования с помощью приложения Параметры iOS (серый значок шестеренки на начальном экране симулятора).

Параметры локализации приложений Параметры iOS

Смотреть устройство

При тестировании с помощью часов измените язык часов в приложении Apple Watch на парном i Телефон.

Изменение языка часов в приложении Apple Watch на парном i Телефон