Локализация строк в статической библиотеке - PullRequest
10 голосов
/ 25 февраля 2010

У меня есть проект, который использует статическую библиотеку (SL). В этом SL есть пара строк, которые я хотел бы локализовать, и проект включает все файлы локализации. Локализация прекрасно работает, когда все текстовые переводы хранятся в одном файле. Дело в том, что я хотел бы отделить строки SL от других строк. Я попытался поместить два разных файла * .strings (Localizable.strings и Localizable2.strings) в интересующую папку языка, но это не сработало. Я также попытался использовать два файла * .strings с тем же именем (Localizable.strings), но с разными путями. Это тоже не сработало. Кажется, что поддерживается только один файл локализации, верно? Кто-нибудь может предложить хороший способ сделать это? Я использую SDK 3.2 beta 2.

Ответы [ 3 ]

15 голосов
/ 12 августа 2010

Невозможно связать его в статической библиотеке, но вы можете создать новый пакет, например " MyStaticLibraryName.bundle ", поместить все локализации и использовать вместо него приведенный ниже код " NSLocalizedString ( ) ». Все, что вам нужно сделать: добавить статическую библиотеку и комплект ресурсов.

NSString *MyLocalizedString(NSString* key, NSString* comment) {
static NSBundle* bundle = nil;
if (!bundle) {
    NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MyStaticLibraryName.bundle"];
    bundle = [[NSBundle bundleWithPath:path] retain];
}

return [bundle localizedStringForKey:key value:key table:nil];
}
6 голосов
/ 17 сентября 2010

Размещение файлов с одинаковым именем в одном проекте никогда не работает, потому что в получающемся приложении они оказываются в одном месте. (Xcode не сохраняет вашу структуру каталогов.)

Но вы можете поместить часть своей локализации в Localizable2.strings и затем использовать:

NSLocalizedStringFromTable (@ "key", @ "Localizable2", @ "")

2 голосов
/ 02 сентября 2010

Создайте локализуемую строку для статической библиотеки, затем поместите файл этой строки в папку «YourLibraryResource». Переименуйте папку «YourLibraryResource.bundle».

Теперь вы включаете этот пакет также в проект вместе с библиотекой. Тогда используйте код, данный abuharsky.

...