Когда проект Xcode приложения iOS недавно создан, в настройке проекта (а не цели) мы видим, что он по умолчанию включен Use Base internationalization
, и есть 2 файла, локализованных для Development Language
, который по умолчанию равен English
(один для Main.storyboard
и один для LaunchScreen.storyboard
, оба из которых находятся в каталоге Base.lproj
). Смотрите ниже скриншоте:Как установить язык, отличный от английского, как язык разработки и базовую локализацию?
(Для простоты я упомяну лишь Main.storyboard
теперь.)
А в разделе локализации правой боковой панели Main.storyboard
«s, мы можем видеть, что Локализация 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
.
Это означает, что у вас есть база (на английском языке) и китайский язык. Если вы хотите перевести их, вы должны установить тексты на обеих языковых строках. Если язык изменен из настроек, приложение будет устанавливать переведенную строку. Если вы хотите установить язык из своего приложения (локали), вы можете использовать LocalizationSystem. https://github.com/rudensm/LocalizationSystem – Stefan
, пожалуйста, не устанавливайте язык в своем приложении. вы просто просите об ошибках и кошмаре обслуживания. – lensovet