Использование стандартных переводов Apple для кнопки Alert?

Это правда? Когда вы создаете экземпляр UIAlertButton, вы должны передать ему явное название кнопки "Отмена" , например:

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

Это означает, что если вы хотите локализованное приложение (которое, конечно же, вы это делаете), вы также должны локализовать строку "Отмена" , хотя 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 (например, "Отмена" или "ОК" ), кажется столь же абсурдной.

Ответ 1

Как вы ожидаете, это не рекомендуется, так как ваш код вводит недокументированную неподдерживаемую зависимость, которая может разорвать ваше приложение, если появится будущее iOS-обновление, которое изменит, как Apple локализует свой UIButton (не очень вероятно, но кто знает).

Действительно, "ОК" и "Отмена" не сложно переделать. Если вы не хотите, чтобы переводчик повторно локализовал их для вас как часть вашей работы по локализации приложения, вы можете извлечь их из iOS (используя свой код) и скопировать перевод в свой .strings файл, Теперь у вас будет надежная копия перевода!