本地化不适用于Xcode 6和动态库(jnilib)

时间:2015-04-10 06:54:39

标签: java xcode6 chromium-embedded nslocalizedstring localizable.strings

在我的公司,我需要本地化我们的jni库。 我们的主要应用程序是用Java编写的,JNI我们正在使用CEF3

(我知道,有一个JCEF,但我需要解决CEF3的问题)

jnilib处理主菜单,如图chrome main menu

我需要本地化这个菜单,英语和德语。

我做了什么:

  • 添加了Localizable.strings
  • 在项目设置的信息标签中添加了字符串
  • 在目标设置上的副本包资源中添加了Localizable.strings
  • 重命名了Localizable.strings并尝试了NSLocalizedStringFromTable
  • 将Localizable.strings编码更改为UTF-16
  • 当然还尝试了所有其他"解决方案"发布在stackoverflow和其他网页上
  • 尝试过这种方法:Localization of static lib

但每次我只获得钥匙作为价值。 如果我打印出BundlePath,我会得到以下路径:(jdk home dir)

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

如果我将en.lproj和de.lproj复制到bin目录(用于测试目的),仍然不会使用本地化。

我不知道该怎么做:/

我正在使用Xcode 6.3开发MacOsX 10.10.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

1 个答案:

答案 0 :(得分:0)

我能够找到解决方案。

这里有很多帮助我的链接:static library and internationalization

这是我的代码:

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