在ASP.NET中使用SQL代替RESX文件进行本地化

在ASP.NET中使用SQL代替RESX文件进行本地化,asp.net,sql,resx,Asp.net,Sql,Resx,我正在考虑开发以下内容,但想知道它是否已经存在: 我需要一个基于SQL的解决方案来为asp.net站点分配和管理本地化文本值,而不是使用RESX文件。这有助于在站点上维护文本,而无需在需要更新时将其取下进行部署 谢谢。我们实际上走了这条路,最终得到了一个速度非常慢的网站——删除了基于SQL的翻译机制,并使用ASP.NET资源,大大提高了性能。所以我不能真的建议你做同样的事情。。。。(是的,我们正在缓存和优化吞吐量和所有东西,而基于SQL的东西仍然要慢得多) 你得到的是你所付出的——基于SQL的方

我正在考虑开发以下内容,但想知道它是否已经存在:

我需要一个基于SQL的解决方案来为asp.net站点分配和管理本地化文本值,而不是使用RESX文件。这有助于在站点上维护文本,而无需在需要更新时将其取下进行部署


谢谢。

我们实际上走了这条路,最终得到了一个速度非常慢的网站——删除了基于SQL的翻译机制,并使用ASP.NET资源,大大提高了性能。所以我不能真的建议你做同样的事情。。。。(是的,我们正在缓存和优化吞吐量和所有东西,而基于SQL的东西仍然要慢得多)


你得到的是你所付出的——基于SQL的方法在能够动态“翻译”和修复打字错误等方面更加灵活。但最终,在我们的应用程序(当时的Webforms.NET 2.0)中,使用资源被证明是唯一可行的方法。

我们做到了这一点(基于SQL的翻译),我们对结果非常满意!我们为翻译机构开发了一个在线更新页面的界面。作为一种副作用,该解决方案开始用作内容管理系统。如果缓存数据,则性能不是问题。缺点是,我们在解决方案中投入了数百小时。(我猜某物大概在600小时左右,但我可以查一下。)

我们最终得到了一个混合解决方案,用户可以将内容编辑到数据库中,但应用程序随后创建了一个手动部署的.resx


您也可以完全绕过服务器翻译,在客户端用jQuery进行翻译,这是我成功使用的一种方法。

我不确定网站的重新启动,但至少使用.NET MVC非常方便,我没有注意到重新启动问题,如果出现,您需要多久更新一次resx文件?对于更大的项目,我使用多个项目创建解决方案,一个用于本地化,类似这样:

  • MyApp.本地化
    • 模型
    • 页面
    • File1.resx
  • MyApp.Core
  • MyApp.Web
然后在Web项目中,我添加了一个对本地化项目的引用,并像这样使用它

@MyApp.Localization.Model.Customer.CustomerName

@MyApp.Localization.Page.About.PageTitle

@MyApp.Localization.File1.Paragraph1

每次更改翻译文本时,我要么上载更新的.dll,要么复制.resx文件


注意:您需要将resx文件设置为PUBLIC,以便可以强类型访问。

我创建了一个基于SQL的翻译方案。但我只在请求时加载给定页面所需的翻译,并且只加载该特定页面所需的翻译

当页面在会话期间重新加载和缓存时,这些数据将加载到dictionary对象中。然后是基于查找的文本替换

几乎所有内容都是动态生成的,包括必须翻译的用户定义的内容,因此灵活性是关键


性能相当快,检索所有数据的SQL查询需要更长的时间(相对而言).

我听说当你加入一个新的resxI时,网站会重新启动。我想知道你当时得出了什么结论,因为我今天也遇到了类似的情况。在我构建的一个应用程序中,我们正考虑沿着这条道路将资源移动到数据库中。我一直想知道丁(我知道会有一个)这样做的表现。我完全不同意。翻译数据很容易缓存,如果有一个执行良好的解决方案,性能不应该成为问题@罗伯特:你可以不同意——我只能谈谈我们的经历。而且我们也做了一些非常积极的缓存——从来没有得到过与RESX相差无几的性能。这就是我们的故事。@Marc_s:我完全相信你的经验,但也许实施是问题所在,而不是一般的概念?@Robert:也许-我不知道-我只是想警告一下,这可能不像最初看起来那么容易,至少要让它以良好的性能启动并运行起来performance@Robert,这就是我的想象。我的网站真的很大,它越来越难进行最小的更新,如文本、简单样式、显示/隐藏元素、管理网站菜单……等等。我让我的团队通过构建小型基于SQL的管理系统来解决每一个问题,这些系统最终将添加到整个网站的CMS中。我的两个主要关注点是:1-数据库负载2-在本地开发环境和love环境之间管理文本和配置您能告诉我更多关于您的项目、范围、负载、大小…等等吗?谢谢。我们每天最多有20000名访客,最多有200名并发活跃用户。我们将所有翻译缓存在ASP.NET缓存中。SQL加载不是这样的问题。当有人编辑翻译时,缓存将失效并从数据库中重新填充。(我不确定这里是否有任何分段。)我们将翻译存储在3个表中。“翻译”、“翻译组”、“翻译价值”。我们目前有48738个TranslationValues(25种左右的语言),用于2427个项目的230组翻译(一个单独的页面是组或按主题的占位符通过这种方式连接)。我们考虑了开源解决方案,但没有时间这样做。感谢提供详细信息。这真的很有帮助。现在,我关心的下一个问题是如何最好地用数据库中的文本填充页面上的标签和其他控件?我最初的想法是尝试覆盖.Net处理资源文件的方式,只是更改数据源。i、 e.这样我在为控件分配资源时仍然可以使用“.meta:resourceKey=”“..。我很想知道您在这一部分使用了什么方法。谢谢。”我们考虑过打开sourc