2015-11-27 3 views
9

Когда проект Xcode приложения iOS недавно создан, в настройке проекта (а не цели) мы видим, что он по умолчанию включен Use Base internationalization, и есть 2 файла, локализованных для Development Language, который по умолчанию равен English (один для Main.storyboard и один для LaunchScreen.storyboard, оба из которых находятся в каталоге Base.lproj). Смотрите ниже скриншоте:Как установить язык, отличный от английского, как язык разработки и базовую локализацию?

Xcode default project localization setting

(Для простоты я упомяну лишь Main.storyboard теперь.)

А в разделе локализации правой боковой панели Main.storyboard «s, мы можем видеть, что Локализация Base по умолчанию проверяется, и также есть локализация English, которая по умолчанию не установлена. Смотрите ниже скриншоте:

storyboard default localization setting

И в Таргет Info.plist, есть ключ с именем Localization native development region (т.е. CFBundleDevelopmentRegion), и его значение по умолчанию en. Смотрите ниже скриншота:

Localization native development region

Если я правильно понимаю, с этими настройками по умолчанию, разработчик может просто написать английский язык в Base локализации Main.storyboard и оставить English локализацию как незарегистрированные. Если приложение необходимо адаптировать к другому языку, разработчик может добавить локализацию в настройке локализации проекта и выбрать Main.storyboard в появившемся диалоговом окне. Смотрите ниже скриншоте:

add localization

Возьмите 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.

+0

Это означает, что у вас есть база (на английском языке) и китайский язык. Если вы хотите перевести их, вы должны установить тексты на обеих языковых строках. Если язык изменен из настроек, приложение будет устанавливать переведенную строку. Если вы хотите установить язык из своего приложения (локали), вы можете использовать LocalizationSystem. https://github.com/rudensm/LocalizationSystem – Stefan

+0

, пожалуйста, не устанавливайте язык в своем приложении. вы просто просите об ошибках и кошмаре обслуживания. – lensovet

ответ

11

Ваше понимание в основном верное. Одно небольшое уточнение: если пользователь работает на каком-то третьем языке, например, на русском, не обязательно верно, что приложение будет работать на английском языке. Вместо этого приложение будет работать на первом языке, который он поддерживает, который пользователь предпочитает. Начиная с iOS 8 и более поздних версий, пользователи могут иметь список предпочтительных языков, таких как «Русский, Французский, Китайский, Английский». В случае этого гипотетического пользователя приложение действительно будет работать на китайском языке, поскольку оно ранее в списке, чем английский.

Чтобы ответить на ваш вопрос об изменении языка разработки, это сделать нелегко, но это можно сделать. В частности:

  1. Укажите язык, на котором вы хотите быть основным языком. Снимите отметку всех файлов, которые Xcode предлагает для локализации для вас.
  2. В Info.plist (как вы заметили) измените область разработки на язык, на котором вы хотите быть основным языком. Обратите внимание, что свойство немного неназванное, потому что его значение должно быть код языка (с необязательным кодом страны), а не код региона или страны.
  3. Закройте свой проект в Xcode. В другом редакторе кода откройте projectname.xcodeproj/project.pbxproj и найдите developmentRegion. Вы должны увидеть строку, такую ​​как developmentRegion = English;. Измените это, чтобы ссылаться на тот же язык, который вы вложили в свой файл Info.plist.
  4. Повторно открыть проект в Xcode. Пройдите все локализуемые файлы и установите флажки рядом с английским, чтобы создать локализованные ресурсы. Обратите внимание, что для раскадровки и xibs Xcode может создавать раскадровку вместо файла строк. Если это произойдет, просто измените файл filetype на файл строк.

Вот пример результата для меня, используя fr как язык базы:

Project info

File info

+0

У меня не было возможности Отменить все файлы, которые мне предлагают xcode. Итак, я покинул экран обеда, и после того, как я закончил процесс, я просто хочу показать экран обеда и снять флажок с правого меню. –

Смежные вопросы