12

这是真的?当你实例化一个 UIAlertButton 时,你必须为它传递一个明确的 Cancel 按钮标题,像这样:

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

这意味着如果你想要一个本地化的应用程序(当然你会这样做),你也必须本地化 Cancel 字符串,即使 Apple 显然已经有了一个规范的翻译。我真的被迫写这样的东西来处理它(或者这甚至可以吗)?

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 规定的单词的翻译(如“取消”或“确定”)的想法似乎同样荒谬。

4

1 回答 1

5

如您所料,不建议这样做,因为您的代码引入了一个未记录的、不受支持的依赖项,如果未来的 iOS 更新出现改变 Apple 本地化 UIButton 的方式(不太可能,但谁知道),这可能会破坏您的应用程序。

真的,“OK”和“Cancel”都不是难翻译的东西。如果您不希望翻译人员在您的应用程序本地化工作中为您重新本地化这些内容,那么您可以自己从 iOS 中检索这些内容(使用您的代码)并将翻译内容复制到您的.strings文件中,这样您就可以获得可靠的翻译副本从现在开始!

于 2012-05-18T08:22:28.530 回答