2014年2月8日土曜日

Launch Argumentsでローカライズ文字列を伸長した時と同じ効果のメソッドを作る

以下の記事で、Launch Argumentsで、NSLocalizedStringで得られる文字列を2〜3回に繰り返して、長い文字列になった時のUI崩れをチェックできるオブションが紹介されていて、目から鱗が落ちました。

日本語は文字数としてはかなり圧縮できますが、英語では文字数が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 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...