2011-08-17 139 views
2

我們可能需要加載使用的負載筆尖

[NSBundle -pathForResource:ofType:inDirectory:forLocalization:] 

我認爲這是有可能的結果的筆尖,但所有我能找到的方法只有所需的名稱不會導致路徑信息。

我們正在探索一種通過一個代碼庫提供fr-Fr和fr-CA的方法。我們的客戶想要一個fr-CA翻譯,我們害怕我們可能會有另一個客戶想要fr-Fr翻譯。我想我們可以根據選定的語言來修正筆尖。

謝謝

回答

3

路徑查找考慮到用戶的區域設置首選項。如果您提供了正確的本地化目錄(.lproj),則應該由系統加載正確的筆尖。

Apple's documentation

的方法首先查找指定包的非本地化資源目錄匹配的資源文件。 (在Mac OS X中,此目錄通常稱爲資源,但在iOS中,它是主包目錄。)如果未找到匹配的資源文件,它將查找任何可用的語言特定「.lproj」的頂級目錄。 (特定於語言的目錄的搜索順序與用戶的首選項相對應。)它不通過其他任何位置的子目錄進行遞歸。有關更多詳情,請參閱國際化編程主題。

不幸的是,蘋果的文檔是自相矛盾和不完整的。

重要:如果你看一下「國際化編程主題」中的「語言和區域設置名稱」,你會「語言和區域設置ID」這個寶石下找到在iOS中,捆綁接口不在查找本地化資源時考慮方言或腳本信息;只考慮語言指示符代碼。因此,如果您的項目包含具有語言和區域指示符的特定於語言的項目目錄,則會忽略這些目錄。 Mac OS X中的軟件包接口在語言特定的項目目錄中支持區域指示符。

這不完全正確。如果你看看蘋果自己的應用程序,你會看到iOS確實支持某些區域名稱,但只有Apple關心的那些。例如見.LPROJ目錄列表在最近的移動Safari瀏覽器:

$ ls -d *.lproj 
Dutch.lproj/ el.lproj/  pt_PT.lproj/ 
English.lproj/ en_GB.lproj/ ro.lproj/ 
French.lproj/ fi.lproj/  ru.lproj/ 
German.lproj/ he.lproj/  sk.lproj/ 
Italian.lproj/ hr.lproj/  sv.lproj/ 
Japanese.lproj/ hu.lproj/  th.lproj/ 
Spanish.lproj/ id.lproj/  tr.lproj/ 
ar.lproj/  ko.lproj/  uk.lproj/ 
ca.lproj/  no.lproj/  vi.lproj/ 
cs.lproj/  pl.lproj/  zh_CN.lproj/ 
da.lproj/  pt.lproj/  zh_TW.lproj/ 

注意,兩名中國區,一個英式英語區和葡萄牙葡萄牙地區的支持。但是這些都不能解決fr_CAfr_FR的問題。

爲此,我們再來看看MobileSafari。它必須執行自己的智能查找,因爲它有更多的更精細的區別StaticBookmarks-xx_YY.plist文件。

所以,這就是解決方案:使用仍然可用的區域設置功能,並相應地進行自己的查找。

+0

感謝您的響應,但蘋果文檔聲明ios將忽略包含區域指示符的語言目錄。這就是我所看到的,如果我添加一個語言目錄fr-CA並將我的手機設置爲法語我不會得到法語筆尖。 –

+0

請提供相關文檔的鏈接,或引用足夠的獨特逐字文本,以便我可以自行搜索文檔。 –

+0

感謝Jeremy的詳細回覆。 –

2

我不明白這個問題。 由於Xcode支持,您可以完美擁有法國和加拿大(法語)兩種不同的NIB。

只需添加新的定位爲您的文件(S):

enter image description here

然後用視圖控制器加載NIB,與initWithNibName方法。根據設備的語言設置,將使用正確的一個。

+0

感謝您的回覆。但是ios會查看有區域的語言目錄。來自appl文檔重要提示:在iOS中,捆綁接口在查找本地化資源時不會考慮方言或腳本信息;只考慮語言指示符代碼。因此,如果您的項目包含具有語言和區域指示符的特定於語言的項目目錄,則會忽略這些目錄。 Mac OS X中的軟件包接口在語言特定的項目目錄中支持區域指示符。 –

+0

上面的評論應該讀取ios不會看看有區域指示符的語言目錄。 –