我正在使用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$
等总是在同一个位置。
我可以留下它们,字符串使用正确的格式,但我一直在手动删除它们,因为我不确定$
会做什么。不得不经历并手动更新字符串很烦人(加上我最终可能会错过一个)。
我认为它可能是文本编码问题?或者我可以安全地将它们留在我的琴弦中并忽略它们吗?
答案 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)