我正在开发一个应用程序,它有很多文本,也有不同的模块,可以包含或不包含在每个版本中。
对于每个已保存的项目,我们会自动生成一份包含所有详细信息的报告(即该项目中使用的算法的描述等)。目前,我们将所有文本作为字符串嵌入到源代码中,我们还通过po和mo文件支持不同的语言。
系统的优点是动态生成文档和报告文件非常容易。 不好的一点是,源代码中有大量文本是丑陋的,并且格式化(即使用html)不舒服,编辑文本很困难,没有简单的拼写检查和翻译可怕。
所以,最后一个问题是:你宁愿在代码中嵌入文档还是为不同语言编写外部文档文件(例如html)并在运行时解析它们?显然,软件的核心文本,例如我们的消息框无论如何都会保留在代码中。
如果重要,我正在使用wxWidgets在C ++中工作。
答案 0 :(得分:5)
我认为在不同版本的代码之间可能会发生变化的所有文本都应保存在单独的属性文件中。您可以构建一种机制,将消息ID映射到属性文件中的正确字符串,例如分别在英语和西班牙语属性文件中将map id 15映射到“search”或“busca”。因此,属性文件可以是具有id-message对的XML或CSV。 运行程序时,将为其提供属性文件作为参数。 当它启动时,它首先将属性字符串加载到地图中,然后您将使用 property [15]而不是字符串“search”。当然,您可以使用文本标签而不是数字ID。 我还会考虑自动生成属性文件中的文档,也许使用CSS。这使得编辑和翻译消息变得更加容易。
答案 1 :(得分:1)
如果要显示大量文本,我通常会将其存储在应用程序外部的XML中,并根据需要进行读取。我认为这对文档也很有用。您可以简单地使用单独的样式表来生成文档。然后,本地化您的应用程序将成为单独维护备用翻译的问题 - 可以在内部作为XML文件中的单独节点完成,也可以通过为每种语言维护不同的XML文件来组织。
虽然这种方法会让您的程序花费更多时间来启动,但我认为客户最终会获胜,因为:
答案 2 :(得分:1)
其他答案点击了重点,所以我只想指出:
如果你做一对一的简单,如:
#textId "the actual text"
然后XML太过分了。解析起来会慢一点,磁盘上解析起来会更大。像CSV或甚至非常简单的自定义格式可能是最好的。
答案 3 :(得分:0)
根据使用不同语言的个人经验,我发现每个国家/地区的特殊文本文件是最佳解决方案。您必须小心不同语言中相同概念的长度差异。您还可以在安装软件之前打印文本文件并将其转换为翻译方式。每个文本或部分文本都有一个数字作为键,可以根据需要使用,一起移动等。如果您只使用一个子程序来显示或打印文本,您还可以提供特殊字段将可变数据插入到文本中这是必需的。我自己用这种方式在世界各地以7种不同的语言安装了相同的软件。
答案 4 :(得分:0)
我只使用一个简单的制表符分隔文本文件。它可以加载到Excel中并且非常容易编辑。它也可以是iso-8859-1,utf-8或utf-16等任何格式。第一列用于ID,然后每个后续列用于语言。
然后我通过预处理器运行文本文件,该预处理器在text.h文件中生成枚举列表,您可以为文本或cpp文件生成二进制文件,并将其直接包含在二进制文件中。您还可以在此时更改编码以匹配程序中所需的编码。
好处是:
如果缺少字符串,则会出现编译错误。
当您添加新字符串时,您不必担心忘记为所有语言添加它。
缺点是:
编辑文本文件后必须重新编译。
合并许多用户所做的更改比较困难,因为大多数diff工具只能逐行工作。