Локализация строк в статическом lib

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

Ответ 1

Невозможно связать его в статической lib, но вы можете создать новый пакет, например " 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];
}

Ответ 2

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

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

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

Ответ 3

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

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