Локализация не работает с Xcode 6 и динамической библиотекой (jnilib)

В моей компании мне нужно локализовать нашу jni-библиотеку. Наше основное приложение написано на Java, и мы работаем с CEF3

(Я знаю, есть JCEF, но мне нужно решить проблему с CEF3)

Jnilib обрабатывает главное меню, как показано на рисунке chrome main menu

Мне нужно локализовать это меню на английский и немецкий языки.

Что я сделал:

  • Добавлен Localizable.strings
  • Добавлены строки на вкладке информации в настройках проекта.
  • Добавлен Localizable.strings в ресурсы пакета копирования в целевых настройках
  • Переименовал Localizable.strings и попробовал NSLocalizedStringFromTable
  • Изменена кодировка Localizable.strings на UTF-16.
  • И, конечно же, попробовали все другие «решения», размещенные на stackoverflow и других веб-страницах.
  • Пробовал этот метод: Локализация статической библиотеки

Но каждый раз я получаю только ключ как значение. Если я распечатаю BundlePath, я получу следующий путь: (домашний каталог jdk)

*/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin*

Если я скопирую en.lproj и de.lproj в каталог bin (в целях тестирования), локализация по-прежнему не используется.

Я не знаю, что делать: /

Я работаю над MacOsX 10.10.3 с Xcode 6.3

Изменить: код обрезан, это тоже не работает.

    NSString *path = @"pathtobundle/JNILIB.bundle";
    bundle = [[NSBundle bundleWithPath:path] retain];

    NSString *tmp = NSLocalizedStringFromTableInBundle(key, nil, bundle, nil);

jnilib.bundle структура:

/JNILIB.bundle
   /en.lproj
      /Localized.strings
   /de.lproj
      /Localized.strings

person dominic.e    schedule 10.04.2015    source источник


Ответы (1)


Я смог найти решение.

Вот ссылка, которая мне очень помогла: статическая библиотека и интернационализация

Вот мой код:

NSString *MyLocalizedString(NSString* key, NSString* comment)
{

static NSBundle* bundle = nil;
if (!bundle) {

    NSString *path_tmp = @"pathToBundle/JNILIB.bundle";

    NSBundle *libraryBundle = [NSBundle bundleWithPath:path_tmp];
    NSString *langID        = [[NSLocale preferredLanguages] objectAtIndex:0];

    NSLog(@"preferredLanguage: %@", langID);

    NSString *path          = [libraryBundle pathForResource:langID ofType:@"lproj"];

    NSLog(@"libraryBundle : %@", path);

    bundle                  = [[NSBundle bundleWithPath:path] retain];
}

return [bundle localizedStringForKey:key value:@"Can't be found!" table:@"Localized"];
}

Структура пакета:

foo.bundle/
   Contents/
      Resources/
         en.lproj/
            Localized.strings
         de.lproj/
            Localized.strings
person dominic.e    schedule 13.04.2015