2012-06-26 32 views
0

我有一個應用程序,其中包含所有內容,而不管語言顯示的內容是英文。在應用產品內容的產品部分顯示基於plist。可供購買的產品是基於位置的,並非所有產品都可在每個市場上購買。爲區域本地化iPhone應用程序

在我的模擬器的設置,我有我的語言設置爲英文我的區域格式設置爲新加坡

在我已經本地化的plist的加載之上,我首先做了一個日誌來檢查我是否將SG(新加坡)視爲我的區域。

NSString *locale = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode]; 
NSLog(@"LOCALE: %@", locale); 
if([locale isEqualToString:@"SG"]){ 
    NSLog(@"singapore do something?"); 
    productCategory = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] 
            pathForResource:@"Products" ofType:@"plist"]]; 
} 

當前結果顯示我的日誌語句日誌記錄LOCALE:SG預計,但我的新加坡特定內容不加載。

我已經嘗試清理項目,並從模擬器中刪除應用程序。

這是我的plist文件是如何出現在我的項目導航 Products.plist image

我在做什麼錯誤地阻止我的本地化的plist被顯示?

+0

我的InfoPlist.strings文件只說/ * Info.plist鍵的本地化版本*/- 可能需要注意的是,我的英文和英文 - 英國本地化文件工作正常,但是我注意到這些差異在語言設置不是區域設置。 – propstm

回答

4

本地化(裝載翻譯資源從相關的語言文件夾的過程在您的應用程序包中)完全基於語言設置。因此,pathForResource只關心語言設置並忽略區域格式設置。

區域格式設置影響字符串和區域設置相關數據類型之間的轉換(在兩個方向:解析輸入和格式化輸出)。例如,如果您將NSDate轉換爲字符串進行顯示,則根據區域格式設置,您可能會獲得前一個月的日期(如在美國)或相反(如在英國)。

[NSLocale currentLocale]指的是區域格式,因此您只是在調試時查看錯誤的東西。

有很多關於這個位置的詳細信息:https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPInternational/BPInternational.html#//apple_ref/doc/uid/10000171i

編輯 請參見下面的評論,這似乎是更復雜。當語言設置爲中性語言(例如「en」而不是「en-US」)時,Region看起來會影響本地化。

+0

「本地化...完全基於語言設置」這種說法是否正確?如果我將字符串資源本地化爲「es」和「es-PY」文件,並將語言設置爲es並將區域設置爲PY,那麼我的iPad應用程序會選擇PY來處理es的一般語言本地化。如果我將其設置爲其他地方,比如祕魯,則該應用程序將正確回退到es的語言字符串。 – stonedauwg

+0

es-PY表示在巴拉圭講的西班牙語。您可以使用es-PY作爲語言運行應用程序,並將區域格式設置爲其他內容。該語言會影響您將獲得的本地化字符串(如您所描述的),但區域格式不會(這會影響您的讀寫日期,數字,貨幣數量)。 – Clafou

+0

我已經在iOS10上測試了這個 - 如果我有一個es-PY和一個通用es本地化包,然後將iPad語言設置更改爲西班牙語(通用,非區域特定=「es」)和區域es- PY(西班牙語 - 巴拉圭)中,它將拾取es-PY區域字符串而不是一般es字符串,從而證明區域DOES會影響字符串(如果該字符串中包含該區域設置)。如果我然後將區域切換到其他地方,比如祕魯,因爲我沒有該區域字符串本地化,它會從該包中退回到常規字符串。查看AppleBundleGuide->搜索訂單部分 – stonedauwg

0

我曾經有同樣的問題,不知何故找到一個非本地化的文件。什麼工作對我來說是使用:

[[NSBundle mainBundle] pathForResource:@"Products" ofType:@"plist" inDirectory:nil] 

這將始終搜索所有本地化文件,並返回基於用戶設置正確的

相關問題