Несколько файлов Localizable.strings в одном приложении iOS - PullRequest
36 голосов
/ 27 января 2011

Возможно ли иметь несколько компонентов, которые имеют свои отдельные локализации в приложении?

Например, я хочу локализовать строки в своем приложении, но также использую ShareKit, который локализован сам (поэтому мой пакет будет содержать 2 Localizable.strings в разных местах). Итак, ShareKit содержит папки, такие как en.lproj и de.lproj, которые содержат файлы Localizable.strings, и я хочу создать то же самое для остальной части моего проекта, но хранить их отдельно.

Я пытался просто хранить их отдельно, в результате чего строки моего приложения не использовались. Есть идеи?

Ответы [ 4 ]

83 голосов
/ 07 апреля 2011

Существует довольно простой способ сделать это.

Существует несколько макросов для локализации, один из которых NSLocalizedStringFromTable().Это принимает три параметра:

  1. Строка для локализации
  2. Имя таблицы, которое является просто именем файла
  3. Комментарий, как в NSLocalizedString()

Если вы используете имя таблицы, у вас может быть другой файл строк, то есть, если я сделаю NSLocalizedStringFromTable(@"name", @"MyStrings", @"whatever");, тогда поместите мои строки в MyStrings.strings, он будет использовать это. сообщение Галлахера об этом.

0 голосов
/ 29 января 2011

о, хорошо, я не знаю ShareKit, но я думаю, вы не можете редактировать его текстовые файлы и просто добавлять свои новые слова в эти файлы, не так ли?

тогда вы можете подумать о создании собственного файла "словаря" и попытаться локализовать его, затем прочитать его и поместить в NSDictionary, где вы можете прочитать отдельные слова / значения ... Вы можете вставить запись в свой файл «myDict.plist» с ключом «приветствие» типа String со значением «ciao» для итальянского языка и «hallo» для английского

NSString *bundle = [[ NSBundle mainBundle] pathForResource:@"myDict" ofType:@"plist"];
NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile:bundle];
NSString *greetingsTranslatedInTheGoodLanguage = [savedStock objectForKey:@"greeting"];
// just to try what you have read:
NSLog (@"translated by your own dictionary: %@", greetingsTranslatedInTheGoodLanguage);
[savedStock release];

Luca

п.с. читать комментарии тоже ...

0 голосов
/ 07 апреля 2011

Невозможно сделать то, что вы просите.У вас может быть несколько файлов Localizable.strings, но только один для каждого языка в соответствующих папках .lproj.

Я понимаю, что вы не хотите редактировать файлы ShareKit Localizable.strings, так как это будет проблематично при обновлениино я думаю, вам нужно посмотреть, сколько работы на самом деле это займет.В зависимости от того, сколько языков вам нужно поддерживать, может быть меньше работы по локализации ваших собственных строк и добавлению их в конец файлов ShareKit Localizable.strings, чем по реализации вашей собственной схемы локализации.

Кстати, чтобы обнаружитьНа каком языке устройство в настоящее время установлено, вы можете использовать:

NSArray *preferedLocalizations = [[NSBundle mainBundle] preferredLocalizations];

Это дает вам массив двухбуквенных строк кода языка.Элемент с индексом 0 является текущим выбранным языком.Это может быть полезно, если вам нужно принимать логические решения на основе языка.

0 голосов
/ 27 января 2011

каждый файл / ресурс может быть локализуем, также файлы .xib IB или изображения jpg / png, вам просто нужно выбрать файл в вашем проекте, открыть информацию, перейти на вкладку «Общие» и нажать «сделать файл локализуемым» ... затем вы можете добавить любой язык, который хотите, xCode создаст новый файл, дублирующий первый, и поместит его в нужную папку ...

Luca

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...