有没有国际化c++流的系统?
Is there a system for internationalizing C++ streams?
我正在研究如何国际化我的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
风格的解决方案,我提出的问题?
格式可以提供帮助:
cout << boost::format("There are %d lines in '%s'.") % numlines % filename;
或
cout << boost::format("There are %1% lines in '%2%'.") % numlines % filename;
相关文章:
- C++,系统无法执行指定的程序
- 在UNIX系统中使用DIR查找文件的字节大小
- 错误处理.将系统错误代码映射到泛型
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在C++游戏中与库存系统作斗争
- 文件系统:复制功能的速度秘诀是什么
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 在gtest.中使用fff.h模拟系统API
- 如何制作无限制照明系统
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 如何传递多个 std::文件系统选项?
- 遍历顺序由 std::文件系统directory_iterator给出
- C++系统找不到指定的文件错误
- 系统参数信息A 与 SPI_GETMOUSE 返回 0
- libstdc++ 文件系统中未初始化的用法?
- 如何在ECS框架中更新组件数据和通知系统
- boost::文件系统::recursive_directory_iterator多线程安全
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 有没有国际化c++流的系统?