2013-04-03 22 views
3

我有一個應用程序擁有基於目標的不同字符串集合。是否有可能有一個基本字符串文件,然後在另一個只覆蓋幾個鍵?是否有可能在Xcode中爲字符串文件創建類似結構的繼承?

例如,如果我的基本文件是這樣的:

"some-string" = "base-value" 
"other-string" = "1234" 

那麼對於我的目標之一,關聯具有以下另一個字符串文件:

"some-string" = "overridden-value" 

所以,如果我跑了目標包含額外的字符串文件,輸出將是:

NSLocalizedString(@"some-string", nil) => "overridden value" 
NSLocalizedString(@"other-string", nil) => "1234" 

我會非常喜歡沒有t在重載的字符串文件中拋出未修改的字符串。任何幫助將不勝感激。

回答

4

如何

NSLocalizedStringWithDefaultValue(@"some-string", 
            @"additionalStringsTableName", 
            [NSBundle mainBundle], 
            NSLocalizedString(@"some-string", nil), 
            nil); 

在壓倒一切的字符串文件中進行查找。如果失敗,則返回默認的NSLocalizedString()結果。

這是一個相當醜陋的東西,遍佈你的代碼。所以你可能想要使用一些宏魔法來縮短通話時間。例如:

#define MyLocalizedString(key, comment) NSLocalizedStringWithDefaultValue(key, 
            OVERRIDE_TABLE_NAME, 
            [NSBundle mainBundle], 
            NSLocalizedString(key, comment), 
            comment); 

(爲了清晰起見,在多行上書寫)。然後,您可以將OVERRIDE_TABLE_NAME定義爲編譯器選項。

+0

嗨哈爾,謝謝你的迴應。這絕對是一種選擇,但我希望有一個更簡單的內置機制來解決這個問題。這種方法的主要問題是它需要應用程序知道附加的字符串文件。不是一個大問題 - 它可以通過包含與目標關聯的字符串文件名的參數進行修正。 – Brandon 2013-04-03 19:56:52

相關問題