Когда проект Xcode приложения iOS недавно создан, в настройке проекта (не целевой) мы видим, что по умолчанию он имеет Use Base internationalization
, и есть 2 файла, локализованных для Development Language
, который равен English
по умолчанию (один для Main.storyboard
и один для LaunchScreen.storyboard
, оба из которых находятся в каталоге Base.lproj
). Смотрите скриншот ниже:
(Для простоты я остановлюсь только на Main.storyboard
).
И в разделе локализации правой панели Main.storyboard
мы видим, что локализация Base
проверяется по умолчанию, а также есть локализация English
, которая по умолчанию не отмечена. Смотрите скриншот ниже:
И в целевой Info.plist
есть ключ с именем Localization native development region
(т.е. CFBundleDevelopmentRegion
), а его значение по умолчанию - en
. Смотрите снимок экрана:
Если я правильно понимаю, с этими настройками по умолчанию разработчик может просто написать английский в локализации Base
Main.storyboard
и оставить локализацию English
как непроверенную. Если приложение необходимо адаптировать к некоторому другому языку, разработчик может добавить локализацию в настройке локализации проекта и выбрать Main.storyboard
в появившемся диалоговом окне. Смотрите скриншот ниже:
Возьмите Chinese (Simplified)
в качестве примера, это приведет к созданию вновь созданного каталога zh-Hans.lproj
с файлом Main.strings
внутри него. (Для простоты я буду ссылаться на него как Chinese
вместо Chinese (Simplified)
.) Разработчику просто нужно перевести английские строки внутри этого файла на китайский (недавно созданный Main.strings
в каталоге zh-Hans.lproj
по умолчанию имеет все английские тексты дублируются из Main.storyboard
в Base.lproj
). С этими настройками поле Language
в описании этого приложения в AppStore будет содержать список на английском языке (из локализации Base
, потому что английский - это Development Language
) и китайский (из локализации Chinese
). В отношении конечного пользователя, если системный язык является английским/китайским (или английский/китайский является одним из предпочтительных языков), приложение будет использовать соответствующий языковой ресурс (для английского языка используйте локализацию Base
, для китайского языка используйте Chinese
). Для всех других языковых предпочтений английский будет действовать как запасной язык, потому что CFBundleDevelopmentRegion
- en
, поэтому Base
используется локализация.
Итак, мой первый вопрос будет, правильно ли это понимание? Подводя итог, если Development Language
является английским, нам не нужно включать локализацию English
для файлов раскадровки. Просто используйте локализацию Base
и напрямую напишите английский в файлах раскадровки. Нам нужно только добавить локализацию для других языков, кроме английского. (На самом деле это кажется проблематичным, если мы разрешаем локализацию English
. Если локализация English
включена, нам необходимо поддерживать оба текста в Base.lproj/Main.storyboard
и en.lproj/Main.strings
.)
Если вышеуказанное понимание верное, мой второй вопрос будет, как добиться интернационализации в обратном направлении? То есть, если я хотел бы использовать Chinese
в качестве Development Language
и написать китайский язык в локализации Base
и добавить только локализацию для языков, отличных от Chinese
, возможно ли это и как это сделать в Xcode? Я не могу найти способ изменить Development Language
в настройке проекта, чтобы утверждать, что локализация Base
в проекте Chinese
, а не English
.