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

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

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

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

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

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

6 ответов

Решение

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

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

    корень
    + - 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 включают файлы Info.Plist.strings в OnlyInAppA, тогда как параметры сборки AppB включают файлы Info.Plist.strings в OnlyInAppB.

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

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

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

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

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

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

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

    create folders

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

    create files

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

    add folders to targets

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

    remove target dependencies for old.strings file

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

    localize new fileslocalize new files

  8. Постройте цели и проверьте, изменив языковые настройки:

    french versionenglish version

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

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

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

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

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

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

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

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

первый файл infoPlist.strings

2) Теперь откройте инспектор файлов

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

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

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

Попробуйте посмотреть iTunesConnect_DeveloperGuide

и увидеть "Добавление новой локализации"

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

Другие вопросы по тегам