2012-12-21 71 views
6

我在調試我的NSLocalizedString實現時遇到了一些問題。應該很簡單,但無論我做什麼,該函數只返回KEY字符串。iOS - NSLocalizedString只返回密鑰字符串

我使用的XCode 4.5和iOS6的,所以我:

  1. 增加了一個新的文件名爲File.strings
  2. 在我的項目設置中,我添加了英語和西班牙語作爲語言設置。
  3. 在文件檢查器中單擊「Make Localized」,並確保選中了英語和西班牙語選項,並且選中了我的目標的目標成員資格。
  4. 增加"KEY" = "TestEnglish";我的英語File.strings
  5. 新增"KEY" = "TestSpanish";我西班牙人File.strings
  6. 新增NSLog(@"Localization: %@\n", NSLocalizedString(@"KEY", nil));.m文件。

當我運行該應用程序時,值"KEY"始終顯示打印在NSLog

跳進這個有點多,我想這也:

NSString *path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 
NSString *str = [[NSBundle bundleWithPath:path] localizedStringForKey:@"KEY" value:@"" table:nil]; 
NSLog(@"Localization: %@\n", str); 

,仍然「被印在值"KEY,然而,path是一個有效的路徑

沒有人有任何。線索如何調試?我覺得我已經讀過每一個SO問題/答案,但沒有任何建議幫助。

我知道NSLocalizedString返回KEY字符串,當它不能匹配ak ey,但我看不出我如何調試爲什麼我的應用程序可能不匹配KEY。

我也刪除/清理了大約十幾次的應用程序。

+0

不應該'table:nil'是'table:@「File」'而不是? – 2012-12-21 17:15:11

+0

@ H2CO3:哇,是的,謝謝。這抓住了英文版本,我非常高興的工作。但最終,我需要NSLocalizedString工作,以便我可以使用該方法的便利。我是否需要將「File.strings」重命名爲其他內容才能使NSLocalizedString工作? – Brett

+0

您應該將您希望訪問的所有本地化信息放入「XXX.lproj/Localized.strings」中。另外,爲什麼你必須**使用'NSLocalizedString()'? – 2012-12-21 17:24:14

回答

10

如果指定table:nil,則NSBundle將嘗試從默認表(SOMELANG.lproj/Localizable.strings中的表)中獲取本地化。如果你有其他地方的定位,應明確指定使用table:@"File"表(或使用NSLocalizedStringFromTable()宏以類似的方式:

NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil); 
+0

完美!謝謝! – Brett

0

重命名InfoPlist.strings文件Localizable.strings(雙CLIC),然後你。將得到正確的字符串爲關鍵

1

在我的情況下,問題是用字符串的情況: 「bla.bla.blabla.Book 小號很多」,而Localizable.strings有它定義爲「 bla.bla.blabla.Book s lot「

因此,請仔細檢查密鑰字符串是否正確。更好的是,複製粘貼。

+0

他們是相同的... – Warpzit

+0

@Warpzit,在他的情況下 - 也許。我只是指出密鑰區分大小寫。 – user3099609

+0

你說我有X = X的問題......這不是問題,現在如果你在我的案例中說X!= Y.那會有道理...... – Warpzit