Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSLocalizedString:为什么GenString向我的格式说明符添加1$和2$?_Iphone_Objective C_Cocoa_Ipad_Localization - Fatal编程技术网

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

Iphone NSLocalizedString:为什么GenString向我的格式说明符添加1$和2$?,iphone,objective-c,cocoa,ipad,localization,Iphone,Objective C,Cocoa,Ipad,Localization,我正在通过使用genstrings Classes/*.m生成Localizable.strings文件来本地化我的iPad/iPhone应用程序。大多数字符串工作得很好,我得到了预期的输出,但是有些字符串 GySncs在我的格式说明符的中间添加了 1 $ 或 1 $ ,例如: /* No comment provided by engineer. */ "%@%i" = "%1$@%2$i"; /* No comment provided by engineer. */ "%@: %i" =

我正在通过使用
genstrings Classes/*.m
生成
Localizable.strings
文件来本地化我的iPad/iPhone应用程序。大多数字符串工作得很好,我得到了预期的输出,但是有些字符串<代码> GySncs<代码>在我的格式说明符的中间添加了<代码> 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$
等总是在同一个位置

我可以保留它们,并且字符串的格式正确,但我一直在手动删除它们,因为我不确定
$
将做什么。这是恼人的,必须通过手动更新字符串(加上我可能会错过一个最终)


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

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


换句话说,它们可以安全地保留或删除,并且可以方便地进行其他语言的自然翻译。

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

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

-无位置参数


到genstrings。

你可能会变得富有!:D