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

标签 c++ c msgfmt

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

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

生成一个 .po 文件,其中 msgid 标记为 c-format 并且其值为 "string: %s,整数:%d"。如果翻译者在翻译中忘记了 %s%d,则 msgfmt 会提示:

number of format specifications in 'msgid' and 'msgstr' does not match

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

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

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

最佳答案

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

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

关于c++ - 如何使用 msgfmt 验证格式字符串中的位置符号占位符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43134771/

相关文章:

c++ - C 与 C++ 中的数组衰减规则?

bash - 如何将 .po 文件编译为 .mo 文件,msgfmt 不起作用

linux - 如何告诉 bash 从自定义位置获取 gettext .mo 文件?

c++ - 无法在 C++ 中删除 char 指针

c - 我们如何使用 printf 打印字符串

c++ - 将 "unsigned char *"转换为 "char *"(和字符串)

c - scanf 导致段错误

python - 如何将 python 脚本通过管道传递给命令 (boost::program::options)

c++ - 未定义模板的隐式实例化