2011-01-27 52 views
29

是否有可能有一個有自己獨立的本地化在應用中的多個組件?多個Localizable.strings文件

比如我要本地化字符串在我的應用程序,而且使用的是本地化的本身(所以我的包將包含2個Localizable.strings在不同的位置)ShareKit。 所以,ShareKit包含像en.lproj和de.lproj包含Localizable.strings文件,我想創建爲我的項目的其他部分一樣,但讓他們單獨的文件夾。

我曾嘗試只是讓他們分開,並且導致我的應用程序的未使用的字符串。有任何想法嗎?

回答

73

有一種方法可以做到這一點很簡單。

有本地化幾個宏,其中之一是NSLocalizedStringFromTable()。這需要三個參數:

  1. 字符串如果使用表名本地化
  2. 表名,這僅僅是一個文件名
  3. 的評論,就像在NSLocalizedString()

那麼你可以有另一個字符串文件,即如果我做NSLocalizedStringFromTable(@"name", @"MyStrings", @"whatever");然後把我的字符串在MyStrings.strings它會使用它。

請參閱Matt Gallagher的recent post

0

每個文件/資源​​都可以本地化,也可以是IB .xib文件或圖像jpg/png, 您只需在項目中選擇一個文件,打開信息,進入「常規」選項卡/部分並按「使文件本地化」 ...... 那麼你可以添加任何你想要的語言時,Xcode將創建一個新的文件複製的第一個,並把它放在正確的文件夾...

盧卡

+0

但是「正確的文件夾」是什麼意思?在我的情況下,我想有2個文件具有相同的名稱(「Localizable.strings」),我想知道這可以如何工作。 – Dimitris 2011-01-27 00:38:47

+0

好吧,好消息是你不必擔心這個......我的意思是:如果你現在只有一個名爲「Localizable.strings」的單個文件,就試着按照我所說的去做(select它打開信息,進入「常規」選項卡,按下「make file localizable」按鈕,在新打開的窗口中選擇常規選項卡並按下「添加本地化」按鈕,然後爲該文件選擇一種新的語言) ...當你這樣做xCode創建「正確的文件夾」爲您移動英文文件中的舊文件「Localizable.strings」和意大利文(或其他)的新(重複)文件,所以只需編輯它 – meronix 2011-01-27 07:07:34

+0

但我想要兩個:)這就是這個問題的要點。 – Dimitris 2011-01-27 23:40:12

0

哦好吧,我不知道ShareKit,但我想你不能編輯它的文本文件,只是將你的新單詞添加到該文件,不是嗎?

然後你可以考慮創建你自己的「字典」文件,並嘗試本地化它,然後讀取它並把它放在一個NSDictionary,你可以讀取單個單詞/值... 你可以插入一條記錄你的文件「myDict.plist」與關鍵字String類型的「問候語」與價值「僑」爲意大利之一,在「你好」的英文一個

NSString *bundle = [[ NSBundle mainBundle] pathForResource:@"myDict" ofType:@"plist"]; 
NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile:bundle]; 
NSString *greetingsTranslatedInTheGoodLanguage = [savedStock objectForKey:@"greeting"]; 
// just to try what you have read: 
NSLog (@"translated by your own dictionary: %@", greetingsTranslatedInTheGoodLanguage); 
[savedStock release]; 

盧卡

PS 閱讀註釋過...

1

這是不可能做你在問什麼。您可以有多個Localizable.strings文件,但其各自的.lproj文件夾中只有一種語言。

我知道你不想編輯ShareKit Localizable.strings文件,因爲更新時將是一個痛苦,但我認爲你需要看看會是多少工作實際需要。根據您需要多少種語言支持它可能不太本地化自己的字符串,並將其添加到ShareKit Localizable.strings文件的底部比實現自己的本地化方案的工作。

BTW,來檢測一下語言設備當前設置爲可以使用:

NSArray *preferedLocalizations = [[NSBundle mainBundle] preferredLocalizations]; 

這給你兩個字母的語言代碼字符串數組。索引0處的項目是當前選擇的語言。如果您需要根據語言邏輯的決定,這可能是有幫助的。

相關問題