Несколько файлов Localizable.strings в одном приложении iOS.
Возможно ли иметь несколько компонентов, которые имеют свои отдельные локализации в приложении?
Например, я хочу локализовать строки в моем приложении, но также использовать ShareKit, который локализован сам (поэтому мой пакет будет содержать 2 Localizable.strings в разных местах).
Таким образом, ShareKit содержит такие папки, как en.lproj и de.lproj, которые содержат файлы Localizable.strings, и я хочу создать их для остальной части моего проекта, но сохраняю их отдельно.
Я попытался просто сохранить их отдельно, и это привело к тому, что строки моего приложения не использовались. Любые идеи?
Ответы
Ответ 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
пс
читать комментарии тоже...