本地化不适用于 Xcode 6 和动态库 (jnilib)
Localization doesn't work with Xcode 6 and dynamic library (jnilib)
在我的公司,我需要本地化我们的 jni-library。
我们的主要应用程序是用 Java 和 JNI we are working with CEF3
编写的
(我知道,有一个 JCEF,但我需要解决 CEF3 的问题)
jnilib 像这张图片那样处理主菜单
我需要将此菜单本地化,英语和德语。
我做了什么:
- 已添加 Localizable.strings
- 在项目设置的信息选项卡中添加了字符串
- 在目标设置的复制包资源中添加了Localizable.strings
- 重命名 Localizable.strings 并尝试 NSLocalizedStringFromTable
- 已将 Localizable.strings 编码更改为 UTF-16
- 当然也尝试了 Whosebug 和其他网页上发布的所有其他 "solutions"
- 试过这个方法: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
我找到了解决方案。
这里的 link 对我帮助很大: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
在我的公司,我需要本地化我们的 jni-library。 我们的主要应用程序是用 Java 和 JNI we are working with CEF3
编写的(我知道,有一个 JCEF,但我需要解决 CEF3 的问题)
jnilib 像这张图片那样处理主菜单
我需要将此菜单本地化,英语和德语。
我做了什么:
- 已添加 Localizable.strings
- 在项目设置的信息选项卡中添加了字符串
- 在目标设置的复制包资源中添加了Localizable.strings
- 重命名 Localizable.strings 并尝试 NSLocalizedStringFromTable
- 已将 Localizable.strings 编码更改为 UTF-16
- 当然也尝试了 Whosebug 和其他网页上发布的所有其他 "solutions"
- 试过这个方法: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
我找到了解决方案。
这里的 link 对我帮助很大: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