首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSLocalizedString:为什么genstrings要在我的格式说明符中添加1$和2$?

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

Stack Overflow用户
提问于 2011-01-06 05:27:46
回答 3查看 2.7K关注 0票数 9

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

代码语言:javascript
复制
/* 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$的etc总是在相同的位置。

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

我在想这可能是文本编码的问题?或者,我可以安全地将它们留在字符串中,然后忽略它们吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-06 05:30:00

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

换句话说,它们可以安全地保留或删除,而且在将它们自然地翻译成其他语言时也会派上用场。

票数 15
EN

Stack Overflow用户

发布于 2011-01-06 05:30:58

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

代码语言:javascript
复制
printf("%s %s\n", "foo", "bar");
printf("%1$s %2$s\n", "foo", "bar");
printf("%2$s %1$s\n", "foo", "bar");

输出:

代码语言:javascript
复制
foo bar
foo bar
bar foo
票数 7
EN

Stack Overflow用户

发布于 2011-07-08 00:18:01

如果您不喜欢位置参数的生成,可以通过传递

-noPositionalParameters

到基因字符串。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4609389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档