Подтвердить что ты не робот

Локализованный проект с несколькими объектами с локализованными именами приложений

Недавно я объединил 5 моих автономных проектов в один проект, чтобы иметь общую базу кода. Итак, теперь у меня есть один проект с 5 целями.

Каждая цель имеет тот же набор файлов, за исключением некоторых файлов, которые отличаются для каждой цели (например, Default.png и файлы значков среди других). Мое приложение переведено на 7 языков с английским по умолчанию. Другие языки: шведский, голландский, немецкий, французский, польский и испанский.
Теперь я также хотел бы перевести имя приложения в зависимости от используемого языка. Например, для моего шведского авиационного приложения приложение должно быть названо "Flyget ARN" на шведском языке, но для английского языка его следует называть "Aviation ARN". Все это не проблема, так как это делается в InfoPlist.string, однако объединение этого с локализацией приложения является проблемой.

Недавно я написал этот вопрос: Несколько локализаций, пока еще показывающих только на английском языке и выяснили, что я не могу объединить несколько файлов .strings. (см. ответ, который я написал).

Итак, мой вопрос следующий:
Как я могу получить локализованное приложение из проекта, содержащего несколько целей, а также локализовать имя моего приложения без нарушения DRY (дублированный код).

Обновление
Это все еще проблема, ответы не решают мою проблему.

4b9b3361

Ответ 1

Я взломал эту гайку в проекте XCode, который, как мне кажется, решает ту же проблему, что и вы, так что, надеюсь, это поможет вам. Решение содержит две цели, построенные из одной и той же кодовой базы (с другим именем приложения) и полностью локализованные, включая имена приложений. (Он создает мое бесплатное приложение под названием Growth (на французском языке: Croissance, на испанском языке: Crecer) и платную версию под названием Growth+ (на французском языке: Croissance+, на испанском языке: Crecer+).

Я также наткнулся на файлы InfoPlist.string (которые содержат только имя приложения). Я справился с этой проблемой, используя подпапки в своем решении и изменив цели для включения локализованного набора InfoPlist.strings из соответствующей подпапки. В частности, у меня есть эта структура:

    Root
    +-- en.lproj
    ¦   +-- Localizable.strings
    ¦   +-- SomeXib.xib
    +-- es.lproj
    ¦   +-- Localizable.strings
    ¦   +-- SomeXib.xib
    +-- fr.lproj
    ¦   +-- Localizable.strings
    ¦   +-- SomeXib.xib
    +-- OnlyInAppA
    ¦   +-- en.lproj
    ¦   ¦   +-- InfoPlist.strings
    ¦   +-- es.lproj
    ¦   ¦   +-- InfoPlist.strings
    ¦   +-- fr.lproj
    ¦       +-- InfoPlist.strings
    +-- OnlyInAppB
    ¦   +-- en.lproj
    ¦   ¦   +-- InfoPlist.strings
    ¦   +-- es.lproj
    ¦   ¦   +-- InfoPlist.strings
    ¦   +-- fr.lproj
    ¦       +-- InfoPlist.strings
    +-- AppA.plist
    +-- AppB.plist

И единственное различие между моими целями (кроме разных символов препроцессора и другого файла .plist) заключается в том, что параметры сборки AppA включают файлы InfoPlist.strings в OnlyInAppA, тогда как параметры сборки AppB включают файлы InfoPlist.strings в OnlyInAppB.

Соглашение об именах, которое я использовал (папки OnlyInAppA/OnlyInAppB, файлы списков приложений AppB/AppB) достаточно очевидно, чтобы сделать этот подход, по моему личному мнению, удовлетворительным.

Редактировать:

Пожалуйста, посмотрите эти два скриншота XCode 4, чтобы увидеть, где именно найти настройки, которые изменены в целях.

  1. В настройках целевой сборки указан другой файл plist (примечание: XCode автоматически сделает это за вас при добавлении новой цели) Build settings screenshot

  2. На этапах построения цели в разделе "Копирование ресурсов комплекта" выберите версию InfoPlist.strings из соответствующей подпапки OnlyInAppX (обратите внимание на серый текст рядом с InfoPlist.strings на этом снимке экрана - здесь будет показано другое расположение для другой цели), Вы можете достичь этого с помощью кнопок + / - и заменить файл на нужный. Build phases screenshot

Ответ 2

Если эта проблема по-прежнему сохраняется: я нашел решение о том, как добавить несколько InfoPlist.string, локализованных для каждой цели в вашем проекте. Выполните следующие действия:

  • Я предполагаю, что у вас уже есть несколько целей.
  • Перейдите в папку проекта в Finder.
  • Создайте папку для каждой цели:

    create folders

  • Создайте файл InfoPlist.strings в каждой папке:

    create files

  • Добавьте папки в целевые объекты , указав правильную (и только!) цель для каждой папки в вашем проекте:

    add folders to targets

  • Удалите целевую зависимость для исходного файла InfoPlist.strings для каждой новой цели.

    remove target dependencies for old .strings file

  • Локализовать новые файлы InfoPlist.strings:

    localize new fileslocalize new files

  • Задайте цели и проверьте, изменив языковые настройки:

    french versionenglish version

Ответ 3

Просто сохраните все файлы InfoPlist.strings под разными путями. Каждый из них будет только частью одной цели.

Или я не понял вопроса?

Ответ 4

У меня есть аналогичная установка, где мое одно и то же программное обеспечение поддерживает несколько доменов, каждый домен обращается к тем же самым путям для различных модулей (например, блог, форумы). Чтобы сохранить индивидуальность на домен, особенно когда служба базы данных становится недоступной, я сохраняю важную информацию в файлах, в основном метаинформацию. Для локализации я бы сохранил переменную, сохраняя каждый язык по умолчанию для сайта/проекта. Вы можете определить файлы, содержащие информацию, чтобы иметь свой собственный домен или хранить все проекты в одном файле, в любом случае, вы бы хотели использовать это для вашего окончательного резервного копирования или если вам просто не хватает дополнительных общедоступных опций для всех/всех с более низкими разрешениями чем вы, пока не будете реализовывать такие параметры (пользователи могут переопределить языковой параметр).

Ответ 5

Я делал именно это для своих приложений.

когда я меняю язык по умолчанию для телефона, он правильно подбирает имена в каждом из моих файлов infoplist.strings.

но я сделал это с нуля. я не знаю, нужно ли вам делать резервную копию, чтобы получить нужное поведение. возможно, за исключением ваших различных файлов infoPlist.strings из любых папок локализации, затем выполните следующие шаги, а затем повторно вставьте содержимое из ваших текущих файлов infoPList.strings в ваши вновь созданные файлы со следующих шагов.

Я использую Xcode 4.3. шаги:

1) настройте строки, которые вы хотите использовать для своего языка по умолчанию, в info-plist.strings. вы должны получить один файл:

first infoPlist.strings file

2), откройте "Инспектор файлов"

enter image description here

3) в инспекторе справа, теперь вы можете щелкнуть знак "+" внизу навигатора:

enter image description here

4) после того, как вы выбрали интересующий вас язык, они будут отображаться в навигаторе проекта слева следующим образом:

enter image description here

вы также можете сделать это для Localizable.strings и других файлов (например, index.html на следующем примере):

enter image description here

Ответ 6

Попробуйте iTunesConnect_DeveloperGuide

и см. "Добавление новой локализации"

Здесь вы можете написать локализованное имя приложения для каждого языка