суббота, 9 апреля 2011 г.

Немного о локализации Mac приложений

(Xcode 3)
Процесс локализации приложений в Mac OS легок и прост, когда знаешь, что делать. Исполняемый файл программы отделен от локализованных ресурсов (текстов, изображений, звуков), сгруппированных по отдельным папкам. Локализованные ресурсы хранятся в отдельной .lproj директории для каждого поддерживаемого языка. Папки .lproj названы согласно спецификациям ISO. Содержимое всех таких папок должно быть одинаковым.

В региональных настройках Mac OS вы указываете свой основной язык и список дополнительных языков. В случае, если приложение не поддерживает ваш основной язык, то будет использоваться язык из указанного списка. Если ни для одного из указанных языков не было найдено файлов перевода, то приложение будет использовать язык, указанный по умолчанию при разработке программы. Это значение указывается в переменной “Localization native development region” (эквивалент в xml-варианте - CFBundleDevelopmentRegion) в файле Info.plist.

Пример структуры локализованного приложения (Mac, iPhone, iPad..)


Calculator.app/                      сборка (bundle)
    Contents/
        MacOS/
            Calculator               исполняемый файл
        Info.plist
        Resources/                   папка с ресурсами
            Calculator.icns
            tapeButton.tif           не локализованные ресурсы
            English.lproj/           папка с ресурсами, локализованными для англоязычной аудитории
                Localizable.strings  динамически отображаемые строки
                Calculator.nib       интерфейс приложения
                CalculatorHelp/      файлы документации и помощи
            ru.lproj/                папка с ресурсами, локализованными для русскоязычной аудитории
                Localizable.strings
                Calculator.nib       
                CalculatorHelp/ ...
XCode берет на себя работу по созданию lproj директорий. При нажатии правой кнопкой на Info.strings выбираем Get Info, далее нажимаем Add Localization и пишем, например, для русского язык - ru (всё по ISO).
Важный момент. Локализацию English удалять не стоит, иначе другие локализации перестанут добавляться. English и en одно и то же. Получаем:

Теперь у нас в раскрывающемся списке InfoPlist.strings будет English и ru. 
Значения всех ключей (CFBundleName, CFBundleDisplayName и т.д.). Добавим в ru пару ключей:

* If you localize this key(CFBundleDisplayName), you should also include a localized version of the CFBundleName key.
Затем для нашего примера добавим в ..info.plist, если отсутствуют, следующие ключи (нажав Add Row) со значением ${PRODUCT_NAME}:

Чтобы увидеть результат проделанной работы необходимо изменить язык системы и перезапустить Finder, сделать это можно с помощью выхода из системы (Log Out).
В Finder'е:
И там сверху:

Если умеете читать по-английски(при этом понимая, что вы читаете), вам сюда.

1 комментарий:

  1. Добрый день!
    Интересная статья.
    Хотелось бы уточнить напоследок:
    Свойство "Localization native development... " установлено в дефолтное значение en.
    Это значит, что для всех файлов, для которых не найдена локализация, будут использованы файлы из этой папки? (en в моем примере).
    таким образом, приложение может быть переведено частично (не все языки будут поддерживаться в некоторых частях приложения) ?

    ОтветитьУдалить