1

我想通过以下方式本地化 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";

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

4

1 回答 1

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:参数更多的转换说明符的字符串(甚至不匹配的说明符 - 将整数视为指针,任何人?),然后可以对您的应用程序进行基于堆栈粉碎的攻击- 所以要提防黑客。

于 2013-07-31T03:59:14.260 回答