ios我想通过stringWithFormat进行本地化

时间:2013-07-31 03:49:58

标签: ios localization

我想通过这个本地化stringWithFormat:

NSString *string = [NSString stringWithFormat:@"Login %d in",2013];
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@string, nil)
                                                        message:@"Message"
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"sure", nil];
    [alertView show];

我也在Localizable.string中写这个:

"Login %d in" = "LOGIN %d IN";

它不起作用。你能帮我吗?谢谢...

1 个答案:

答案 0 :(得分:3)

您必须本地化格式字符串本身。做其他任何事情都没有意义,因为字符串在格式化时几乎可以是任何东西(毕竟这是格式字符串的目的)。出于好奇,你没有看过像

这样的东西
"%d seconds remaining" = "%d secondes restants";
"Hello, %@!" = "Bonjour, %@ !";

在您使用的Localizable.strings应用程序文件中?

NSString *localizedFmt = NSLocalizedString(@"Login %d in", nil);
UIAlertView *av = [[UIAlertView alloc]
    initWithTitle:[NSString stringWithFormat:localizedFmt, 2013],
    // etc...
];

安全狂的通知:虽然这是 最常见且最简单的本地化格式化字符串的方法,但它并不完全安全。

攻击者可以将应用程序的上述Localizable.strings文件中的本地化格式字符串更改为虚假内容,例如,包含比stringWithFormat:具有参数(甚至不匹配)更多转换说明符的字符串说明符 - 将整数视为指针,任何人?),然后可以针对您的应用程序执行基于堆栈粉碎的攻击 - 所以要小心黑客。