Локализация XIB в XCode4 сводит меня с ума?

после многих безуспешных попыток разобраться с локализацией XIB в XCode 4, я решил разместить здесь запрос о помощи :).

1) Я выбираю файл XIB, скажем, MyViewController.XIB.

2) Я нажимаю кнопку [+] в области локализации на правой панели, но выбрать язык невозможно. После нажатия не знаю почему но выбирается другой ресурс (например другой файл XIB).

3) В интерфейсе XCode ничего не происходит, но в файловой системе файл MyVieController.XIB перемещается (ПЕРЕМЕЩЕНО! НЕ КОПИРУЕТСЯ) в папку en.lproj.

4) Добавляю новую локализацию (в этот раз могу выбрать язык), скажем итальянский.

5) В интерфейсе XCode теперь я вижу двух «детей» MyViewController.XIB: английскую и итальянскую.

6) Еще одна странность заключается в том, что «основной» MyViewController.XIB и его английская версия указывают на один и тот же файл (в папке en.lproj), так что любые изменения, сделанные в первом, автоматически вносятся во второй и наоборот.

У кого-нибудь из вас есть объяснение этому поведению, которое кажется мне очень странным?

Заранее спасибо за ваши ответы,

Марко.


person MarcoSciamanna    schedule 19.10.2011    source источник
comment
Что-то не так с поведением, или вы просто хотите, чтобы XCode вел себя по-другому? Потому что, если последнее, то единственный ответ, который я могу придумать, это потому, что Apple решила реализовать это таким образом. (Т.е. без нейтральной локали и необходимости выбирать локаль по умолчанию.)   -  person millimoose    schedule 19.10.2011
comment
@Инердия. Прежде всего, спасибо за ваш быстрый ответ.   -  person MarcoSciamanna    schedule 19.10.2011
comment
@Инердия. Я не знаю точно, какое поведение является правильным, потому что документация Apple не так ясна, и потому что учебники, которые я читал в Интернете, не кажутся очень ясными по этому поводу. Но мне очень странно, что если я хочу какие-то локализации, то всегда должна быть английская локализация, а я не могу, например, построить только французскую и итальянскую локализации.   -  person MarcoSciamanna    schedule 19.10.2011
comment
Итак, ваш вопрос: «Как сделать приложение для iPhone без английской локализации?» – отвечали несколько раз.   -  person millimoose    schedule 19.10.2011
comment


Ответы (2)


Я считаю, что такое поведение является преднамеренным и соответствует лучшим практикам в отношении локализации.

Вообще говоря, верхний уровень каталога Resources предназначен только для нелокализованных XIB/NIB. Как только вы локализуете конкретный XIB, он должен храниться в папке вашего основного языка, а любые локализации должны храниться в папках других языков.

По сути, Xcode помогает вам не создавать проблемы, перемещая ваш «основной» MyViewController.XIB в папку en.lproj (которая должна быть тем, что вы установили в качестве собственного региона разработки) в качестве первого шага к добавлению нового языка для этот файл.

OS X (и iOS) достаточно умны, чтобы использовать язык по умолчанию (как указано в CFBundleDevelopmentRegion a/k/a/ Localization native development region), когда ресурс не существует в Resources или на текущем активном языке.

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

После того, как вы установили это, Xcode должен (но не кажется) поместить преобразованные файлы в запрошенный вами каталог по умолчанию. Небольшое копание показывает, что, отредактировав файл project.pbxproj вручную, вы можете установить developmentRegion на что-то другое, кроме английского (я тестировал с fr), и это заставит Xcode поместить локализованные файлы в нужное место.

person gaige    schedule 19.10.2011
comment
Спасибо за полный ответ! - person MarcoSciamanna; 22.10.2011

Я новичок в размещении ответов здесь, поэтому, пожалуйста, не увольняйте меня, если это не лучшее место для этого решения.

Хотя это и не прямой ответ на ваш вопрос "У кого-нибудь из вас есть объяснение...", я чувствую себя обязанным ответить на вашу тему "Локализация XIB в XCode4 сводит меня с ума?" потому что я искал ответ на этот самый вопрос, и я нашел этот ответ в другом месте.

Моя проблема = после локализации моих файлов XIB на английском и французском языках, как указано в ваших пунктах 1)-5) мое приложение для iPhone по-прежнему будет отображать только английские XIB вместо французского. Французские XIB были созданы и правильно выполнены в Xcode, и оказалось, что проблема была вызвана чем-то другим, чем-то не связанным.

Следующее решение заимствовано из The Big Nerd Ranch Guide. Я не ожидаю здесь голосов, вся заслуга принадлежит отличной книге БНР.

Кажется, в Xcode есть сбой (согласно BNR, и это подтвердилось в моем случае), что иногда Xcode игнорирует новые изменения файла ресурсов. Чтобы решить эту проблему, удалите приложение со своего iPhone, затем выберите «Очистить» в меню «Продукт». Это гарантирует, что приложение будет перестроено с нуля. В моем случае после этого французские XIB прекрасно загрузились, как и ожидалось.

person Wojtek    schedule 20.11.2012