如何使用msgfmt验证格式字符串中的位置表示法占位符?

时间:2017-03-31 07:19:23

标签: c++ c msgfmt

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

printf( gettext( "string: %s, int: %d" ), str, i )

生成.po个文件,其中msgid标记为c-format,其值为"string: %s, int: %d"。如果翻译人员在翻译中忘记%s%d,则msgfmt会抱怨:

  

' msgid'中的格式规范数量和' msgstr'

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

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

如何在翻译中验证位置表示法占位符的存在?

1 个答案:

答案 0 :(得分:0)

不是直接回答,但也许以下解决方案可以解决您的问题:

boost::format( gettext( "string: %1$s, int %2$d" ) ) % str % i;