понедельник, 19 ноября 2012 г.

Локализация MAC приложений

Процесс локализации состоит из двух вещей - визуальные компоненты и строки.
По визуальной части нет смысла рассказывать в просторах интернета столько материалов. Одна тонкость присутствует, чем меньше строк в визуальной части тем лучше. Одно изменение в ресурсных файлах несет столько изменений, что процесс merge исходников превращаться в настоящий геморрой.
Что касается строк, то тут есть некоторые интересные моменты.

Начнем с того NSLocalizedString заработает, если добавить файл Localizable.strings в проект.
Дальше в коде NSLocalizedString(@"File", @""); вызываем и автоматом получаем строку из бандла нужного нам перевода от текущей локали. Никто не мешает создать свой файл строк и брать из него нужную строку с указанием таблицы.

Проверка программы под другой локалью. Первый способ, поменять локаль в настройках системы (т.к. настройки применяются сразу, любой запущенный софт после этого заговорит не на языке Пушкина). Второй способ в добавить в коде пару строк.

#import <Cocoa/Cocoa.h>

int main(int argc, char *argv[])
{
 [[NSUserDefaults standardUserDefaults] setObject :
 [NSArray arrayWithObject:@"de"] forKey : @"AppleLanguages"]; 

return NSApplicationMain(argc, (const char **)argv);
}

Проверка программы под другой локалью. Первый способ, поменять локаль в настройках системы.
По умолчанию кодировка файлов со строками UTF-8. Рекомендации от Apple звучат так, если вы используете просто строки то нужно их хранить в UTF-16, а UTF-8 оставить для всех остальных случае.

Перевод UI меню или базовые строки можно взять из стандартных программ Apple (распотрошить ресурсы известных программ). В целом лучше иметь человека который был бы носителем языка. В любом языке есть формальный и неформальный варианты переводов вашего текста. Переводить текст так что бы у пользователя не было ощущения что он на приеме у врача или свалиться в явный сленг. Найти золотую середину. Пользователи терпеть не могут, корявый и некачественный перевод. Поэтому переводами должен заниматься профессионал знающий менталитет и тонкости языка на текущий момент.

Update 19.02.2013
Весьма любопытный факт выяснился в процессе локализации. Если у вас используется какой то дополнительный код или фреймворк с локализациями (например мы используем всем известны PFMoveApplication, в нем есть поддержка не одного десятка языков). При переключении на шведский язык для примера, который есть во внешних ресурсах, а в основном приложении его нету (у нас в прогремма есть английский и немецкие языки), использование макроса NSLocalizedStringFromTable(key, tablename, comment) будет не корректно. в таком случае выполнено.  В надписях будет использован перевод не английском языке, а поле key. Обязательно стоит посмотреть как программа ведет в разных локалях.

Комментариев нет: