Работа с локализацией watchOS в Xamarin
Адаптация приложений watchOS для нескольких языков
Приложения watchOS локализованы с помощью стандартных методов iOS:
- Использование идентификатора локализации на элементах раскадровки
- Файлы .strings , связанные с раскадровкой, и
- Файлы localizable.strings для текста, используемого в коде.
Раскадровки и ресурсы по умолчанию находятся в базовом каталоге, а переводы на конкретный язык и другие ресурсы хранятся в каталогах LPROJ. IOS и Watch OS автоматически будут использовать выбор языка пользователя для загрузки правильных строк и ресурсов.
Так как приложение Apple Watch состоит из двух частей: просмотр приложения и расширения watch — локализованные строковые ресурсы требуются в двух местах в зависимости от того, как они используются.
Локализованный текст и ресурсы будут отличаться в приложении наблюдения и расширении часов.
Смотреть приложение
Приложение watch содержит раскадровки, описывающую пользовательский интерфейс приложения. Все элементы управления (например Label
, и Image
), поддерживающие локализацию, имеют идентификатор локализации.
Каждый каталог lproj для конкретного языка должен содержать файлы строковых файлов с переводами для каждого элемента (с помощью идентификатора локализации), а также изображения, на которые ссылается раскадровка.
Расширение Watch
Расширение часы — это место, в котором выполняется код приложения. Любой текст, отображаемый пользователю из кода, должен быть локализован в расширении, а не в приложении наблюдения.
Расширение также должно содержать каталоги lproj, зависящие от языка, но файлы .strings требуют только перевода текста, используемого в коде.
Глобализация решения "Контрольные значения"
Глобализация — это процесс локализации приложения.
При просмотре приложений это означает проектирование раскадровки с различными длинами текста, что гарантирует, что каждый макет экрана настраивается соответствующим образом в зависимости от того, какой текст отображается. Кроме того, необходимо убедиться, что любые строки, на которые ссылается код расширения часов, можно преобразовать с помощью LocalizedString
метода.
Смотреть приложение
По умолчанию приложение наблюдения не настроено для локализации. Необходимо переместить файл раскадровки по умолчанию и создать другие каталоги для переводов:
Создайте каталог Base.lproj и переместите в него каталог Interface.storyboard.
Создайте <каталоги language.lproj> для каждого языка, который вы хотите поддерживать.
Каталоги 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 изображения в раскадровки, а правильный образ будет отображаться на часах в соответствии с языком, выбранным пользователем.
Примечание. Так как все 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);
Изображения в коде
Изображения, заполненные кодом, можно задать двумя способами.
Вы можете изменить
Image
элемент управления, задав его значение строкового имени изображения, уже существующего в приложении "Просмотр", например.displayImage.SetImage("gradient"); // image in Watch App (as shown above)
Вы можете переместить изображение из расширения в часы, а
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 (серый значок шестеренки на начальном экране симулятора).
Смотреть устройство
При тестировании с помощью часов измените язык часов в приложении Apple Watch на парном i Телефон.