12

これは本当ですか?UIAlertButtonをインスタンス化するときは、次のように、[キャンセル]ボタンの明示的なタイトルを渡す必要があります。

UIAlertView *av = 
    [[UIAlertView alloc] 
         initWithTitle:@"Error" 
         message:err.localizedDescription 
         delegate:nil 
         cancelButtonTitle:@"Cancel" 
         otherButtonTitles:nil];

つまり、ローカライズされたアプリが必要な場合(もちろんそうします)、Appleがすでに正規の翻訳を取得している場合でも、Cancel文字列もローカライズする必要があります。私は本当にそれを処理するためにこのようなものを書くことを余儀なくされていますか(またはこれはOKです)?

NSBundle* uikitBundle = [NSBundle bundleForClass:[UIButton class]];
UIAlertView *av = 
    [[UIAlertView alloc] 
         initWithTitle:NSLocalizedString(@"Error", @"Title for Alert box when error occurs") 
         message:err.localizedDescription 
         delegate:nil 
         cancelButtonTitle:NSLocalizedStringFromTableInBundle(@"Cancel", @"Localizable", uikitBundle, nil) 
         otherButtonTitles:nil];

これは私には恐ろしいように見えますが、AppleのHIGによって義務付けられている単語の翻訳を自分で維持しなければならないという考え(「キャンセル」や「OK」など)も同様にばかげているようです。

4

1 に答える 1

5

ご想像のとおり、これはお勧めできません。コードが文書化されていない、サポートされていない依存関係を導入し、AppleがUIButtonをローカライズする方法を変更する将来のiOSアップデートが来ると、アプリを壊す可能性があります(可能性は低いですが、誰が知っていますか)。

本当に、「OK」と「キャンセル」は翻訳するのが難しいことではありません。翻訳者がアプリのローカリゼーション作業の一環としてこれらを再ローカライズすることを望まない場合は、iOSから(コードを使用して)自分でこれらを取得し、翻訳を.stringsファイルにコピーして、これからの翻訳の信頼できるコピー!

于 2012-05-18T08:22:28.530 に答える