2012-03-19 5 views
1

人々はNSLocalizedStringのコメントをどうやって書くのですか?私たちが従うべき標準のガイドラインはありますか?私が持っている場合たとえば:NSLocalizedStringのコメントの基準

NSLocalizedString(@"Tap your account to sign in", @""); 

、私のコメントは、「アカウントをタップしてサインインするようにユーザーに要求するテキスト」で、これは少し不明瞭ですか?それはかなり自明の場合はコメントを残す必要がありますか?

もう1つの質問は、LoggingInに設定されたテキストを持つProgressHUDがある場合、アプリケーションプロジェクト間で簡単に同期する方法は、ローカライズする必要があることです。NSLocalizedString (@"Logging In", @"some description");実行するツールはありますかそのような仕事は?

+1

は、MacアプリLinguanを見てみましょう:-)「view_settings_title」、カスタムLocalizedStringHandlerコメントを返します、すなわち「設定」

ほらためのキー==値から - 私が聞いたからアプリのローカライズに役立ちます。 – mattjgalloway

答えて

3

genstringsコマンドラインユーティリティを使用すると、2番目のパラメータは文字列ファイルに自動的に表示されるコメントで、ソースコードをスキャンして文字列ファイルを作成できます。

このコメントはローカライザーに役立ちます。たとえば:

NSLocalizedString(@"Save",@"Title of the Save button in the theme saving dialog"); 

あなたがgenstringsを実行すると、これはこのようなファイルのLocalizable.stringsにエントリが生成されます:

/* Title of the Save button in the theme saving dialog */ 
"Save" = "Save"; 

あなたの具体的な例では、それは、コメントが何を意味するのかかなり明白だが文脈ではない。

NSLocalizedString(@"Tap your account to sign in", @"Instruct user to tap their account to sign in (Facebook account, main game preferences)"); 

このように、ローカライザーはあなたが参照しているボタンを正確に知ることができます。 (これはthis similar questionへの私の答えの修正版です)

NSLocalizedString(@"Share", @"Label for sharing button on main image editing screen"); 

これがさらに重要に「共有」またはいくつかの他の非特定のラベルラベル付きボタンのためになります。

+0

+1 ** genstrings **!あなたは私に多くの時間を救った! :) – Chris

0

Rob Kenigerが正しいです。私もこれを追加したいと思います: 2番目のパラメータとして使用することができます.. デフォルト値 !!

(NSLocalizedStringWithDefaultValueが、私はこのソリューションを提案した理由です、genstringでは正常に動作しません)

ここでは、デフォルト値としてコメントを使用NSLocalizedStringを使用して、私のカスタム実装です:

1。あなたの事前コンパイル済みヘッダー(.PCHファイル)では、 'NSLocalizedString' マクロを再定義:

// cutom NSLocalizedString that use macro comment as default value 
#import "LocalizationHandlerUtil.h" 

#undef NSLocalizedString 
#define NSLocalizedString(key,_comment) [[LocalizationHandlerUtil singleton] localizedString:key comment:_comment] 

2.

#import "LocalizationHandlerUtil.h" 

@implementation LocalizationHandlerUtil 

static LocalizationHandlerUtil * singleton = nil; 

+ (LocalizationHandlerUtil *)singleton 
{ 
    return singleton; 
} 

__attribute__((constructor)) 
static void staticInit_singleton() 
{ 
    singleton = [[LocalizationHandlerUtil alloc] init]; 
} 

- (NSString *)localizedString:(NSString *)key comment:(NSString *)comment 
{ 
    // default localized string loading 
    NSString * localizedString = [[NSBundle mainBundle] localizedStringForKey:key value:key table:nil]; 

    // if (value == key) and comment is not nil -> returns comment 
    if([localizedString isEqualToString:key] && comment !=nil) 
     return comment; 

    return localizedString; 
} 

@end 

3.それを使用してローカライズハンドラを実装するクラスを作成します!

App Build PhasesにRunスクリプトを追加して、Localizable.stringsファイルが各ビルドで更新されるようにしてください。あなたのコードでは、この新しい行を追加しますので、

Shell: /bin/sh 
Shell script content: find . -name \*.m | xargs genstrings -o MyClassesFolder 

self.title = NSLocalizedString(@"view_settings_title", @"Settings"); 

私のビルドフェーズのスクリプトは、シェルスクリプトである:、新しいローカライズされた文字列は、あなたのLocalized.stringsファイルに追加されます

/* Settings */ 
"view_settings_title" = "view_settings_title"; 

はその後、ビルドを実行する、あなたの./Localizable.scriptsファイルは、この新しい行が含まれますそして

関連する問題