可以說我的應用程序只能用英文運行。但我不想每次添加新語言時都要發佈新版本。我的建議是將這個localizable.strings
文件遠程加載到我的應用程序中。我可以將一個localizable.strings文件加載到iOS應用程序中嗎
我的應用程序具有從ftp站點加載文件的功能。
你們認爲可以用這種方式加載語言嗎?或者,應用程序是否必須在編譯時編譯語言文件?
可以說我的應用程序只能用英文運行。但我不想每次添加新語言時都要發佈新版本。我的建議是將這個localizable.strings
文件遠程加載到我的應用程序中。我可以將一個localizable.strings文件加載到iOS應用程序中嗎
我的應用程序具有從ftp站點加載文件的功能。
你們認爲可以用這種方式加載語言嗎?或者,應用程序是否必須在編譯時編譯語言文件?
所有本地化的字符串資源(加上許多其他類型的資源)都從該包中提取。通常,應用程序使用「主包」,這是由XCode與您的應用程序一起創建的「主包」。 但是,如果您使用正確的結構創建它,您可以單獨創建任何其他包,然後可以將它下載到您的應用中,最後使用NSLocalizedStringFromTableInBundle()函數提取本地化的字符串。
所以我們說你提取的關鍵「鑰匙」的語言翻譯,那麼正常的語法爲:
NSString *translated = NSLocalizedStringFromTable(@"key",nil,nil);
,但有這個選項,允許您指定包的變體:
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
在標準情況下你[NSBundle mainBundle]
更換myBundle
但如果你想使用另一種捆綁,你可以用這種方式指定它:
NSString *myBundlePath = "the path to the downloaded bundle";
NSBundle *myBundle = [NSBundle bundleWithPath:myBundlePath];
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
捆綁的完整結構可以看出,在蘋果文檔的「捆綁編程指南」中,但在你的情況下,你可以簡單地創建了這種方式:在您的Mac創建一個目錄
您會注意到上一個操作,現在這個對象被看作是一個獨立的對象,但實際上它是一個目錄。
現在您可以決定採用多捆綁方式還是採用單捆綁技術:在後一種情況下,您可以打包所有語言,然後使用唯一更新的捆綁包進行語言翻譯,方法是使用自動系統本地化規則;在另一種情況下,您可以爲每種語言製作一個包,然後 - 根據當前選擇的語言 - 加載適當的包,併爲您的翻譯選擇它。
同樣的問題作爲http://stackoverflow.com/questions/12358379/is-it-possible-to-access-the-app-bundles-en-lproj? –
這個問題似乎已被解決[這裏](http://stackoverflow.com/a/6075533/1651167) – Shelm
是類似的,但人們根據問他們是如何回答不同的問題。下面這個顯然有更好的答案。 – mskw