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