|
Май
28
|
Локализация и интернационализация — вспомогательные процедуры, с помощью которых мы получаем возможность, во-первых, отображать варьирующуюся в разных странах информацию (единицы измерения, даты и пр.) в указанной пользователем локали, а во-вторых, выводить текст на выбранном пользователем языке.
Для начала определяемся с тем, какие языки будет поддерживать ваше приложение. Весь текст (на разных языках), изображение, видео, звуки необходимо собрать в файл ресурсов или в языковую директорию. Для перевода текста можно воспользоваться инструментом [Google]. Даже если поддержка разных языков для приложения не планировалась, почему бы ни попробовать!
Смена пользователем языка выполняется командой “Settings -> General -> International -> Language“. При этом меняется и название приложения iPhone (если предусмотрена поддержка этой функции).
Подготовка к интернационализации.
В тестовом проекте мы обеспечим поддержку английского и итальянского языков. Создайте в Xcode новый проект на базе любого шаблона. После этого откройте его через “Finder” и создайте два каталога — “en.lproj” и “it.lproj“. Это будет языковой проект приложения. Все файлы ресурса на английском языке будут храниться в папке “en.lproj“, на итальянском — соответственно, в “it.lproj“. Файлы ресурса с локализуемой строкой еще называют string-файлами. По умолчанию именем для них является “Localizable.strings“. Итак, создаем два новых string-файла в Xcode, выбираем опцию “Resources” и выполняем “File -> New File -> Other (Mac OS X) -> Strings file” Подтвердив кнопкой “Next“, присвойте файлу имя “Localizable.strings” и сохраните в папку “en.lproj“. Еще раз повторив процедуру, создайте файл для папки “it.lproj“. Вот как будут выглядеть файлы в Xcode (Xcode в состоянии распознать локализуемые файлы для двух разных языков):

