C++ 如何使用msgfmt验证格式字符串中的位置符号占位符?

C++ 如何使用msgfmt验证格式字符串中的位置符号占位符?,c++,c,msgfmt,C++,C,Msgfmt,在翻译文本中使用类似printf的格式字符串时,msgfmt--check检查翻译是否仍然包含占位符。例如,在以下代码上运行xgettext printf( gettext( "string: %s, int: %d" ), str, i ) 生成一个.po文件,该文件带有标记为c格式的msgid,其值为“字符串:%s,整数:%d”。如果译者在翻译过程中忘记了%s或%d,则msgfmt投诉: “msgid”和“msgstr”中的格式规范数不匹配 不幸的是,此检查不适用于使用位置符号格式化字符串

在翻译文本中使用类似printf的格式字符串时,
msgfmt--check
检查翻译是否仍然包含占位符。例如,在以下代码上运行
xgettext

printf( gettext( "string: %s, int: %d" ), str, i )
生成一个
.po
文件,该文件带有标记为
c格式的
msgid
,其值为
“字符串:%s,整数:%d”
。如果译者在翻译过程中忘记了
%s
%d
,则
msgfmt
投诉:

“msgid”和“msgstr”中的格式规范数不匹配

不幸的是,此检查不适用于使用位置符号格式化字符串,如

boost::format( gettext( "string: %1%, int %2%" ) ) % str % i

如何验证翻译中是否存在位置符号占位符?

不是直接答案,但以下解决方案可能会解决您的问题:

boost::format(gettext(“字符串:%1$s,int%2$d”))%str%i;