【问题标题】:How to localise static website text from translations stored in a database?如何从存储在数据库中的翻译中本地化静态网站文本?
【发布时间】:2012-06-21 21:27:30
【问题描述】:

我需要为我的(可扩展的)Web 应用程序中的静态文本设计一种翻译机制/策略——这些应用程序基于加载动态数据的 ASP.NET 环境(但没有服务器端控件)中的 HTML、JQuery/JavaScript从异步 jQuery 调用到 http 处理程序。

我已经成功地使用Globalize 本地化了数字、日期等,但是现在需要整理文本翻译。

翻译的文本被适当地存储在数据库中(由本地合作伙伴在另一个应用程序中维护),因此,我不想使用基于 ResX 等效的文件,例如 jQuery Localisation/jQuery Localize/jQuery-i18n-properties 方法,相反,我正在寻求类似于 extending the Resource-Provider Model 的解决方案,它本地化 ASP.NET 控件(我没有),以从数据库中获取翻译。

客户端方法:我只是偶然发现了i18next's dynamic (non-static) resouce route,我正在尝试确定是否可以从 http 处理程序返回类似的内容(并缓存在JStorage/LawnChair)使用the jQuery function 填充占位符/标签或使用Moustachehogan.js 模板采取类似的方法。

服务器端方法: 在提供之前修改 HTML,例如this answer 建议使用HttpResponse.Filter 来修改响应服务器端(参见this article)。由于缓冲区被分块,我必须按照here 的建议捕获整个流,这确实会导致性能下降,但是,我希望我可以通过页面的caching each (language) version 来缓解这种情况。

或者使用 HTTP 处理程序 like this 看起来更简单的方法,虽然我不太确定如何在这种情况下缓存页面的多个版本。

是否有其他人对这些方法有经验或知道任何类似的或“最佳实践”可以满足要求,尤其是在性能、可扩展性和可维护性方面的要求?

如果有任何不清楚的地方,请告诉我,我是 Web 开发的新手。 :)

注意:这适用于在平板电脑/手持设备上运行以获取数据的 Web 应用程序,它不是 CMS 或静态站点(之前的版本用于在 .Net Compact Framework 上运行约 5 年,并且是时候进行更新了,这样用户就可以使用非 Windows 设备,例如 android 和 iPad)。

【问题讨论】:

  • 如果它是一个静态站点,在客户端入侵语言层似乎比将其转换为 CMS 并在服务器端进行攻击更麻烦。
  • @Diodeus(更新的问题)这听起来像是一种需要考虑的方法,(但这不是 CMS),你能详细说明一下答案吗? (注意 HttpResponse.Filter 方法)。
  • 你真的需要把它全部吸进某种数据库,你如何提供它是另一回事。修补到原始软件中也是一种选择。
  • @Diodeus 翻译已经在数据库中,问题是关于提供它。

标签: html localization translation client-side


【解决方案1】:

这就是我们在数据库中处理文本翻译的方式(听起来很明显,但至少这是高度可扩展的):

  1. 假设您有一个表 tbl_Content,其中只有一种语言的 [id]、[title] 和 [description] 列。

  2. 我们首先创建一个包含以下列的 tbl_Content_Translation:[id]、[languageId]、[title] 和 [description]

  3. 将标题/说明列中的所有内容复制到翻译表中,以确保不会丢失任何内容

  4. 删除原表中的标题和描述列

  5. 更改所有查询此表的 SP 以添加 [languageId] 参数。

  6. 我们将 SP 附加到 BLL。

  7. 最后,无论是从网页还是网络方法,我们调用 BLL 来访问我们的数据。

再一次,这似乎很明显,但是因为它对我们有用(ajax 调用和正常的英语、法语和越南语网页)我认为这可能很有用。

【讨论】:

  • 我们有这个用于各种动态数据,例如类别名称或下拉列表中的标题选择(先生、夫人等),但是这个问题确实与页面、所有标签等 - 它们仅因每种语言而异。
  • 虽然这听起来像是一种 CMS 方法,但内容是您网站的内容,这并不完全相同,而且我们没有大量的翻译数据,正如我所提到的,只是标签等 - 为每个用户显示的静态文本)。
【解决方案2】:

服务器端翻译结果相当复杂。

我认为最简单的方法是使用jQuery localisation 来获取从数据库生成的语言脚本,但这并没有增加任何价值,所以我只是使用 ajax 请求手动从服务器获取脚本(每种语言都有不同的生成脚本)。

我从服务器获取的脚本包含用于翻译的变量(变量与控件 ID 同名),我将其作为对象数组传递,例如{id:'controlid', val:controlid} 用于应用翻译的方法,因此当调用脚本时,页面会被翻译。

很遗憾,似乎没有一个好的最佳实践,我所做的并不复杂,但如果有一个库或插件可以做到这一切,那就太好了。

Simlar to this answer.

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多