Внимание! Информация в этой статье устарела. В настоящее время средства для экспорта и импорта текстовых строк встроены непосредственно в XCode. Необходимую информацию по-прежнему можно найти на сайте разработчиков Apple.
Статья была написана несколько лет назад. С тех пор произошли некоторые изменения. Они отмечены в тексте как «обновления».
Введение
Локализация Cocoa-приложений — достаточно простая, при использовании соответствующих инструментов, задача. В простейшем случае хватит Interface Builder, знания иностранного языка и некоторого терпения, чтобы аккуратно вписать перевод в необходимые места интерфейса. Однако, если Вам требуется поддерживать локализацию развивающейся программы, вновь и вновь возвращаясь к переводу, нужны более рациональные методы работы. В этой статье мы очень кратко рассмотрим, как оптимизировать процесс локализации с помощью предоставляемых Apple утилит.
Обновление:
С появлением Interface Builder 3.0 возможность локализовывать программы, не связываясь предварительно с автором, в значительной степени утрачена: «скомпилированные NIB’ы», которые обычно теперь и используются, уже невозможно редактировать.
Что нам потребуется
Начнем со странички, посвященной инструментам локализации, сайта Apple. С нее нужно загрузить:
- Программу AppleGlot, предназначенную для извлечения текстовых строк из ресурсов приложения и последующего формирования локализованных ресурсов на основе переведенных строк.
- AD Viewer — текстовый редактор, специально ориентированный на работу с файлами AppleGlot и поддерживающий UTF-8.
Обновление:
В Mac OS X 10.6 Snow Leopard давно не обновлявшийся AD Viewer более не работает. Нужно использовать другой редактор. Среди бесплатных можно порекомендовать, например,Trunks. - Для многих языков, в том числе и русского, можно также загрузить словари.
Кроме того, нам, конечно же, потребуется комплект средств разработчика Apple XCode Tools (ранее называвшийся Developer Tools). Он входит в «коробочные» версии Mac OS X, а также может быть загружен с сайта разработчиков Apple (потребуется бесплатная регистрация). Для загрузки нужен хороший канал в Интернет, т.к. объем файла превосходит 800 мегабайт. При локализации из всего комплекта в основном используется только Interface Builder.
XCode Tools устанавливаются в специальный каталог /Developer/ в корне диска. Локализационные утилиты (AppleGlot and AD Viewer) можно разместить в любом удобном месте.
AppleGlot
AppleGlot — программа, управляющая процессом локализации. Для каждого проекта ей создается «окружение».
Окружение образуется набором папок, размещенных в головной папке проекта. Каждая папка хранит файлы определенного назначения. Вся необходимая структура создается непосредственно из AppleGlot командой «Создать пустое Окружение»
Заметьте: при использовании AppleGlot, на вашем диске окажется несколько версий локализуемого приложения. Это может быть неудобно, если Вы используете его для реальной работы. При открытии файлов по двойному щелчку и в других подобных ситуациях может быть запущена совсем не та версия, которая необходима (например, предыдущая или только частично локализованная). Избежать таких неудобств можно разместив окружение на специально созданном образе диска. Для этого запустите Disk Utility, выберите в меню «File->New-Blank Disk Image». Затем установите необходимый размер диска (с достаточным запасом), формат «sparse disk image» (такой образ занимает на диске столько места, сколько необходимо для хранения помещенных на него файлов) и щелкните «Create».
Tools -> Create Empty Environment…
Далее необходимо указать оригинальный (базовый) язык (обычно, английский — «English (en)») и язык, на который производится локализация (в нашем случае, русский — «Russian (ru)»).
Tools -> Set Target and Base Locales…
Если Вы предполагаете постоянно работать именно с этой парой языков, рациональнее включить их автоматический выбор для каждого нового проекта в Параметрах (Preferences) AppleGlot. Для этого в разделе «General» поставьте флажок «Automatically set the Base and Target Locales for a new project» (при необходимости эту настройку всегда можно изменить непосредственно в проекте).
Теперь необходимо скопировать (с помощью Finder) оригинальное приложение в папку _NewBase. Если имеются готовые словари (в том числе, можно использовать словари, сформированные при локализации аналогичных приложений — файлы *.ad), их следует скопировать в папку _LanguageGlossaries (при необходимости измените расширение файлов на .lg).
Теперь возвращаемся в AppleGlot и открываем подготовленное окружение:
File -> Open…
В окне проекта мы видим таблицу, в которой сейчас имеется только картинка оригинального приложения в столбце «NewBase». Установим флажок в левом столбце (отмеченном символом Apple).
Выбираем в меню команду
Actions -> Initial Pass
В результате из файлов ресурсов будут извлечены все строки, необходимые для перевода, а в окружении появятся два новых элемента: «рабочий глоссарий» (work glossary Приложение.app.wg) и «словарь приложения» (application dictionary Приложение.app.ad).
Далее наступает наиболее сложный этап работы — собственно перевод.
AD Viewer. Перевод строк
Двойной щелчок в окне AppleGlot на картинке рабочего глоссария Приложение.app.wg откроет AD Viewer (если он установлен). Рабочее окно этого приложения состоит из трех панелей. В основной — верхней — находится XML-документ, в который заносится перевод. Внизу слева — список обрабатываемых файлов, а справа — графическое представление пути к ним.
Рассмотрим рабочий глоссарий:
<TextItem>
<Description> NSButton (Cancel): <title:Cancel> (oid:17) </Description>
<Position>17.1</Position>
<TranslationSet>
<base loc=»en» >Cancel</base>
<tran loc=»ru» origin=»»></tran>
</TranslationSet>
</TextItem>
Вы видите XML-документ, в котором между тегами <base…> и </base> заключены строки исходного языка, а перевод будет вводиться между <tran…> и </tran>.
Важное достоинство AD Viewer — возможность защиты XML-тегов от случайного изменения (флажок «Protect Tags» в панели кнопок). Она запрещает редактирование чего-либо за пределами тегов <tran…>. По умолчанию эта функция включена, отключать ее не стоит.
Если у Вас был установлен языковой словарь (*.lg), часть строк скорее всего уже будет переведена. С этой же целью мог быть использован и ранее подготовленный (например, в результате частично сделанного перевода) словарь приложения Приложение.app.ad, если он был предварительно помещен в папку _ApplicationDictionaries.
Теперь задача переводчика перевести оставшиеся строки. При этом нужно особенно внимательно относится к строкам, содержащим специальные символы, а также последовательности символов, которым предшествует знак «\» (их необходимо сохранять!). В таких случаях бывает удобно скопировать исходную строку, а затем уже в ней менять слова.
В любой момент можно прервать работу по переводу и получить «промежуточный» вариант приложения, выбрав в AppleGlot команду
Actions -> Incremental Pass
(естественно, предварительно нужно сохранить файл глоссария).
По окончании перевода выполняется команда
Actions -> Final Pass
В результате будет сформирован окончательный вариант локализованного приложения и удалены более ненужные вспомогательные файлы.
Локализованная версия программы помещается в папку _NewLoc.
Interface Builder
Заключительный этап локализации — подгонка элементов интерфейса. Это неизбежно: AD Viewer работает только со строками, которые AppleGlot затем помещает на те же места, где располагались оригинальные. Русские же фразы почти всегда длиннее английских. Эта работа выполняется уже со сформированным с помощью AppleGlot «полуфабрикатом» локализованного приложения. Напомню: оно находится в папке _NewLoc.
Все языковые файлы располагаются в пакете приложения внутри папок с именами вида язык.lproj, где язык — английское название языка (например, Russian) или его двухбуквенный код в соответствии с ISO 639 (например, ru).
Языковая папка может содержать файлы различных типов. Наиболее важны при локализации .nib и .strings; реже может потребоваться работа с .plist (с ними, к тому же, требуется особая осторожность). Кроме того, здесь же могут быть файлы документации, лицензионное соглашение и т. п., чаще всего, в форматах .rtf и .html. Для перевода последних используют обычные редакторы (например, TextEdit).
Заметьте: пакет приложения может содержать модули (Plug-In) и другие элементы, каждый из которых тоже может иметь собственные языковые папки.
Вид графического интерфейса определяется файлами .nib. По двойному щелчку на картинке такого файла запустится Interface Builder, и в его главном окне будет показан список объектов. Не все они являются графическими элементами. При двойном щелчке на некоторых просто произойдет переключение окна на вкладку «Classes». (В этом случае просто следует вернуться на вкладку «Instances») При двойном щелчке же на других будет открыто меню, окно или другой элемент. Каждый из них нужно проверить и, при необходимости, скорректировать.
Чаще всего может потребоваться увеличить размер кнопки либо поля для статического текста, подписи у флажка или переключателя. Нередко при этом приходится смещать соседние элементы. В крайнем случае можно попробовать увеличить размер окна, но делать это нужно с большой осторожностью: возможно, что в результате работоспособность интерфейса будет нарушена, либо какие-то элементы станут недоступными.
По окончании подгонки необходимо тщательно протестировать приложение, стараясь проверить вид его интерфейса во всех возможных ситуациях (при всех режимах работы, ошибках и т. п.).
Локализация обновленной программы
Важное достоинство AppleGlot — возможность «инкрементальной» локализации. То есть при выходе очередной версии приложения уже не нужно выполнять полный перевод. Все строки, оставшиеся неизменными, будут «переведены» автоматически. Мало того, будут сохранены и соответствующие коррективы, сделанные в nib-файлах!
Что же необходимо сделать, при локализации обновленной версии приложения?
- Создайте в AppleGlot окружение (если оно по какой-либо причине отсутствует)
- Поместите «старое» приложение-оригинал в папку _OldBase, а соответствующую ему локализованную версию — в _OldLoc
- Поместите новую версию приложения-оригинала в папку _NewBase
- Откройте окружение в AppleGlot
- Выберите в меню команду Actions -> Initial Pass
- По окончании «начального прохода» откройте рабочий глоссарий с помощью AD Viewer и найдите строки, не переведенные автоматически
- Выполните перевод как и при первоначальной локализации.
По окончании работы с AppleGlot нужно будет скорректировать в Interface Builder измененные nib-файлы.
Ресурсы в помощь локализатору
На русском языке
Раздел, посвященный локализации, на Apple.ru- Поговорим по-русски, Macintosh!
На английском языке
Инструменты
- iLocalize — удобный инструмент для локализатора. Заменяет AppleGlot и редактор глоссария.
Стоимость лицензии: бесплатно для работающих с бесплатными/открытыми программами, $39 — для shareware, $399 — для коммерческих программ.Разработка и поддержка программы прекращена. iLingual— простой инструмент локализатора (честно говоря, не могу гарантировать, что программа будет работоспособна во всех случаях, но её я локализовал в ней самой). Для использования в коммерческих проектах автор просит заплатить $30.Language Switcher— маленькая утилита, позволяющая легко запускать программу с выбранным языком интерфейса.
Использованные материалы
- AppleGlot 3.1 User Guide
- Camino L10N. Basic introduction to the use of AppleGlot and other Apple localization tools