由於某些政府指南(醫療與健康措辭),我目前正在幫助客戶需要更改其應用程序中的語言。他們的應用程序非常龐大,所有的字符串都包含在代碼中,即(stringWithFormat/hardcoded),它們都不在外部表中。這意味着這將是一項巨大的手動任務。NSString子類或包裝類或類別
在未來一個未定的時間點,客戶相信他們將獲得批准返回到他們當前的措辭,並希望將字符串切換回來。從字面上看,大部分的變化都是將一個有問題的單詞轉換成一個不太成問題的單詞。
我想,也許如果我可以在運行時基於bool開關更改字符串,它可能會消除所涉及的手動工作,並且可以讓我在需要時切換回語言。
第一次嘗試:
+ (instancetype)stringWithFormat:(NSString *)format, ...
{
va_list args;
va_start(args,format);
//todo check flag if we're changing the language
//todo replace problematic word from 'format'
NSString *result = [NSString stringWithFormat:format,args];
return result;
}
我第一次迅速編寫了一個類別覆蓋stringWithFormat更換有問題的話。我忘了我會失去stringWithFormat的原始實現。這導致無盡的遞歸。
下一次嘗試(子類):
我開始試圖子類的NSString打了一個計算器後說,如果我的解決辦法是繼承一個類簇,那麼我沒有因爲繼承類簇明白我的問題幾乎從未完成。
最後一個選項(包裝):
我的最後一次嘗試是寫一個包裝類,但那種失敗的初衷是要求避免手動尋求在應用程序的每個字符串。
我不太確定如何解決這個問題了。如果我需要爲其中一個核心類添加/覆蓋功能,該怎麼辦?
相關:有沒有什麼辦法猴補丁或調酒一個NSArray或其他類簇?](http://stackoverflow.com/q/11751473) –