C++ 如何使用msgfmt验证格式字符串中的位置符号占位符?
在翻译文本中使用类似printf的格式字符串时,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”中的格式规范数不匹配 不幸的是,此检查不适用于使用位置符号格式化字符串
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;