我正在考虑开发以下内容,但想知道它是否已经存在:
我需要一个基于 SQL 的解决方案来分配和管理 asp.net 站点的本地化文本值,而不是使用 RESX 文件。这有助于维护站点上的文本,而无需在需要更新时将其删除以进行部署。
谢谢。
实际上,我们沿着这条路走下去,最终得到了一个非常慢的网站——去掉了基于 SQL 的翻译机制并使用 ASP.NET 资源给了我们显着的性能提升。所以我真的不能推荐你做同样的事情......(是的 - 我们正在缓存和优化吞吐量和一切 - 基于 SQL 的东西仍然明显慢得多)。
你得到你所支付的 - 基于 SQL 的方法在能够即时“翻译”以及修复错别字和内容方面更加灵活。但最终,在我们的应用程序(当时的 Webforms,.NET 2.0)中,使用资源被证明是唯一可行的方法。
我们这样做了(基于 SQL 的翻译),我们对结果非常满意!我们为翻译机构开发了一个界面来在线更新页面。作为一个副作用,该解决方案开始充当内容管理系统。如果您缓存数据,则性能不是问题。不利的一面是,我们在解决方案上投入了数百个小时。(我猜……大约 600 小时,但我可以检查一下。)。
我不确定网站重启,但至少使用 .NET MVC 非常方便,我没有注意到重启问题,如果发生,你需要多久更新一次 resx 文件?对于更大的项目,我用来创建一个包含多个项目的解决方案,一个用于本地化,如下所示:
然后在 Web 项目中添加对 Localization 项目的引用,并像使用它一样使用它
@MyApp.Localization.Model.Customer.CustomerName
@MyApp.Localization.Page.About.PageTitle
@MyApp.Localization.File1.Paragraph1
每次更改翻译文本时,我要么上传更新的 .dll 文件,要么复制 .resx 文件。
注意:您需要将 resx 文件设置为 PUBLIC,因此可以作为强类型访问。
我们最终得到了一个混合解决方案,用户可以将内容编辑到数据库中,但应用程序随后创建了一个手动部署的 .resx。
您也可以完全绕过服务器翻译并在客户端上使用 jQuery 进行翻译,这是我成功使用的一种方法。
我创建了一个基于 SQL 的翻译方案。但是我只在请求时加载给定页面所需的翻译,并且只加载该特定页面的翻译。
当页面在会话期间重新加载和缓存时,它们会被加载到字典对象中。然后只是根据查找进行文本替换。
几乎所有内容都是动态生成的,并且包括必须翻译的用户定义内容,因此灵活性是关键。
性能相当快,检索所有数据的 SQL 查询需要更长的时间(相对而言)。