Локализация в xcode?

Использую xcode 5.

Как я понял в нем немного иначе происходит локализация.


Я добавил языки, у меня создались файлы:

Main.strings(Russian)

Main.strings(Italian)

и

apps-info.plist (Russian)

apps-info.plist (Italian)

и

InfoPlist.strings(Russian)

InfoPlist.strings(Italian)


В некоторых мануалах к xcode 4 и позднее, написано что нужно создать файл localizable.strings и локализовать его.

Вопрос: Нужно ли это делать?


Как я понял из литературы, в файлах InfoPlist.strings я пишу: «Back» = «Назад»; (на разных языках)


Потом нужно прописать подобное — NSLocalizedString(@«Back»,nil);

Вопрос: Куда это прописать, и что значит @«Back»? @«Back» — это title?


Основная задача локализации — это перевести кнопки.


В файле Main.strings(Russian) следующий код

* Class = «IBUIBarButtonItem»; title = «Back»; ObjectID = «fqu-r0-dDY»; */

«fqu-r0-dDY.title» = «Back»;


/* Class = «IBUIViewController»; title = «AW13/14»; ObjectID = «fts-kV-qn9»; */

«fts-kV-qn9.title» = «AW13/14»;



Далее в NSLocalizedString(@«Back»,nil); мы добавляем например «AW13/14» (и соответственно перевод в файле InfoPlist.strings)- правильно ли я понял?

Что будет если я просто в файле (для каждого языка) — Main.strings(Russian) — переведу кнопки в ручную — будет ли это правильно?
  • Вопрос задан
  • 6782 просмотра
Пригласить эксперта
Ответы на вопрос 3
@gleb_kudr
Потом задумаете портировать свое приложение на другую платформу и пожалеете, что связались с платформозивисимымим решениями.

У меня это сделано так — словарь локализации (на базе SQLite) + собственный класс, таскающий оттуда значения во время выполнения. Проще некуда. И остается простор для разруливания сложных ситуаций, например, если у вас надпись в одном из языков не влезает туда, где должна влезть. Либо язык имеет иное направление письма.
Ответ написан
Комментировать
@gonzo
Слишком все у вас как-то запутано. Нужно вначале систематизировать что для чего нужно.

1. Локализация информации о программе.

Информация о приложении (название, коипрайт) содержится в файле Info.plist. Переведенные строки хранятся в файле InfoPlist.strings отдельно для каждого языка.

2. Локализация строк из кода.

Для локализации текста из кода (например, сообщений об ошибках) используется конструкция вида NSLocalizedStrings(@«key», @«comment») или CFCopyLocalizedString(«key», «comment»). NSLocalizedString ищет переводы в Localizable.strings, который создается и добавляется вручную. Ключи из кода достаются утилитой genstrings(1). Для добавления перевода достаточно добавить «key» = «перевод»; в Localizable.strings для нужного языка.

3. Локализация XIB/storyboard

В Xcode4 это работало так (для меня по крайней мере): для кажого языка была своя версия файла. Цикл перевода включал в себя доставание строк из xib/storyboard в стандартный .strings файл используя утилиту ibtool, перевод строк, генерацию локализованой версии xib (например ru.lproj/MainMenu.xib) с помощью того же ibtool.

Xcode5 теперь позволяет убрать последний шаг, можно сразу создать ru.lproj/MainMenu.strings, где будут переводы строк из en.lproj/MainMenu.xib. Компоновка базового xib-а и переводов будет происходить во время выполнения.

То есть если текст кнопки устанавливатеся в коде вручную с помощью NSLocalizedString, то «Back» = «Назад»; нужно писать в Localizable.strings. Если же это часть xib'а, то в русскую версию Main.strings добавляется «fqu-r0-dDY.title» = «Назад»;

Поддерживать все это дело вручную даже на небольшом проекте та еще головная боль. Я когда-то использовал iLingual, но она не верх удобства и уже немного устарела. В результате написал свою тулзовину (disclaimer: она коммерческая, но если перевод всего на один язык, то регистрация не требуется)
Ответ написан
Комментировать
Bistriy
@Bistriy
Рекомендую Lin. В InfoPlist.strings руками лучше не лазить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы