我应该在数据库中存储桌面应用程序的本地化数据吗?
Should I store localization data for desktop application in database?
在我的办公室,我们正在讨论处理桌面应用程序本地化的最佳方式。
虽然使用资源文件似乎是一个显而易见的选择,但我们想到可以使用数据库进行集中的本地化管理。应用程序将在开始时连接到数据库以下载所有需要的翻译,或者它可以在呈现控件时按需下载翻译。
应用程序(使用 C# 创建)部署在高度受控的环境中供内部使用,借助处理发布本身和实时更新的工具。我们有一个单一的文件分发存储库和单一的数据库服务器来处理几个卫星站点。
数据库是否是处理桌面应用程序中用户界面翻译的可行解决方案?
有几点你应该考虑
- 预计应用程序将显着增长
- 应用程序可能需要特殊情况(客户特定翻译)
- 同一个translation_key在不同的屏幕/windows/不同的上下文中有不同的值
- 本地文件中的手动管理非常耗时且不容易/开箱即用
如果以上几点符合应用程序的业务计划,那么您应该考虑使用数据库和服务器缓存
假设您开始向应用程序添加新屏幕(表单)。在这种形式中,您有 3 个 UI 元素(element1、element2 和 element3)。应该有一个集中的本地化服务(业务对象)执行以下操作
- 阅读每一份表格
- 阅读表单中的每个元素(在这里您可以过滤可能包含标签、按钮等多语言文本的相关元素,并排除面板)
- 应用程序是否处于客户模式? (假设您的应用程序将在启动/登录时为客户提供一个选择——不同的外观和感觉、不同的文本等)
- 尝试从服务器构建的缓存中获取翻译密钥(基于字典的数据结构,包含 applicationCode(或密钥)、customerKey、 translationKey 和 value)。翻译键可以是 formName.uiElementName
- 如果在缓存中找不到密钥,请尝试从数据库中获取它
- 如果在数据库中找不到(新添加的表单及其 UI 元素),则尝试在数据库中添加一个新条目(applicationKey、customerKey、translationKey、空值)
- 如果在数据库中找到,则将条目添加到缓存中
- 您可能需要一个管理菜单来清除缓存
现在构建一个集中式应用程序来管理本地化数据库。
在此处管理文本,您可以将其用于当前的 运行 应用程序以及未来的应用程序。
拥有集中式本地化服务极为重要,但构建集中式应用程序来管理本地化数据库可能是一项艰巨的任务(时间和金钱)。如果您正在寻找一种快速、简单的解决方案并且不介意您可以探索的商业产品 Passport。它提供了您需要的用户管理功能(如本地化)以及您可能需要但没有时间编写的其他功能。这些通常包括:
- 登录跟踪
- 报告(活跃用户、注册和登录报告)
- 向用户发送电子邮件
- 基于角色的权限
- 通过 OAuth 单点登录
- 还有一堆
安装简单,可以成功处理桌面应用程序中的用户界面翻译。如果您确实预计会有显着增长,并且客户特定的翻译 Passport 可以与您一起扩展。
在我的办公室,我们正在讨论处理桌面应用程序本地化的最佳方式。
虽然使用资源文件似乎是一个显而易见的选择,但我们想到可以使用数据库进行集中的本地化管理。应用程序将在开始时连接到数据库以下载所有需要的翻译,或者它可以在呈现控件时按需下载翻译。
应用程序(使用 C# 创建)部署在高度受控的环境中供内部使用,借助处理发布本身和实时更新的工具。我们有一个单一的文件分发存储库和单一的数据库服务器来处理几个卫星站点。
数据库是否是处理桌面应用程序中用户界面翻译的可行解决方案?
有几点你应该考虑
- 预计应用程序将显着增长
- 应用程序可能需要特殊情况(客户特定翻译)
- 同一个translation_key在不同的屏幕/windows/不同的上下文中有不同的值
- 本地文件中的手动管理非常耗时且不容易/开箱即用
如果以上几点符合应用程序的业务计划,那么您应该考虑使用数据库和服务器缓存
假设您开始向应用程序添加新屏幕(表单)。在这种形式中,您有 3 个 UI 元素(element1、element2 和 element3)。应该有一个集中的本地化服务(业务对象)执行以下操作
- 阅读每一份表格
- 阅读表单中的每个元素(在这里您可以过滤可能包含标签、按钮等多语言文本的相关元素,并排除面板)
- 应用程序是否处于客户模式? (假设您的应用程序将在启动/登录时为客户提供一个选择——不同的外观和感觉、不同的文本等)
- 尝试从服务器构建的缓存中获取翻译密钥(基于字典的数据结构,包含 applicationCode(或密钥)、customerKey、 translationKey 和 value)。翻译键可以是 formName.uiElementName
- 如果在缓存中找不到密钥,请尝试从数据库中获取它
- 如果在数据库中找不到(新添加的表单及其 UI 元素),则尝试在数据库中添加一个新条目(applicationKey、customerKey、translationKey、空值)
- 如果在数据库中找到,则将条目添加到缓存中
- 您可能需要一个管理菜单来清除缓存
现在构建一个集中式应用程序来管理本地化数据库。 在此处管理文本,您可以将其用于当前的 运行 应用程序以及未来的应用程序。
拥有集中式本地化服务极为重要,但构建集中式应用程序来管理本地化数据库可能是一项艰巨的任务(时间和金钱)。如果您正在寻找一种快速、简单的解决方案并且不介意您可以探索的商业产品 Passport。它提供了您需要的用户管理功能(如本地化)以及您可能需要但没有时间编写的其他功能。这些通常包括:
- 登录跟踪
- 报告(活跃用户、注册和登录报告)
- 向用户发送电子邮件
- 基于角色的权限
- 通过 OAuth 单点登录
- 还有一堆
安装简单,可以成功处理桌面应用程序中的用户界面翻译。如果您确实预计会有显着增长,并且客户特定的翻译 Passport 可以与您一起扩展。