Эта версия сайта больше не обновляется.
Перейти на новый сайт

Buffer icon Проекты

Unity iOS localization

Unity iOS localization scripts

Unity iOS localization scripts

Unity iOS localization scripts

Исходники на Github

Мобильные Unity разработчики меня сейчас должны понять: когда делаешь билд под iOS, то локализацию «из коробки» настроить не получится. Конечно, есть разные ассеты и даже! официальный пакет для локализации. С которым уже можно работать, кстати. Но как обычно, самое интересное в деталях...

Если ваша игра поддерживает несколько языков, к примеру: русский, английский, немецкий, испанский, то для каждого языка неплохо бы сделать локализуемое название игры. Кроме того, если игра/приложение использует камеру или галерею, то нужно показывать диалог запроса прав доступа, тоже локализованный, иначе апрув скорее всего не пройти. Для этого, обычно используется файл InfoPlist.strings и содержимое его выглядит как-то так:
 

"CFBundleDisplayName" = "Локализованное название";
"NSCameraUsageDescription" = "Тут описание зачем приложению доступ к камере";
"NSPhotoLibraryUsageDescription" = "Тут описание зачем доступ к галерее";
"NSPhotoLibraryAddUsageDescription" = "Тут описание зачем доступ к галерее";
"NSUserTrackingUsageDescription" = "Тут описание зачем доступ к IDFA";
 

В общем-то всё это уже можно сделать официальным пакетом локализации, кроме NSUserTrackingUsageDescription по-моему. Но так как я всё равно использую пост-билд скрипт для добавления файлов, фреймворков и установки различных параметров через ProjectCapabilityManager, то использовать ещё один пакет не хотелось бы. Тем более, пакет для локализации сам использует приватные методы пространства имен UnityEditor.iOS.Xcode. Вот тут-то и нашлось решение. С помощью рефлексии вытянуть нужные методы и сделать расширение для PBXProject.

В итоге, получился всего один файл с расширением, который позволяет:

  • очистить неиспользуемые локали
  • добавить используемые языки в приложении, из списка
  • добавить <код_языка>.lproj папки в проект с файлами InfoPlist.strings

В старых проектах я использовал UnityiOSLocalization, он работал, но его «проблема» в большом количестве файлов, которые когда-то были доступны на Bitbucket’е, потом это всё стало приватным — т. е. это то что сейчас получилось вытянуть через рефлексию.

Скорее всего когда допилят официальный пакет, всё это станет не актуальным, ну а пока можно пользоваться.

Поделиться
Отправить
Запинить
Отправить
 4145   2021   ios   unity   разработка   с#
Популярное