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



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

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

生成一个.po文件,其msgid标记为 c-format,其值为 "string: %s, int: %d" 。如果译者忘记了翻译中的%s%dmsgfmt会抱怨:

">

msgid"和"msgstr"中的格式规范数量不匹配

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

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

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

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

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

最新更新