2012-10-04 27 views
1

刪除項目的一種語言後,項目中其他現有的本地化文件未正確加載。文件包含在捆綁資源中,但它們未被正確加載,load方法不會返回任何值,而是包含在localizable.strings文件中的字符串鍵。無法加載localizable.strings

enter image description here

下面是加載方法:

-(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; 

} 

非常感謝您的幫助。

回答

3

在大多數情況下,您只需使用NSLocalizedString來查找字符串的翻譯。例如:

myLabel.text = NSLocalizedString(@"The String Key", @"Comment for translators"); 

探討問題,查找這些字符串,我有兩個建議:

  • 仔細檢查了iPhone /模擬器設置爲你想要顯示的語言。 是的,這應該是顯而易見的,但讓我們保持安全。
  • 在模擬器中運行你的應用程序,並記錄以下路徑:

    NSLog(@"Bundle path is: %@", [[NSBundle mainBundle] bundlePath]);

從那裏你可以探索您的應用使用做特定語言的查找文件樹(使用Finder或Terminal來檢查哪些文件在該目錄中)。您應該看到直接位於上述日誌路徑中的目錄看起來像{ios-language-code} .lproj,並且在每個目錄中都應該有一個名爲Localizable.strings的文件(假設您使用的是默認翻譯設置)。例如,英語爲en.lproj,法語爲fr.lproj

從那裏,我建議驗證這些文件的格式是否正確,其格式爲here。瞭解使用這些文件的工具也很好,這些文件被描述爲here

如果文件結構不符合您的期望,可能的一種可能是在Xcode中檢查您的目標的Build Phases,並驗證Localization.strings列在「Copy Bundle Resources」部分下。

我敢肯定,如果您的包中包含正確的.lproj目錄,並且正確的.strings文件位於這些目錄中,那麼NSLocalizedString應該按預期工作 - 即使上述建議不會徹底解決你的問題,你可以減少問題,讓你的主包文件結構得到修復。

+0

非常感謝您的幫助! – roof