Подтвердить что ты не робот

Несколько файлов Localizable.strings в одном приложении iOS.

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

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

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

4b9b3361

Ответ 1

Есть способ сделать это, что довольно просто.

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

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

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

См. Matt Gallagher недавнее сообщение об этом.

Ответ 2

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

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

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

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

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

Ответ 3

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

Luca

Ответ 4

О, хорошо, я не знаю 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

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