Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该在数据库中存储桌面应用程序的本地化数据吗?_C#_Database_Localization_Resources - Fatal编程技术网

C# 我应该在数据库中存储桌面应用程序的本地化数据吗?

C# 我应该在数据库中存储桌面应用程序的本地化数据吗?,c#,database,localization,resources,C#,Database,Localization,Resources,在我的办公室里,我们讨论了处理桌面应用程序本地化的最佳方式 虽然使用资源文件似乎是一个明显的选择,但我们有了一个想法,可以使用数据库进行集中的本地化管理。应用程序将在启动时连接到数据库以下载所有必需的翻译,或者在呈现控件时按需下载翻译 应用程序(使用C#创建)部署在高度受控的环境中,在处理发布本身以及实时更新的工具的帮助下供内部使用。我们有一个单一的文件分发存储库和单一的数据库服务器来处理几个卫星站点 数据库是在桌面应用程序中处理用户界面翻译的可行解决方案吗 您应该考虑以下几点 应用程序预计将

在我的办公室里,我们讨论了处理桌面应用程序本地化的最佳方式

虽然使用资源文件似乎是一个明显的选择,但我们有了一个想法,可以使用数据库进行集中的本地化管理。应用程序将在启动时连接到数据库以下载所有必需的翻译,或者在呈现控件时按需下载翻译

应用程序(使用C#创建)部署在高度受控的环境中,在处理发布本身以及实时更新的工具的帮助下供内部使用。我们有一个单一的文件分发存储库和单一的数据库服务器来处理几个卫星站点


数据库是在桌面应用程序中处理用户界面翻译的可行解决方案吗

您应该考虑以下几点

  • 应用程序预计将显著增长
  • 应用程序可能需要有特殊情况(特定于客户端的翻译)
  • 相同的翻译键在不同的屏幕/窗口/不同的上下文中具有不同的值
  • 本地文件中的手动管理非常耗时,而且不容易/现成地处理

如果上面的一个或多个点与应用程序的商业计划相匹配,那么您应该考虑使用数据库和服务器缓存< /P> 假设您开始向应用程序添加一个新屏幕(表单)。在这个表单中,您有3个UI元素(element1、element2和element3)。应该有一个集中的本地化服务(业务对象),它执行以下操作

  • 阅读每一张表格
  • 阅读表单中的每个元素(在这里,您可以过滤可能包含标签、按钮等多语言文本的相关元素,并排除面板)
  • 应用程序是否处于客户模式?(假设您的应用程序在启动/登录时为客户提供了一个选择-不同的外观、不同的文本等)
  • 尝试从服务器构建的缓存中获取翻译密钥(一种基于字典的数据结构,包含applicationCode(或密钥)、customerKeytranslationKey)。翻译键可以是formName.uiElementName
  • 如果在缓存中找不到密钥,请尝试从数据库中获取
  • 如果在数据库中找不到(新添加的表单及其UI元素),则尝试在DB中添加新条目(applicationKey、customerKey、translationKey、空值)
  • 如果在数据库中找到,则在缓存中添加该项
  • 您可能需要一个管理菜单来清除缓存
现在构建一个集中式应用程序来管理本地化数据库。
在此处管理文本,您可以将其用于当前正在运行的应用程序,也可以用于将来的应用程序

拥有一个集中的本地化服务非常重要,但是构建一个集中的应用程序来管理本地化数据库可能是一项艰巨的任务(时间和金钱)。如果您正在寻找一个快速、简单的解决方案,并且不介意使用商业产品,您可以进行探索。它提供了您需要的用户管理功能(如本地化)以及您可能需要的其他功能,但没有时间编写。这些措施通常包括:

  • 登录跟踪
  • 报告(活动用户、注册和登录报告)
  • 向用户发送电子邮件
  • 基于角色的权限
  • 通过OAuth单点登录
  • 还有一堆

它安装简单,可以在桌面应用程序中成功处理用户界面翻译。如果您确实预期会有显著的增长,那么特定于客户的翻译可以随您扩展。

听起来不错,但这不是适合所有人的最佳方式。它可能是您的场景中最好的(首先考虑所有问题)。问题是为什么资源对你有害?为什么是数据库?能够快速共享本地化的更新吗?这种情况预计多久发生一次?优点值得缺点吗?只有你才能回答这些问题和其他问题。目前的问题要么是太宽泛(如果我们试图考虑一切)或基于意见(因为每个人都会想到他的场景)。@辛纳特好,教唆者使用数据库来存储翻译的想法是允许我们“集中管理本地化”,以重用应用程序之间的翻译。这当然会导致资源文件不存在的问题—它依赖于网络,速度明显较慢。我想知道是否有一种方法可以减轻数据库的缺点,并且仍然能够从有针对性的优点中获益。您可以构建自己的本地化。我正在使用txt文件,这些文件在应用程序启动时加载,用于通过反射更新静态类属性。然后,您只需要一个简单的机制来获取版本和下载完整的翻译(若版本比客户机已有的版本更新)。数据库应该可以。你们的想法让我思考。为客户端应用程序使用一些缓存确实可以消除数据库翻译存储的大部分问题。我们可以在数据库上创建一个触发器,将更改发布到文件存储库,然后使用更新工具,我们只需将新的翻译文件分发到工作站。