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


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

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

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

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

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

6 22

6 ответов:

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

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


    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 file) заключается в том, что настройки сборки AppA включают Инфо.Файл plist.строковые файлы находятся под OnlyInAppA, в то время как настройки сборки AppB включают информацию.Файл plist.строки файлов под OnlyInAppB.

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

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

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

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

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

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

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

    создавать папки

  3. Создать InfoPlist.файл строк в каждой папке:

    создавать файлы

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

    добавление папок в целевые объекты

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

    удалите целевые зависимости для старых .файл строк

  6. Локализовать новый InfoPlist.файлы строк:

    локализация новых файловлокализация новых файлов

  7. Построение целевых объектов и проверка путем изменения языковых настроек:

    французская версияанглийская версия

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

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

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

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

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

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

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

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

первый infoPlist.файл строк

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

Введите описание изображения здесь

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

Введите описание изображения здесь

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

Введите описание изображения здесь

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

Введите описание изображения здесь

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

И смотрите раздел "добавление новой локализации"

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