2012-02-12 30 views
29

我做了一個名爲「Localizable.strings」一個字符串文件,並添加兩種語言給它,像這樣:NSLocalizedString只檢索的關鍵,而不是在Localizable.strings(IOS)的值

"CONNECTIONERROR" = "Check that you have a working internet connection."; 
"CONNECTIONERRORTITLE" = "Network error"; 

我也將文件轉換爲Unicode UTF-8 然而,當我創建一個UIAlertView中是這樣的:

UIAlertView *myAlert = [[UIAlertView alloc] 
initWithTitle:NSLocalizedString(@"CONNECTIONERRORITLE",nil) 
message:NSLocalizedString(@"CONNECTIONERROR",nil)      
delegate:self 
cancelButtonTitle:@"Ok" 
otherButtonTitles:nil]; 

警報視圖只顯示關鍵文本,而不是價值。例如,如果我將UITextviews文本設置爲NSLocalizedString(@「CONNECTIONERROR」,nil),但警報視圖僅顯示該鍵,它就可以工作。任何人都知道什麼是錯的?

+4

如果NSLocalizedString()無法找到鍵/值對,則返回該鍵。 – Costique 2012-02-12 18:04:09

+0

對不起,我沒有複製/粘貼代碼,所以它是一個type-o。然而,我的應用程序中的代碼是正確的。 – Smiden 2012-02-12 18:06:42

+0

發現問題。它在iPhone模擬器中不適用於我,因此我在實際設備上對其進行了測試,結果很有用。 – Smiden 2012-02-12 18:08:22

回答

8

在實際設備上測試應用程序,它的工作

+13

另一個問題是Localizable.strings文件沒有被清理掉並重新初始化;如果您之前在設備上進行了測試,然後創建或顯着更改了Localizable.strings文件,則更改並不總是被注意到,因此您必須清理構建並在更改傳播正確之前從設備中刪除副本。 – mark 2012-06-05 17:01:34

+0

從模擬器卸載應用程序對我很有用。 – cprcrack 2015-01-18 19:42:56

7

當運行時出於任何原因無法找到指定的密鑰時,就會發生這種情況。在你的情況,這很可能是由於錯字:CONNECTIONERRORITLE缺少TTITLE。在編譯關於Localizable.strings文件時,請注意任何警告/錯誤:如果存在不平衡的"或缺少;,則無法正確編譯/讀取文件。

5

NSLocalizedString使用意味着您需要EXACT案例和密鑰的拼寫才能從中獲取內容。你會發現,這個人說

NSLocalizedString(@"CONNECTIONERRORITLE",nil) 

當它應該是

NSLocalizedString(@"CONNECTIONERRORTITLE",nil) 

如果你看一下第一個的最後一部分,它說:「書名」,而不是「TITLE」

81

在我的情況,這是因爲我錯誤地命名文件「Localization.strings」,並沒有注意到(它必須命名爲Localizable.strings)。如前所述,症狀是因爲編譯器無法找到字符串。否則,原因可能是許多事情,但通常是缺少的分號或引號。當您一次執行大量本地化時,很難找到這些內容。所學到的教訓是在開發過程的早期就開始構建本地化文件,並隨時進行構建,以便更容易發現。

+2

謝謝,這個評論幫了我很多! – Tom 2013-03-07 20:34:33

+0

大聲笑,這有幫助。感謝 – 2016-05-27 19:07:28

+0

請注意,文件名是區分大小寫的。所以你必須使用「.strings」而不是「.Strings」 – Arefly 2016-06-27 12:28:50

8

我在iOS模擬器上遇到了這個問題。我最終刪除Localization.strings文件在模擬器目錄

(/用戶/(我)/庫/ Application Support/iPhone 模擬器/ 5.0 /應用/(等)/(項目)/(應用的.app)

cd到那裏,並刪除Localization.strings的所有副本在那裏發現。

出於某種原因構建的通常的橡膠雞巫術乾淨,退出iPhone模擬器,退出的XCode等不工作,但這確實。至少對我而言,今天。

3

要了解Localizable.strings文件是否正在被找到,請檢查您的內容。應用程序的構建,你也可以做到這一點代碼:

// EN是英語例如所以這裏指定你 的NSString *路徑= [[一個NSBundle mainBundle] pathForResource:@ 「恩」 ofType:@ 「lproj」] ;

如果path爲NULL,則表示找不到文件。

2

如果你在一行的末尾寫了雙分號,NSLocalization不起作用。 你應該檢查Localizable.strings文件,如果有';;'

0

本地化文件的第一行必須包含映射,否則SDK將不會讀取該文件。

1

放一個;在Localizable.strings文件的行尾。

24

同樣的問題,使用文件名來解決:Localizable.strings

6

重命名InfoPlist.strings文件Localizable.strings(雙CLIC),然後你會得到該密鑰的正確的字符串。

7

仔細檢查該文件Localizable.strings被添加到

目標 - > BuildPhases - >複製包資源

它沒有被自動添加爲我。

+0

你是救世主。這是我的情況。 – Nova 2015-06-18 19:38:32

+0

謝謝!這幫助了我! – Bjarte 2017-01-23 13:01:05

0

重置模擬器設置適用於我。

iPhone模擬器>重置內容和設置...

0

請務必不要把 '@' 你keyvalue的面前就像這樣:

@"key" = @"value"; 

這應該只是:

"key" = "value"; 

的「@」只去在關鍵的前訪問它時:

NSWebLocalizedString(@"key", @"label for coder"); 
1

在我的情況下,我嘗試了乾淨的項目並刪除派生數據仍然無法正常工作。我在字符串文件中刪除了幾個換行符,然後Xcode再次查找字符串。

-1

您是否嘗試過清潔和重建項目?

4

將文件的名稱更改爲Localizable.strings,確保文件檢查器中的目標已設置。 爲了避免語法錯誤,右鍵單擊Localizable.strings文件 - >打開as-> ASCII屬性列表 此外,清理項目和再次構建幫助我的情況。

+0

這也是在Localizable.strings文件中查找錯誤的好方法。 – ViruMax 2017-02-23 08:31:24

0

當突然本地化只是停止翻譯字符串時,我有一切工作。這意味着該文件對Xcode來說不知何故是不可讀的。

這發生在我身上,因爲我在Localized.strings文件中粘貼了一個壞字符。當我用違規字符(一個非Unicode字符?壞引號?不能說)刪除了幾行時,一切都恢復正常了。

爲了找到有問題的代碼,我做了一個斷點,並在調試器中手動翻譯了我的文件中的字符串,直到我找到第一個不會轉換的字符串。

7

我一直在尋找解決方案5個小時,我盡我所能使我的應用本地化工作。

問題是我的項目的一個Pod有一個Localizable.strings文件(實際上它是Parse pod沒有重命名它)。因此我的Localizable.strings文件沒有被我的應用識別。

我通過更改名稱的文件,以「MyappnameLocalizable.strings」,用NSLocalizedString這種方式解決了該問題:

 NSLocalizedString("key", tableName: "MyappnameLocalizable", comment: "comment") 
1

無建議的解決方案的工作對我來說,但我沒有被解決的問題刪除產品中的.app文件

1

如果在字符串文件中有任何額外的分號,它不會本地化。

1

我遇到過類似的問題,突然間我的本地化字符串根本不起作用。然後,我用舊的.strings副本進行文件比較,最後發現我不小心刪除了其中的一個鍵。

因此,如果格式錯誤,Xcode將不會爲您讀取字符串。

這是它期望的格式「Key」=「Value」;

8

更改您的.strings文件名爲Localizable.strings,它爲我工作。