2012-01-03 50 views
5

我正在開發具有多語言支持的應用程序。 正如你所期待,不時我加載使用這樣的一些代碼筆尖文件:然後在iOs中手動加載不同的本地化筆尖

self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:nil]; 

該應用程序將加載從它的語文件夾對應的本地化版本的廈門國際銀行。 現在,我想知道是否可以手動加載本地化的nib文件。 例如,而不是簡單地加載CustomController,裝載英語/法語/德國/版本CustomController的。

有沒有辦法實現這個目標?

非常感謝您的幫助!

P.S.我知道這可能不是改變語言在iPhone/iPad的應用程序的正確方法,但這不是我的決定

[後來編輯] 這看起來有點怪異,像一個黑客,但它似乎處理(搬入德國筆尖):

NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"]; 
NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle]; 

我發現了尖的位置:http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

感覺並不完全正確不過,如果有其他的解決方案也是,我想知道。 對於初學者來說,我覺得這會給老版本的iOs帶來麻煩,因爲語言文件夾有不同的命名約定

+1

檢查是否可以幫助你:http://stackoverflow.com/questions/598020/objective-c-cocoa-internationalization-with-nibs-is-that-really-a-good-idea – Peres 2012-01-03 12:13:04

+0

它的確如此,但在這種情況下不適用。我對如何在不使用本地化筆尖的情況下實現這樣的效果有一些想法。不幸的是,該應用程序現在使用它們,並且想法是儘快做到這一點,而不必做很多重寫/重新考慮應用程序。如果我可以手動加載本地化的xib,那麼將它轉換起來非常容易 – BBog 2012-01-03 12:18:35

+0

但是我們正在談論在運行時做這件事嗎?例如,我有英國英國的筆尖,然後我進入設置並將語言切換到通道,它會改變? – Peres 2012-01-03 12:34:15

回答

17

所以,就像我在編輯中所說的,這是我發現的解決方案:

NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"]; 

NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 

self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle]; 

如果你需要一個文本加載到本地化的標籤

NSString* path= [[NSBundle mainBundle] pathForResource:[[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0] ofType:@"lproj"]; 

NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 

someLabel.text = [languageBundle localizedStringForKey:@"textKey" value:@"" table:nil];  

此處瞭解詳情:http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

可能引起關注的是這種方法引發了很多問題。 對於初學者來說,可能會影響每個人的東西:您需要讓本地化xib使用的所有資源都進行本地化。 如果我使用此方法加載新的本地化xib,並且xib包含常規的非本地化圖像,它將在本地化之前不顯示。 其他問題更具體,並且與您檢索本地化數據的方式有關。

最後,我不認爲我會使用它,因爲目前的應用程序太麻煩了,但它可能在未來變得方便。