Xcode 4:框架本地化不起作用

Xcode 4:框架本地化不起作用,xcode,frameworks,localization,xcode4,ios-frameworks,Xcode,Frameworks,Localization,Xcode4,Ios Frameworks,我正在使用Xcode 4开发自己的框架,并在两个示例应用程序(一个控制台应用程序和一个Mac OS X Cocoa应用程序)中使用它 我试图将本地化添加到框架中,因此我创建了两个版本的本地化.strings文件(en和fr版本),但每次我试图打印示例应用程序中的本地化字符串时,我只得到它的技术名称。例如,框架代码中有以下行: NSLog(NSLocalizedString(@"LOC_TEST", nil)); 我只在输出中显示“LOC\u TEST” 但是,本地化可以很好地与Cocoa应用程

我正在使用Xcode 4开发自己的框架,并在两个示例应用程序(一个控制台应用程序和一个Mac OS X Cocoa应用程序)中使用它

我试图将本地化添加到框架中,因此我创建了两个版本的
本地化.strings
文件(en和fr版本),但每次我试图打印示例应用程序中的本地化字符串时,我只得到它的技术名称。例如,框架代码中有以下行:

NSLog(NSLocalizedString(@"LOC_TEST", nil));
我只在输出中显示
“LOC\u TEST”

但是,本地化可以很好地与Cocoa应用程序本身配合使用(这意味着Cocoa应用程序的本地化字符串会被适当地显示)

下面,我尝试在框架的plist文件中添加本地化:

<key>CFBundleLocalizations</key>
<array>
    <string>en</string>
    <string>fr</string>
</array>
CbundleLocalizations
EN
fr
但这并没有改变什么

我遗漏了什么?

你所说的“技术名称”实际上是一把钥匙。您的.strings文件将类似于:

/*无可奉告*/ “LOC_测试”=“LOC_测试”


在en.lproj/Localizable.strings中,将第二个LOC_测试(在=)替换为英语字符串。在fr.lproj中对法语文本执行相同操作。

未按框架选择正确的.strings文件的原因在于
NSLocalizedString
宏:

#define NSLocalizedString(key, comment) [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
.strings文件的框架位置不是宏中指定的
[NSBundle mainBundle]


据我所知,您需要使用
NSLocalizedStringFromTableInBundle
,并指定框架的捆绑位置。

公认的答案是正确的,nsLocalizedStrings将无法在使用
[NSBundle mainBundle]
时工作,因此我在框架中使用此宏

#define LOCALIZED_STRING(key) [[NSBundle bundleForClass:[self class]] localizedStringForKey:(key) value:@"" table:nil]
例如:

将其放在.m文件中:

#ifndef NSFrameworkLocalizedStrings
#define NSFrameworkLocalizedStrings(key) \
NSLocalizedStringFromTableInBundle(key, @"YOUR_BUNDLE_NAME", [NSBundle bundleWithPath:[[[NSBundle frameworkBundle] resourcePath] stringByAppendingPathComponent:@"YOUR_BUNDLE_NAME.bundle"]], nil)
#endif
并使用此方法:

+ (NSBundle *)frameworkBundle   {
    static NSBundle* frameworkBundle = nil;
    static dispatch_once_t predicate;
    dispatch_once(&predicate, ^{
        frameworkBundle = [NSBundle bundleForClass:[self class]];
    });

    //NSLog(@"frameworkBundle %@",frameworkBundle);
    return frameworkBundle;
}
享受√
(下载将节省您时间的框架

谢谢您的帮助,但似乎控制台应用程序根本不支持本地化。一年前我发布了这个问题,从那时起我就用一个普通的Cocoa应用程序替换了那个控制台应用程序。现在一切都好了!