删除项目的一种语言后,项目中其他现有的可本地化文件无法正确加载。文件包含在包资源中,但是它们没有正确加载,load方法不会返回localizable.strings文件中包含的字符串键的任何值。

load方法如下:
-(NSString*) languageSelectedStringForKey:(NSString*) key
{
NSString *path;
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [currentDefaults objectForKey:@"AppleLanguages"];
NSString *selectedLanguage = [languages objectAtIndex:0];
if([selectedLanguage isEqualToString:@"es"])
path = [[NSBundle mainBundle] pathForResource:@"es" ofType:@"lproj"];
else if([selectedLanguage isEqualToString:@"en"])
path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil];
path=nil;
languages=nil;
selectedLanguage=nil;
languages=nil;
languageBundle=nil;
return str;
}非常感谢你的帮助。
发布于 2012-10-05 00:57:57
在大多数情况下,您可以只使用NSLocalizedString查找字符串的翻译。例如:
myLabel.text = NSLocalizedString(@"The String Key", @"Comment for translators");为了探索查找这些字符串的问题,我有两个建议:
NSLog(@"Bundle path is: %@", [[NSBundle mainBundle] bundlePath]);
从那里你可以浏览你的应用程序用来执行特定语言查找的文件树(使用Finder或Terminal来检查该目录中有哪些文件)。您应该会看到直接位于上面记录的路径中的目录,这些目录看起来像{ios-language-code}.lproj,并且每个目录中都应该有一个名为Localizable.strings的文件(假设您使用的是默认转换设置)。例如,英语为en.lproj,法语为fr.lproj。
因此,我建议验证这些文件的格式是否正确,如here所述。了解用于处理这些文件的工具也是很好的,这些文件在here中有描述。
如果文件结构不是您所期望的,一种可能的方法是在Xcode中检查目标的构建阶段,并验证"Copy Bundle Resources“部分中是否列出了Localization.strings。
我非常确定,如果您的捆绑包中有正确的.lproj目录,并且这些目录中有正确的.strings文件,那么NSLocalizedString应该可以按预期工作--因此,即使上面的建议不能完全解决您的问题,您也可以将问题减少到修复主捆绑包文件结构。
https://stackoverflow.com/questions/12731472
复制相似问题