我正在研究如何使我的C++项目国际化,并且我不知道如何处理流式文本的翻译,这些文本穿插了非字符串值.到目前为止,我发现的唯一一个页面甚至提到这将是这个C++ FQA页面,但不幸的是,该页面对提供任何解决方案都不太感兴趣.还有从2000年这个Boost邮件列表线程不会出现去任何地方.
例如,对于这个C风格的printf
声明:
printf("There are %d lines in '%s'.", numlines, filename);
将整个消息包装在某种翻译函数中是很简单的,例如gettext的各种函数,并允许文本及其非文字组件根据需要移动.如果您可以访问POSIX版本printf
(或其他一些提供printf
格式改进的库),您甚至可以根据需要以不同的顺序排列值.
但是,对于等效的基于C++流的语句:
std::cout << "There are " << numlines << "lines in '" << filename << "'.";
我还没有找到一种方法来标记整个翻译消息.您可以在适当的函数中包装每个字符串,但这需要翻译人员知道这三个字符串都是一条消息的一部分,以及它们之间出现的内容.此外,至少需要告知一些i18n解决方案,对于其中该文字内容根据上下文而变化的语言,相同字符串文字的其他出现是不同的.并且忘记了必须重新排列非字符串文字值的情况.
所以我的问题是,是否存在支持流媒体操作使用的国际化解决方案,还是只有printf
我提出的问题的解决方案?