2013-05-13 1 views
2

У меня есть несколько целей для моего приложения. Я пытаюсь локализовать их по-разному. Я обнаружил, что это довольно легко при работе с файлом Localizable.strings и макросом NSLocalizedString. Чтобы заставить это работать, я просто настраиваю целевое членство файла Localizable.strings для цели, с которой я работаю. Так что моя файловая структура проекта выглядит примерно так:Локализация приложения iOS для нескольких целей

  • проекта
    • Target1
      • en.lproj
        • Localizable.strings
      • it.lproj
        • Localizable. строки
    • target2
      • en.lproj
        • Localizable.strings
      • it.lproj
        • Localizable.strings

Теперь мой проект имеет 2 цели строится с совершенно разными английскими переводами. Совершенно, это то, что я хочу.

Мое затруднение входит в игру, когда я пытаюсь сделать то же самое для файлов * .strings, которые генерируются при локализации представления. Моя цель развертывания - 6.0, и я использую раскадровки с базовой интернационализацией. Поэтому, когда я добавить представление в моей структуре проекта будет выглядеть следующим образом:

  • проекта
    • Target1
      • Base.lproj
        • SomeStoryboard.storyboard
      • en.lproj
        • Localizable.strings
        • SomeStoryboard.strings
      • it.lproj
        • Localizable.strings
        • SomeStoryboard.струнные
    • TARGET2
      • en.lproj
        • Localizable.strings
        • SomeStoryboard.strings
      • it.lproj
        • Localizable.strings
        • SomeStoryboard.strings

Моя цель состояла в том, чтобы каждая цели иметь различную локализацию для каждой цели, но сохранить ту же базовую раскадровку. Я также хотел избежать чего-то вроде: назвав строку string2 storyboard string-like что-то вроде REPLACEMENT_SomeStoryboard.string, а затем написал сценарий, который для каждого файла с именем такой в ​​заданном целевом удалите SomeStoryboard.string и переименует REPLACEMENT_SomeStoryboard.string в SomeStoryboard.string.

Попытка # 1

Так что я пытался сделать, это удалить target1 en.lproj/SomeStoryboard.strings & it.lproj/SomeStoryboard.strings из членов target2. Но это также удалило базу Base.lproj/SomeStoryboard.storyboard из членства target2. Таким образом, в основном членство управлялось, как если бы это был один файл, что имеет смысл.

Попытка # 2

Вторая вещь, которую я попытался было добавить Target1 SomeStoryboard.storyboard в члены TARGET2, а также создать файл SomeStoryboard.strings и добавить, что членство TARGET2. Я попытался добавить этот дополнительный файл строк в фазу ресурсов копирования Bundle. Я также попытался добавить фазу «Копировать файлы» (после этапа «Ресурсы копирования»). В любом случае, похоже, только изредка заменяли SomeStoryboard.strings из target1. Таким образом, конечный результат заключался в том, что иногда target2 выбирал локализацию из target1 и иногда локализовался из target2.

+0

Вы когда-нибудь находили подходящий ответ для этого? Я в том же месте. – edelaney05

ответ

1

Попробуйте использовать метод, описанный в http://smoothlocalize.com/ (щелкните по первому учебнику в первом основном окне). Вы загружаете небольшую библиотеку, которая позволяет использовать Localizable.string для ваших строк ресурсов так же, как и для файлов .m.

+0

Интересно. Предложение №1 от smoothlocalize состояло в том, чтобы не локализовать файлы раскадровки/XIB из-за дополнительных шагов. Однако, из-за разделения проблем, я предпочел бы установить все строки в представлениях по причинам удобства обслуживания. Предложение № 2 должно было использовать эту библиотеку (https://github.com/angelolloqui/AGi18n), чтобы локализовать sotryboards/XIB больше похоже на локализацию файлов .m. Только проблема с этим решением - [производительность] (https://github.com/angelolloqui/AGi18n#caveats). Я не могу оправдать использование этого решения над заменяющим скриптом, о котором я упоминаю в своем вопросе. –

+0

+1 хотя. Кажется, что это сработает, хотя я не считаю его лучшим решением, чем использование сценария для переименования файлов во время выполнения. –