日本語は文字数としてはかなり圧縮できますが、英語では文字数が2〜3倍ぐらい、中には4〜5倍ぐらいにもなる言語があるということですから、ローカライズには気をつけたいものです。
しかし、Launch ArgumentsはXcodeからアプリを起動しないと使えないので、テスターにチェックしてもらう時などは困ります。
それで同様の機能をメソッド化してしまった方が良いだろうと思って作ってみました。
以下の、repeatLocalizedString:メソッドと、repeatString:repeat:メソッドを適当なクラスに組み入れて使用します。
そして、今までNSLocalizedString()を使っていたところを、repeatLocalizedStringのメソッドの呼び出しに置き換えます。 repeatLocalizedString:メソッドの呼び出しを、適当なマクロにしてしまえば、NSLocalizedString()と同じように使えます。(以下ソース参照)
_localizedStringRepeatCountはクラス変数として登録しておき、リピートする回数を入れておきます。
デバッグ用設定画面から設定できるようにしておけば、動的に文字列の繰り返し数をコントロールできて便利ですよ。
// 呼び出しマクロ例 #define RepeatLocalizedString(key) ([[SupportController sharedSupportController] repeatLocalizedString:key]) @implementation SupportController - (NSString*)repeatLocalizedString:(NSString*)key { NSString *str = NSLocalizedString(key,@""); return ([self repeatString:str repeat:_localizedStringRepeatCount]); } - (NSString*)repeatString:(NSString*)str repeat:(unsigned int)repeat { if (repeat==0) { // リピート0回、すなわちリピートしない return str; } NSString *dst = [NSString stringWithString:str]; for (unsigned int i=0 ; i<repeat ; ++i) { dst = [NSString stringWithFormat:@"%@ %@",dst,str]; } return dst; } @end
0 件のコメント:
コメントを投稿