我正在从事一个跨国项目,其中日志的目标受众可能来自两个国家。因此,登录一种以上的语言变得越来越重要,我正在考虑在每次记录某些内容时根据语言写入 2 个不同的日志文件夹,但我也想知道是否有一些开箱即用的功能正在出现使用 log4cpp 之类的日志框架?
4 回答
正如其他评论者所提到的,听起来你正在寻找进行多语言日志记录的错误轨道。
我的建议是使用英语(这是技术信息的标准,我猜这是您最熟悉的语言),并确保您使用的语言清晰、语法正确且不含糊。然后,如果其中一位技术人员无法理解它,他们可以通过谷歌翻译等机器翻译引擎轻松高效地运行它。或者他们确实可以处理日志并通过谷歌翻译运行所有内容以附加翻译文本,特别是如果您注释日志以标记语言内容。
Assuming that the input language is well-written, machine transation usually gives a good result which the end user can understand. If the message isn't clear, has typos or abbreviations, then that's where machine translation fails spectacularly.
由于其中涉及文件打开、查找和写入操作,写入日志自然会降低执行速度。
这是许多开发人员和架构师建议在不同级别编写日志的主要原因之一。随着级别的增加增加日志条目的深度,以更好地追踪问题。在更高级别,您会注意到由于生成更多日志条目,您的进程速度会下降。
而是建议您使用可以从一种语言翻译成另一种语言的服务。我确信有免费或付费的图书馆可以进行这种翻译。您可以创建一个在后台运行的小型实用程序,并在进程空闲时间执行此转换。
一个建议是您可以使用不同的进程/线程来监听您的日志消息,您可以从那里记录它..
这减少了主进程/线程中的 I/O 日志记录时间,您可以在那里进行与日志记录语言相关的所有更改..
对于多语言支持,我认为您可以尝试使用 widechar 字符串编写..虽然我不确定..
使用 C++ 记录本地化的最佳方法
安装 Qt 4并对字符串使用 QObject::tr/tr() 宏。用您想要的任何语言编写字符串。雇用/获取翻译人员使用 QT Linguist 本地化字符串。
请注意,完美的翻译是不可能的,所以即使你的翻译是天才,也会有很多“有趣”的误解。因此,为编程团队选择主要语言可能是一个更好的主意。
- 编辑 -
之前没有注意到这部分:
用一种以上的语言
解决它的一种方法是实现日志阅读器。如果字符串被格式化,您可以转储消息 ID(由某种宏生成)和字符串参数,而不是编写纯文本消息。“日志阅读器”将允许用户在查看日志文件时选择所需的语言,并使用类似于 QTranslator 的机制根据他们的 ids/arguments 翻译消息。这种方法的好处是您以后可以添加更多语言 - 因此可以重新翻译旧日志。不好的是,这种格式对于“普通人”来说将更难阅读,尽管除了消息 ID 和参数之外,您还可以添加纯文本消息,并且您需要编写日志查看器。
Qt 4 实现了这个框架的大部分(有将变体转储到文本/数据流中的例程,等等)以及翻译工具。有关更多信息,请参阅QTranslator文档和语言学家手册。