Локализованный проект с несколькими целями с локализованными именами приложений
Недавно я объединил 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, чтобы увидеть, где именно найти настройки, которые изменены в целях.
В настройках сборки цели указан другой файл plist (примечание: XCode автоматически сделает это за вас при добавлении новой цели)
На этапах построения цели в разделе "Копирование ресурсов комплекта" выберите версию InfoPlist.strings из соответствующей подпапки OnlyInAppX (обратите внимание на серый текст рядом с InfoPlist.strings на этом снимке экрана - там будет показано другое расположение для другой цели), Вы можете достичь этого с помощью кнопок +/- и заменить файл на нужный.
Если эта проблема все еще сохраняется: я нашел решение о том, как добавить несколько строк InfoPlist.string, локализованных для каждой цели в вашем проекте. Пожалуйста, следуйте этим шагам:
- Я предполагаю, что у вас уже есть несколько целей.
- Перейдите в папку проекта в Finder.
Создайте папку, специфичную для каждой цели:
Создайте файл InfoPlist.strings в каждой папке:
Добавьте папки к целям, указав правильную (и только!) Цель для каждой папки в вашем проекте:
Удалите целевую зависимость для исходного файла InfoPlist.strings для каждой новой цели.
Локализуйте новые файлы InfoPlist.strings:
Постройте цели и проверьте, изменив языковые настройки:
Просто держите все файлы InfoPlist.strings под разными путями. Каждый будет только членом одной цели.
Или я не понял вопроса?
У меня есть похожая настройка, в которой одно и то же программное обеспечение поддерживает несколько доменов, каждый домен обращается к одним и тем же путям для различных модулей (например, блогов, форумов). Чтобы сохранить индивидуальность для каждого домена, особенно когда служба базы данных становится недоступной, я сохраняю важную информацию в файлах, в основном метаинформацию. Для локализации я бы оставил переменную, сохраняющую язык по умолчанию для каждого сайта / проекта. Вы можете определить файлы, содержащие информацию, чтобы иметь свой собственный домен, или сохранить все проекты в одном файле, любым способом, которым вы захотите использовать это для вашего окончательного отката, или если у вас просто нет дополнительных общедоступных опций для любого / каждого с более низкими разрешениями. чем вы, пока вы не реализуете такие опции (пользователи могут переопределять языковые опции).
Я делал именно это для своих приложений.
когда я меняю язык телефона по умолчанию, он правильно подбирает имена в каждом из моих файлов infoPlist.strings.
но я сделал это с нуля. я не знаю, придется ли вам делать резервную копию, чтобы получить поведение, которое вы хотите. возможно, сохраните в стороне ваши различные файлы infoPlist.strings из любых папок локализации, затем выполните следующие шаги, а затем повторно вставьте содержимое из ваших текущих файлов infoPList.strings в ваши вновь созданные файлы из следующих шагов.
Я использую Xcode 4.3 . шаги:
1) Установите нужные строки для языка по умолчанию в info-plist.strings. вы должны получить один файл:
2) Теперь откройте инспектор файлов
3) в правом нижнем углу инспектора теперь можно щелкнуть значок + в нижней части навигатора:
4) Как только вы выбрали интересующий вас язык (языки), они будут отображаться в навигаторе проекта слева следующим образом:
Вы также можете сделать это для Localizable.strings и других файлов (таких как index.html в следующем примере фотографии):
Попробуйте посмотреть iTunesConnect_DeveloperGuide
и увидеть "Добавление новой локализации"
Здесь вы можете написать локализованное имя приложения для каждого языка