在我的公司,我需要本地化我们的jni库。 我们的主要应用程序是用Java编写的,JNI我们正在使用CEF3
(我知道,有一个JCEF,但我需要解决CEF3的问题)
jnilib处理主菜单,如图
我需要本地化这个菜单,英语和德语。
我做了什么:
但每次我只获得钥匙作为价值。 如果我打印出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
答案 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