2012-04-22 25 views
0

我使用文本加載資源,從文本文件不同的語言:無法加載特定國家的資源

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"txt"]; 

if(filePath) { 

    NSString *myText = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; 

} 

作品非常好,我的語言特定資源,英語,德語等

但我也有一些特定國家的資源,如英國的英文文本,美國的英文文本,奧地利的德文文本等。

如果手機設置爲特定國家/地區,我預計這些資源會被加載(地區格式),但他們不。文件路徑將始終設置爲「純」語言文件夾中的文件。

因此,例如,我已myfile.txt複製的文件夾:

en.lproj 
en-GB.lproj 
en-US.lproj 

但它總是加載一個在en.lproj

文件夾已經用Xcode中定位功能創建,都位於同一個文件夾中。

有點奇怪的是,由Xcode創建的這些文件夾用連字符做了單獨的語言和國家,但根據文檔,它應該是下劃線。我試圖手動將文件夾(帶有下劃線)複製到項目中,但它仍然不起作用。

我如何設法加載國家特定的文件?

感謝.....

回答

0

注:你的代碼示例是加載文本資源的複雜的方式。如果您要加載非字符串資源(如圖像或媒體文件),但是對於簡單字符串,則只需使用每種語言的一個.strings文件(包含多個本地化字符串)並調用NSLocalizedString即可獲取給定的相關語言版本串。

答案:「區域格式」下的iOS設置不影響資源加載。相反,它控制着系統如何執行區域依賴功能(如日期/數字格式和解析)。控制您的本地化資源的哪種語言版本的iOS設置是語言設置(常規>國際>語言)。目前,它只包含兩個英文變體:「英語」和「英國英語」。

+0

我也使用.string文件加載字符串,但我的應用程序顯示一些多行文本,我覺得它更方便,每個文本保持爲每種語言一個單獨的文件。無論如何,當我嘗試輸入特定國家的文本時,它似乎不適用於.strings。 – user1349588 2012-04-23 21:24:55

+0

我對iPhone的開發非常陌生,並且一直在使用這本書「Beginning IOS 5 Development。它說:」當本地化應用程序需要加載資源時(例如圖像,屬性列表或筆尖),應用程序會檢查用戶語言和地區,並查找與該設置相匹配的本地化文件夾。如果它找到一個,它將加載資源的本地化版本,而不是基本版本。「我將其解釋爲我將獲得特定於國家/地區的版本(就像它也在Java中那樣),但它似乎不起作用。 – user1349588 2012-04-23 21:31:36

+0

我認爲這是錯誤的只有iOS語言設置中列出的語言才支持資源加載區域格式沒有出現,所以英國英語應該可以使用,但奧地利不適用德語在XCode中,您可以選擇一種語言如果你使用本地化控制,我相信你也只會在那裏看到一個德語版本。 – Clafou 2012-04-23 21:54:34

3

我創建了Localisations.string的「荷蘭荷蘭」翻譯並將iPhone語言設置爲荷蘭語,但NSLocalizedString總是返回英文翻譯。解決方案是創建一個「荷蘭語」翻譯(nl.lproj)而不是「荷蘭荷蘭」(nl-NL.lproj)。

在iOS4的或iOS5中的設置屏幕,您可以選擇荷蘭的語言,但沒有部分選定爲荷蘭語或荷蘭比利時,儘管這些都是在XCode中可用。在我看來,XCode提供了比iOS實際支持更多的翻譯選項。

我的意思是有沒有辦法讓你的應用程序使用「NL-NL」的資源。我想德國和奧地利也有同樣的問題(「de-DE」和「de-AT」)。

+0

你最好用相應的鏈接創建另一個問題。 – 2012-10-14 22:10:43

0

我有NL-NL.lproj(荷蘭)和CA-ES.lproj(加泰羅尼亞)同樣的問題。對我來說,解決方案是使用Xcode添加語言。轉到Xcode Project,然後在Info Tab中添加語言。自動創建文件夾nl-NL.lproj和ca-ES.lproj。

然後你就可以在模擬器(的Xcode 4.6版本)試試這個,這些語言不字,而不是將加載英語。

首先重命名手動夾NL-NL.lproj到nl.lproj。 最後去到文件{} MY_PROJECT .xcodeproj/project.pbxproj並替換以下行的路徑:

C3D2888817108DDA00CE8AC2 /* nl-NL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nl-NL"; path = "nl.lproj/Localizable.strings"; sourceTree = "<group>"; }; 
    C3D2888917108DE500CE8AC2 /* nl-NL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nl-NL"; path = "nl.lproj/InfoPlist.strings"; sourceTree = "<group>"; }; 

這一切,現在我可以正確地獲得這些語言設置。