NSLocalizedString:为什么genstrings为我的格式说明符添加1 $和2 $?

时间:2011-01-05 21:27:46

标签: iphone objective-c cocoa ipad localization

我正在使用genstrings Classes/*.m生成Localizable.strings文件来本地化我的iPad / iPhone应用。大多数字符串工作正常,我得到了预期的输出,但有些字符串genstrings正在我的格式说明符中添加1$1$,如下所示:

/* No comment provided by engineer. */
"%@%i" = "%1$@%2$i";

/* No comment provided by engineer. */
"%@: %i" = "%1$@: %2$i";

/* No comment provided by engineer. */
"%@" = "%@";

我没有遇到其他应用的问题,因为你可以看到它不一致。但它似乎并不是随机的,因为当我再次在同一个类文件上运行genstrings时,1$等总是在同一个位置。

我可以留下它们,字符串使用正确的格式,但我一直在手动删除它们,因为我不确定$会做什么。不得不经历并手动更新字符串很烦人(加上我最终可能会错过一个)。

我认为它可能是文本编码问题?或者我可以安全地将它们留在我的琴弦中并忽略它们吗?

3 个答案:

答案 0 :(得分:15)

这些数字指的是替换值的参数位置。例如,%2$i表示“用第二个参数替换它,它应该是一个整数。”当本地化使用不同单词排列的语言时,这很有用,因为可以按照与英语不同的顺序替换。

换句话说,他们可以安全地离开或删除,并且它们可以派上用场,用于翻译其他语言。

答案 1 :(得分:6)

N$告诉printf - 样式函数和方法格式字符串字段的严格顺序。这样,当本地化为订单不同的语言时,您不必修改代码 - 只需格式字符串:

printf("%s %s\n", "foo", "bar");
printf("%1$s %2$s\n", "foo", "bar");
printf("%2$s %1$s\n", "foo", "bar");

输出:

foo bar
foo bar
bar foo

答案 2 :(得分:3)