С помощью Xcode можно локализировать:
- статический текст в коде программы
- ресурсы (иконки, рисунки, звуковые файлы, nib-файлы)
- вывод даты/времени
В этой заметке я расскажу о локализации статического текста в коде программы.
Локализация текста в коде программы необходима если, например, в коде программы задается текст который потом показывается пользователю (это может быть название кнопок, текст отчета и т.п.). Перед локализацией необходимо интернационализировать код программы. Для этого любой текст который показывается пользователю необходимо обвернуть макросом NSLocalizedString. Если раньше вы показывали диалог таким способом:
- UIAlertView *tmp = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Your e-mail application not configured" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
- [tmp show];
- [tmp release];
то теперь показываем так:
- UIAlertView *tmp = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Warning", @"") message:NSLocalizedString(@"Your e-mail application not configured", @"") delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", @"") otherButtonTitles:nil];
- [tmp show];
- [tmp release];
Макрос NSLocalizedString вызывает метод localizedStringForKey:value:table: обьекта NSBundle приложения, которая возвращает локализированную строку.
Теперь нужно создать файл Localizable.strings, который будет шаблоном для файлов локализации. Для этого в терминале переходим в папку Classes приложения и выполняем команду:
- $ genstrings ./*.m
В результате в той же папке будет находиться файл Localizable.strings который и добавляем в проект (кодировку файла указываем UTF-16).
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI4WTdA-dxXijprPCvm6vKIixu_iS8VH86viNGEJqYtKeh-t3jtGJPPNLoAu1z7OJUc-q530ZzP1YAzLcv8Lrkx-34U3ITw0JEHGYHq31J9-_kR5NgfKJeJiPytF4WPovaCyTCRdYo1WA/s320/Screen+shot+2010-10-15+at+7.04.26+PM.png)
Теперь осталось локализировать этот файл на нужный нам язык. Для этого открываем свойства добавленного в проект файла Localizable.strings.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH3ynfMUEchyxNpBR_uneRy4wgnPcybMDf157u2FMxZPJBit_Eh67oCAX-PQgs16oOo6-NfFh7ekcZ-o0E94byVB6uj0bcZunQtkG1mfcsR93RgF565K7SEeVSI26IDDdDhsNiwWt7kXU/s320/Screen+shot+2010-10-15+at+7.20.06+PM.png)
На вкладке "General" нажимаем кнопку "Маке File Localizable"
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgibGHsqHrSlONIdtAsRoYluDfn7xnY_kX2CnFTZ9B0k6Hy88umEQL4w9WDcINRWNMPVS8mhDrP7FdheU-HB31I0JP42f7cVGFnUrVTJ7JBRsd4rR-d1h4CEdELy9qD6dQw9lAzgkIbK70/s320/Screen+shot+2010-10-15+at+6.10.03+PM.png)
Переходим обратно на вкладку "General" и там добавляем локализацию
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHKD7xLVKcGGXw5VdAwOfJ9GAHDv-hn-XTDxz68VOWXNwocJdlWbzJXbfB1oviI7d0DWMoHPH4yBOLEckoafRRrR09ZsmEfctVBpu_tM6bkldib97_EbsfUS2U0j0_y9S1MbLdU_hWTZY/s320/Screen+shot+2010-10-15+at+6.14.35+PM.png)
При этом в проекте создается папка с локализацией для этого языка и в нее помещаются файл Localizable.strings который нужно перевести на указанный язык. В проекте это выглядит так:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAftYv4-GCm6msNSRGBuWKRPLyfgi-X-vORaC89yyT94B-B5L4h5m2MbdZFj9YqfMJnxPHstgmvRlZwk3QnGY6jTNawggIbNHq6t3428kMpDB6kaN_ZlXWZKWoGE-cJyc6XD6U8T8Djp8/s320/Screen+shot+2010-10-15+at+7.25.59+PM.png)
Файл Localizable.strings представляет собой пары "ключ" = "значение", где ключом выступает параметр переданный в макрос NSLocalizedString а значением - локализированная строка
- "Done" = "Готово";
См. также:
1. Локализация даты/времени
Спасибо за статью.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьЕсли вы ищете практичный локализационный инструмент для .strings на другой язык, присмотритесь к POEditor.
ОтветитьУдалитьДля достижения наилучших результатов он использует совместные переводы через веб-платформу.