NSLocalizedString
имеет преимущество в простоте реализации. Риск в том, что вы можете забыть добавить запись для нового элемента Gui.
Вы можете использовать itool
для выгрузки строки из исходного файла XIB, перевода этих выгруженных строк и затем загрузки переведенной строки в файл other-language-xib.
Есть некоторые преимущества в этом способе по сравнению с NSLocalizedString
.
- Все соображения по переводу и длине строки по-прежнему применимы, но вам нужно прикоснуться только к исходному xib, остальные языки могут быть обновлены скриптом.
- Вы видите уже переведенные элементы и различные возможные состояния для каждого элемента UIE из сохраненного файла.
- У вас будет больше одностроковых файлов для отправки вашему переводчику, но вам будет легче следить за тем, какая часть нуждается в переводе, какая часть выполнена.
- GUI Изменения, внесенные в английский xib, применяются к локализованному xib, вы в основном объединяете оригинальный xib с переведенными строками.
Когда вы создаете XIB, вы устанавливаете его как локализованный (как и раньше), затем запускаете itool
против этого исходного xib, чтобы извлечь строки.
Переведите файл строк на нужный язык, затем загрузите перевод в локализованный xib.
Если вы используете Google для ibtool --generate-strings-file
, вы должны найти несколько учебных пособий и примеров.
Синтаксис должен быть похож на:
#dump original xib to a $xibfile.strings file:
ibtool --generate-strings-file Resources/English.lproj/$xibfile.strings Resources/English.lproj/$xibfile.xib
# offline: translate the $xibfile.xib, place it into the correct lproj folder
# then: merge translated $xibfile.strings with original xib to create localized xib
ibtool --strings-file Resources/de.lproj/$xibfile.strings --write Resources/de.lproj/$xibfile.xib Resources/English.lproj/$xibfile.xib
$xibfile.strings
в каталоге Resources / English.lproj будет содержать исходные (на английском языке) строки. Переведенный $xibfile.strings
должен находиться в соответствующем каталоге xx.lproj
.
Если вы добавите скрипт сборки в xcode, то загрузка трансляции будет вызываться при каждой сборке.