DHIS 2的本地化¶
DHIS 2本地化概念¶
本地化涉及应用程序适应特定的环境 地点。在特定国家实施 DHIS 2 时,需要充足的资源 如果需要,应分配翻译和本地化应用程序。 用户界面元素、消息、布局、日期和内容的翻译 必须考虑时间格式、货币和其他方面。此外 用户界面本身的翻译,元数据内容是 数据库中包含的内容也必须考虑进行翻译。
接口翻译被编译到系统本身中,这样新的翻译 只能通过更新版本的 DHIS 2 来访问。 另一方面,数据库翻译特定于您的实施 并可以添加到您现有的 DHIS 2 实例。
这两个方面是独立管理的,并概述了流程和工具 以下。
用户界面本地化¶
总览¶
DHIS 2 通过以下方式支持用户界面的国际化 (i18n) 使用 Java 属性字符串和 PO 文件。使用Java属性文件 当消息来自后端 Java 服务器时,而 PO 文件 用于用 JavaScript 编写的前端应用程序。 DHIS 2 Android 应用程序使用特定的 XML 格式。
注意
翻译者无需担心资源文件格式不同; 翻译平台隐藏细节,只显示字符串 需要翻译。 例如下图显示了当 将资源翻译成法语。
DHIS 2 中的所有消息都应始终有一个英文字符串。 当用户选择一种给定语言时,该语言中就会出现翻译 语言,然后将显示翻译。但是,如果字符串中 缺少所需的语言,则将应用后备规则。如果出现以下情况: 两个给定的翻译,例如葡萄牙语和巴西葡萄牙语共享 常见消息,不需要在中执行完整翻译 变体语言。仅应翻译不同的消息。 然后按以下方式应用回退规则(假设用户已 选择巴西葡萄牙语作为他们的语言:
-
如果存在,则以巴西葡萄牙语显示消息。
-
如果变体语言中不存在,则使用葡萄牙语 消息(如果存在)。
-
如果基本语言或变体语言都没有消息, 选择最终的后备语言:英语。
重要**
有许多源字符串,如 "dd MMM yyyy 'to '",在 DHIS 2 的不同部分用于日期/时间格式化。 在 DHIS 2 的不同部分中用于日期/时间格式化。 不应翻译,因为它实际上是一个特殊的格式化 Java 或 JavaScript 用来插值或格式化字符串的特殊格式化字段。 在本例中,***可以翻译的部分值是 例如西班牙语中的 "a"。不应***翻译的特殊字符串是 翻译的特殊字符串是 "dd MMM yyyy"。如果这些日期格式模板 字符串,可能会导致应用程序出错!
重要**
某些特殊变量(如{0} )使用大括号。这 表示变量将被数字或其他 值。您必须将这种变量符号放在 正确的位置,并确保不要修改它。
翻译平台¶
DHIS2 现在使用 transifex 作为我们管理翻译的主要平台。 作为我们管理翻译的主要平台。您可以通过以下网址访问 DHIS2 资源 translate.dhis2.org,或直接访问 [https://explore.transifex.com/hisp-uio/]。
我如何为翻译做贡献?¶
注册为翻译¶
第一步是访问该项目。有两种方法可以做到这一点:
-
导航到平台并使用 transifex 创建帐户,然后
- 请求作为“DHIS 2 Core Apps”翻译团队的成员访问我们的组织“HISP UiO”。 特兰西菲克斯 这里有一些有用的说明: 翻译入门
-
向DHIS 2小组发送电子邮件,电子邮件地址为translate@dhis2.org,以请求访问权限。 请提供:
- 您希望我们授予访问权限的用户的姓名、电子邮件地址和翻译语言,以及
- 关于您为何有兴趣为 DHIS 2 翻译做出贡献的一些信息
编辑翻译¶
拥有翻译权限后,就可以开始通过transifex Web编辑器进行翻译了。
Transifex 这里有一个有用的指南: 使用网页编辑器在线翻译
这些项目尽可能一对一地代表DHIS 2应用程序。例如,** APP:Data Visualizer **项目包含Data Visualizer应用程序的翻译字符串。
我们针对DHIS2用户界面的transifex项目均从以下一项开始:
- ** APP:**表示项目包含特定应用程序的字符串
- ** APP-COMPONENT:**表示项目是应用程序使用的组件库
- ** ANDROID:**表示该项目是Andriod应用
另外,** APP:服务器端资源**包含一些字符串,供多个应用程序使用;即: - “数据输入” - “保养” - “数据透视表” - “报告”
在项目中,我们拥有资源,这些资源在源代码中表示本地化文件。为了支持具有相同本地化文件的多个DHIS2版本,_version_与文件的每个实例关联。因此,对于** APP:Data Visualizer **,资源列表在Web编辑器中如下所示:

即该应用程序只有一个源资源(en.pot),但我们添加了从 2.31 (v31) 到最新开发版本 (master) 的版本。版本显示在“类别”字段中,并且也作为资源名称的前缀可见,例如v31--en-pot。
注意
一般情况下,我们要求译者重点关注“master”资源;它通常包含以前版本中的所有字符串,并且当添加翻译时,平台也会填充以前版本上的匹配翻译。请参阅本地化 我们网站的部分。
提示
对于特定语言和 DHIS2 版本,您可以从 本地化 我们网站的部分。
系统何时会提供新翻译?¶
我们提供夜间服务,该服务从transifex平台提取新翻译并在源代码上打开提取请求。
该服务遍历所有项目和受支持的语言,并执行以下操作:
- 从Transifex中提取本地化文件(完成翻译20%以上的)
- 如果找到语言的更改,则在源代码上引发拉取请求
作为正常开发过程的一部分,对拉取请求进行审查并将其合并到代码库中。
信息
一般来说,添加到 transifex 的翻译将出现在所有受支持的 DHIS 2 版本的下一个可用稳定版本中
如果您需要确保您的翻译包含在下一个稳定版本中,请联系我们 (translate@dhis2.org) 说明您的需求,我们会让您知道我们可以做什么。
提示
在大多数情况下,您在 transifex 中添加的翻译应该会在几天内在我们的游戏服务器 (https://play.dhis2.org) 上的所有开发演示版本中可见。
如何添加新语言?¶
请通过电子邮件translate@dhis2.org或在[实践社区](https://community.dhis2.org/c/translation)与我们联系,我们将在Transifex的项目中添加该语言。
一旦该语言的资源翻译量超过 20%,就会开始被拉入系统。然后它们将 在开发演示版本中可见,并在未来的版本中可用。
注
DHIS 2 对元数据(数据库)本地化的管理独立于用户界面。请参阅下面的[元数据/数据库部分](#metadata-database-translations)。
使用数据存储进行自定义翻译¶
从 43.0 版的核心应用程序开始,可以使用数据存储为核心应用程序添加自定义翻译或文本覆盖选项。这可用于翻译尚未通过其他方式(Transifex)翻译的字符串,或以其他方式覆盖应用程序中的文本,例如使用特定域语言。
重要**
这是一项试验性功能,可能会有变动。
配置自定义翻译需要了解 Transifex 或在浏览器中使用一些简单的 API。
使用该功能需要三个步骤: 1. 从 "系统设置 "应用程序的 "外观 "部分启用自定义翻译 2. 在数据存储中配置控制器 3. 配置应用程序和本地语言文本重载
步骤 1.在 "系统设置 "应用程序中启用自定义翻译{ #step-1-enable-custom-translations-in-the-system-settings-app }¶
- 打开设置应用程序
- 导航至外观部分
- 选中页面底部标有 "启用自定义翻译 "的复选框
在系统设置中启用自定义翻译](./resources/images/ct-settings.png)
步骤 2.在数据存储{ #step-2-configure-the-controller-in-the-datastore } 中配置控制器¶
控制器充当指定应用程序的允许列表,以加载指定本地的自定义翻译。这是一种在应用程序中保存网络请求的机制,不会加载不需要的覆盖。
- 打开数据存储管理应用程序
- 单击 "新建命名空间 "以创建新的命名空间和键(如果尚未创建),并使用这些精确名称:命名空间 =
custom-translations。键 =controller.
创建自定义翻译命名空间](./resources/images/ct-controller-create.png)
- 查看 "custom-translations "命名空间,单击 "controller "密钥上的 "共享 "按钮(三个相连的点),然后编辑共享设置,这样公众只能查看该密钥,只有您和其他受信任的应用程序管理员才能编辑该密钥。单击保存。
重要**
配置这些共享设置非常重要,因为默认情况下数据存储是可公开编辑的,而这些翻译只能由有权限的用户编辑。
更改控制器共享设置](./resources/images/ct-controller-sharing.png)
- 在右侧的代码编辑器窗口中,将内容编辑为以应用程序标识符为键的字典和以本地标识符为值的数组,即
{ "<app-identifier>":["<locale1>", "<locale2>"] }。请看下面的截图示例。- 您可以通过几种方式找到应用程序的标识符:
- 您可以在浏览器中导航到该应用程序,并检查 URL 栏。例如,"捕获"、"汇总数据输入 "和 "数据可视化"。以下是您可能会发现的一些格式:
<baseUrl>[/api]/apps/data-visualizer=>data-visualizer<baseUrl>/dhis-web-capture/=>capture
- 对于高级用户,用于自定义翻译的应用程序标识符是应用程序在
/api/apps响应中的key值。
- 您可以在浏览器中导航到该应用程序,并检查 URL 栏。例如,"捕获"、"汇总数据输入 "和 "数据可视化"。以下是您可能会发现的一些格式:
- 您可以通过几种方式找到一个地区的标识符:
- 在 Transifex 中,选择要翻译的语言时括号中的代码。例如,"葡萄牙语(巴西)(pt_BR) "显示本地标识符为
pt_BR。 - 使用 API,您可以访问浏览器中的 URL
<dhis2BaseUrl>/api/locales/ui,找到要翻译的本地语言,然后使用locale属性作为本地语言标识符。
- 在 Transifex 中,选择要翻译的语言时括号中的代码。例如,"葡萄牙语(巴西)(pt_BR) "显示本地标识符为
- 您可以通过几种方式找到应用程序的标识符:
- 单击保存。

步骤 3.为应用程序和本地{ #step-3-add-text-overrides-for-the-app-and-locale } 添加文本覆盖¶
- 在数据存储管理应用程序中,查看 "custom-translations "命名空间,单击顶部的新建键按钮。
- 根据惯例
<app-identifier>__<locale-identifier>为键命名,例如capture__pt_BR。注: 应用程序和本地标识符之间有两个下划线。 - 为新密钥编辑共享设置,方法与 "控制器 "密钥相同。
- 在右侧的代码编辑器窗口中,添加格式为
{ "<text identifier>":"覆盖文本" }。有关如何找到合适的文本标识符的详细信息,请参阅下文。 - 单击保存。
配置翻译字符串](./resources/images/ct-datastore-tl-strings.png)
如何查找覆盖的文本标识符{ #how-to-find-text-identifiers-for-overrides }¶
有几个选项可以查找应用程序中文本字符串的标识符(源字符串/msgid):
- 在 Transifex 中,可以在每个应用程序中找到文本标识符,例如 "选择程序和组织单位,查看现有数据并创建新记录"。
- 在 GitHub 中,标识符可以在每个应用程序的
/i18n/en.pot文件中作为msgid属性找到。下面是捕获应用程序的 file,举个例子。 - 对于应用程序开发人员来说,在使用应用程序平台构建应用程序时,可以在
/src/locales目录中找到这些 JSON 格式的键值对。 - 有时,可以从应用程序的文本中猜测出标识符。
下面是一些需要注意的细节: * 确保 "插值"(如"{{计数 }}"或"{{类别 }}")准确复制到覆盖字符串中 * 复数需要多个条目来处理 "一个 "和 "多个 "的情况。观察上面的截图中复数是如何完成的,例如"{{计数 }}} 事件 "和"{{计数 }}} 事件_复数"。
验证应用程序中的更改{ #validate-the-changes-in-the-app }¶
现在,这三个条件应该得到满足: 1. 自定义翻译已在设置应用中启用 2. 数据存储中的 "custom-translations "命名空间和 "controller "键已设置了应用程序和本地语言允许列表 3. 应用程序和本地语言的文本重载已添加到应用程序和本地语言的数据存储密钥中
在此阶段,受影响的应用程序现在应该会在加载应用程序时在选定的本地显示新的字符串覆盖(请注意上面数据存储截图中以教育为主题的字符串在下面的捕获应用程序中是如何显示的)。

如何删除自定义翻译{ #how-to-remove-custom-translations }¶
要移除某个字符串的覆盖,请从相关应用程序和语言的 custom-translations 命名空间中的 <app>__<locale> 数据存储关键字中移除该行。
要移除某个应用程序和本地语言的所有自定义翻译,请从应用程序的列表中移除custom-translations数据存储命名空间中controller键中的该本地语言。你可以保留 <app>__<locale> 键以便以后再次使用,或者删除该键进行清理。
要移除所有应用程序和本地的所有自定义翻译,请移除 controller 键的所有内容(但不要删除它 -- 它以后可能有用),并取消选中 "设置 "应用程序 "外观 "部分中的 "启用自定义翻译 "选项。您可以保留或删除数据存储命名空间 "custom-translations "中的 "
从数据存储{ #app-requirements-for-custom-translations-from-the-datastore } 获取自定义翻译的应用程序要求¶
使用 App Platform v12.11.0 的应用程序可以通过数据存储使用自定义翻译。
应用程序使用的库中的字符串(如用户界面库)也必须满足相同的应用程序平台要求,才能进行翻译。
元数据/数据库翻译¶
除了用户界面的翻译,DHIS 2 还支持 数据库中元数据内容的本地化。可以 但为了更好地支持标准的翻译工作流程,需要一个专门的翻译工具来翻译数据库中的元数据内容。 但为了更好地支持标准翻译工作流程,我们为此开发了一个专门的 但为了更好地支持标准翻译工作流程,我们为此开发了一个专门的应用程序。
可在 **维护应用项目 > 本地化**中添加新的元数据本地化。
DHIS 2 Translations应用项目¶
DHIS 2 **翻译应用项目**可 可用于将所有元数据(数据元素、类别、组织单位等)翻译成 DHIS 2 中存在的任何地方语言、 组织单位等)翻译成数据库中的任何语言。 数据库。
要开始使用,只需从顶层菜单中选择**翻译应用项目**。 菜单。

-
从**对象**中选择要翻译的对象类型。 下拉菜单,如 "数据元素"。
-
确保已将**目标语言**设置为正确的语言。
-
选择要翻译的特定对象,然后翻译每个 的属性(名称、简称、描述等)。这些 属性因对象而异。
-
完成特定对象的翻译后,按 "保存"。 保存更改。
注意
您可以使用 该应用项目的右上角。