Локализация string-файла.
String-файлы локализуются в формате “key” = “value”; (ключ и значение в парах кавычек, дополненные точкой с запятой). Над каждой парой значение–ключ можно добавлять комментарии, соблюдая порядок в файле ресурсов. Предлагаю добавить ресурс значение–ключ для английского и итальянского языков в соответствующий файл “Localizable.strings“.
1 2 3 4 | //Файл "Localizable.String" для английской версии. "WelcomeKey" = "Welcome!!!"; //Файл "Localizable.String" для итальянской версии. "WelcomeKey" = "Benvenuto!!!"; |
Проанализируем код, получающий эти значения из файла ресурсов с последующим отображением:
1 2 3 4 5 6 7 8 9 10 11 12 13 | - (void)applicationDidFinishLaunching:(UIApplication *)application { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *languages = [defaults objectForKey:@"AppleLanguages"]; NSString *currentLanguage = [languages objectAtIndex:0]; NSLog(@"Current Locale: %@", [[NSLocale currentLocale] localeIdentifier]); NSLog(@"Current language: %@", currentLanguage); NSLog(@"Welcome Text: %@", NSLocalizedString(@"WelcomeKey", @"")); // Переписываем точку настройки после запуска приложения [window makeKeyAndVisible]; } |
С помощью ключа “AppleLanguages” получаем список языков, а потом первый — являющийся предпочтительным для пользователя. После этого выводим базовую информацию, включая локаль и язык, и отображаем локализуемый string-файл посредством функции “NSLocalizedString“, которая принимает два параметра ключа и комментирует, какой можно оставить пустым. Комментарий важен в тех случаях, когда мы хотим генерировать string-файл автоматически. Нигде в функции не указано, из какой языковой папки мы хотим отображать локализированный файл (так называемая языковая чувствительность). Если папка с предпочтительным языком не обнаружена, выбирается второй по списку вариант и т.д.
Создаем файл ресурса с помощью “genstrings”.
Инструмент “genstrings” позволяет создавать string-файлы автоматически. Обязательно воспользуйтесь функцией “NSLocalizedString“, чтобы отобразить локализованный текст для данного ключа. Если применить этот инструмент к исходным файлам, он выделит все ключи, создаст комментарии и string-файлы, в которых заданным значением ключа будет комментарий. Вам достаточно лишь поменять значения ключей с учетом языка. Чтобы сгенерировать файл “Localizable.strings” в папке “en.lproj“, ориентируйте на представленный ниже инструмент командной строки:
1 | genstrings -o en.lproj *.m |
Прежде чем выполнять команду, убедитесь в наличии целевой папки.
Локализация отображаемого iPhone названия.
При смене пользователем языка iPhone откорректирует отображаемые названия для всех приложений (если, конечно, поддерживает этот язык). Давайте посмотрим, как отобразить название приложения на итальянском, если на английском оно называется “StringsFile“. Создайте новый string-файл и сохраните его в папке “it.lproj” под именем “InfoPlist.strings“. Добавьте новый элемент с ключом “CFBundleDisplayName” без кавычек и установите значение на “Stringhe di file” (не знаю, верный ли это перевод, но идея понятна). Вот как должен выглядеть файл:
1 | CFBundleDisplayName = "Stringhe di file"; |
Теперь выберите в качестве языка итальянский — и имя приложения поменяется. При переходе обратно на английский оно станет прежним — “StringsFile“, создавать для этого языка новый файл “InfoPlist.strings” не нужно.
Заключение.
Поскольку ваше приложение могут загружать пользователи из любой страны мира, важно, чтобы оно выглядело и функционировало с учетом их локали и языка. Надеюсь, этот урок будет полезен при локализации.

(5 голосов, средний: 4.80 из 5)
Сентябрь 4th, 2009 at 05:37
“которая принимает два параметра ключа и комментирует, какой можно оставить пустым”
виправте:
“которая принимает два параметра - ключ и комментарий, который можно оставить пустым”
Сентябрь 4th, 2009 at 06:39
и вобще в локализации(или интернационализации, здесь я буду иметь в виду именно ёё) всё так просто что аж страшно! После прочтения тонны литературы и хелпов остается всего несколько правил -
любой ресурс в Resources в папке “дерева” проэкта (и помойму любой другой ресурс там же) можна локализировать посмотрев у него “Get Info” и нажав внизу кнопочку “Make File Localizable”.
После этого сразу появляется англицкая локализация, т.е. папка “English.lproj” в папке проэкта, и в неё складируются все ресурсы относящиеся к англицкой локализации.
Чтобы сделать локализацию, например, для росийського нужно снова посмотреть “Get Info” нужного ресурса и нажать “Add Localization” и ввести имя новой локализации, например, “ru”. Появится папка “ru.lproj”
Несколько слов конкретно про и16ю строк - надо в ресурсах создать файл Localizable.strings (можна через меню - “New File…” -> Other(в окошке список слева) -> Strings file (в окошке список справа)), Далее сделать его интернационализируемым как описано выше. После этого файл будет будет показываться как папка, хотя каждый файл Localizable.strings из этой “папки” будет находиться в соотв. папке “*.lproj”. Далее надо в каждом файле Localizable.strings прописать пары “ключ” = “строка”. А в коде использовать функцию NSLocalizedString(@”Ключ”, @”необязательный комент”).
и всё!
Сентябрь 4th, 2009 at 08:32
Спасибо за полезные комментарии.
Сентябрь 10th, 2009 at 05:25
ну а текст исправлять то кто будет ??
“которая принимает два параметра ключа и комментирует, какой можно оставить пустым”
виправте:
“которая принимает два параметра - ключ и комментарий, который можно оставить пустым”
Ноябрь 30th, 2009 at 20:15
очень интересная статья
Автор Artem, если у вас есть опыт работы в этой области, я был бы очень признателен если б вы ответили на несколько моих вопросов
относительно процесса локализацыи
Сергей
Декабрь 1st, 2009 at 02:27
Привет. К сожалению я не программист и всего лишь перевел данный и другие уроки на русский язык.