私は現在、特定の政府ガイドライン(医療とウェルネスの言葉遣い)のために、アプリケーションの言語を変更する必要があるクライアントを支援しています。彼らのアプリは巨大で、すべての文字列はコードに含まれています。つまり、(stringWithFormat/hardcoded)、外部テーブルにはありません。これは大きな手作業になります。NSStringサブクラスまたはラッパークラスまたはカテゴリ
未定義の時点で、クライアントは、現在の言葉に戻るという承認を受け、文字列を元に戻したいと考えています。変更のほとんどは、文字通り問題の少ない単語に1つの問題のある単語を切り替えることになります。
私は、実行時に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のをサブクラス化する試みを始めたが、私のソリューションは、クラスクラスタをサブクラス化した場合、クラスクラスタをサブクラス化するので、私は私の問題を理解していなかったことを言ってStackOverflowのポストを直撃ほとんど行われていません。
最後のオプション(ラッパー):
私の最後の試みは、ラッパークラスが、敗北手動でアプリ内の各文字列を模索することを避けるためにした本来の目的のようなものを書くことであろう。
私はもうこの問題にどのように近づくべきかわかりません。コアクラスの1つに機能を追加/オーバーライドする必要がある場合はどうすればよいですか。
関連:[NSArrayのか、他のクラスクラスタモンキーパッチする方法はありますかスウィズル?]この解決策は、しかし、働いていたほとんどの部分について(http://stackoverflow.com/q/11751473) –