3

我正在开发一个应用程序,它有很多文本和不同的模块,可以包含或不包含在每个构建中。

对于每个保存的项目,我们会自动生成一份包含所有详细信息的报告(即,该项目中使用的算法的描述等)。目前我们将所有文本作为字符串嵌入到源代码中,我们还通过 po 和 mo 文件支持不同的语言。

该系统的优点是动态生成文档和报告文件非常容易。不好的一点是源代码中有很多文本很难看,格式(即使用html)不舒服,文本编辑很困难,拼写检查不方便,翻译也很糟糕。

所以,最后一个问题是:你是宁愿在代码中嵌入文档还是为不同的语言编写外部文档文件(例如 html)并在运行时解析它们?显然是软件的核心文本,我们这样的消息框无论如何都会留在代码中。

如果重要的话,我正在使用 wxWidgets 使用 C++。

4

5 回答 5

5

我认为所有可能在不同版本的代码之间发生变化的文本都应该保存在单独的属性文件中。您可以构建一种机制,将消息 id 映射到属性文件中的正确字符串,例如将英语和西班牙语属性文件中的映射 id 15 分别映射到“search”或“busca”。因此,属性文件可能是带有 id-message 对的 XML 或 CSV。运行程序时,您将属性文件作为参数提供给它。启动时,它首先将属性字符串加载到地图中,然后您将使用 property[15] 而不是字符串“search”。当然,您可以使用文本标签而不是数字 id。我还会考虑自动从属性文件生成文档,也许使用 CSS。这使得编辑和翻译消息变得更加容易。

于 2008-11-04T12:11:08.093 回答
1

如果我有很多文本要显示,我通常将其存储在应用程序外部的 XML 中,并根据需要进行读取。我认为这也适用于文档。您可以简单地拥有一个单独的样式表来从中生成文档。本地化您的应用程序将成为单独维护备用翻译的问题——可以在内部作为 XML 文件中的单独节点完成,也可以通过为每种语言维护不同的 XML 文件在组织上完成。

虽然这种方法会导致您的程序需要更多时间来启动,但我认为客户最终会获胜,因为:

  1. 您的程序文本更清晰(更易于维护)
  2. 您不必被迫修改代码来更改文本
  3. 您可以轻松支持更多翻译,让更多人使用您的产品。
于 2008-11-04T12:19:46.063 回答
1

其他答案触及了重点,所以我将指出这一点:

如果您正在做简单的一对一配对,例如:

#textId  "the actual text"

然后 XML 是多余的。解析速度会更慢,并且在磁盘上会更大。像 CSV 甚至非常简单的自定义格式之类的东西可能是最好的。

于 2008-11-04T12:27:54.580 回答
0

根据使用不同语言的个人经验,我发现每个国家/地区的特殊文本文件是最佳解决方案。您必须注意不同语言中相同概念的长度差异。您还可以在安装软件之前打印文本文件并将其提供给翻译器。每个文本或文本的一部分都有一个数字作为键,可以根据需要使用,一起移动等。您还可以提供特殊字段来将可变数据插入到文本中,如果您只使用一个子程序来显示或打印文本,其中这是必需的。我自己以这种方式在世界各地以 7 种不同的语言安装了相同的软件。

于 2008-11-04T13:20:06.303 回答
0

我只是使用一个简单的制表符分隔的文本文件。它可以很容易地加载到 Excel 中并进行编辑。它也可以是任何格式,如 iso-8859-1、utf-8 或 utf-16 等。第一列用于 ID,然后每个后续列用于一种语言。

然后,我通过预处理器运行文本文件,该预处理器在 text.h 文件中生成枚举列表,您可以为文本生成二进制文件,或生成 cpp 文件并将其直接包含到二进制文件中。您还可以在此时更改编码以匹配您在程序中需要的内容。

好处是:

如果缺少字符串,则会出现编译错误。

添加新字符串时,您不必担心忘记为所有语言添加它。

缺点是:

编辑文本文件后必须重新编译。

由于大多数差异工具只能逐行工作,因此合并许多用户所做的更改更加困难。

于 2008-11-04T22:25:00.837 回答