在Rails上自动翻译DB中的动态内容

时间:2013-10-02 17:56:50

标签: ruby-on-rails ruby

我有一个大型应用程序,它使用定制的CMS,将某些页面部分存储在数据库中。这个应用程序还有一个translate(字符串)函数,用于查找另一个DB表||中的字符串如果找不到谷歌翻译API。

现在这个设置很有效,除了一个小方面 - 当切换到另一种语言时,静态内容也必须被翻译,所以我们只是将内容克隆到不同的行。

我想要做的是实现在模板中使用的某种标记,并使用相同的帮助程序,使普通翻译从静态模板中调整字符串。我有用户输入标签,例如[翻译[mary有一只小羊羔]],当页面被渲染时,帮助者会启动并从数据库或谷歌翻译API中提取翻译。帮助器已经工作得很好了,有memcache,CRUD管理页面来管理字符串等等。

基本上是这样的:

<div class="some-random-class">
<p>This is some random text that won't be translated</p>
<p>And the following piece of text will be translated using the helper: [translate[mary had a little lamb]]</p>
</div>

是否有(安全)方法来实现这一目标?非常感谢任何指针。我们已经有几百页了,并且在这个应用程序上运行的每个站点克隆它们15次将是一场噩梦。

稍后编辑:内容在Q标题中称为动态,因为它来自数据库。然而,对于最终用户来说,它是静态HTML,其中包含一些文本。对不起,如果这引起任何混淆。

1 个答案:

答案 0 :(得分:0)

这是一种快速的方法:

在辅助模块中:

def pretranslate(str)
  md = str.match(/\[translate\[([^\]]*)\]\]/)
  str.gsub(md[0], translate(md[1]))
end

在您的控制器中:

@text = %Q{
  And the following piece of text will be translated using the helper: [translate[mary had a little lamb]]
}

在您的观点中:

<%= pretranslate(@text) %>

这显然非常hacky。它本质上不是很安全,但不应该太危险,这取决于你对translate方法中输入的处理方式。