Ruby on rails 在DB on Rails中自动翻译动态内容

Ruby on rails 在DB on Rails中自动翻译动态内容,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个很大的rails应用程序,它使用定制的CMS在数据库中存储某些页面部分。这个应用程序还有一个translate(string)函数,可以在另一个DB表| | google translate API中查找字符串(如果找不到) 现在,除了一个小方面之外,这个设置非常有效——当切换到另一种语言时,静态内容也必须被翻译,因此我们只需将内容克隆到不同的行中 我想做的是实现某种类型的标记,以便在模板中使用,并使用相同的帮助器来执行纯翻译,从静态模板中调整字符串。我会让用户输入诸如[translat

我有一个很大的rails应用程序,它使用定制的CMS在数据库中存储某些页面部分。这个应用程序还有一个translate(string)函数,可以在另一个DB表| | google translate API中查找字符串(如果找不到)

现在,除了一个小方面之外,这个设置非常有效——当切换到另一种语言时,静态内容也必须被翻译,因此我们只需将内容克隆到不同的行中

我想做的是实现某种类型的标记,以便在模板中使用,并使用相同的帮助器来执行纯翻译,从静态模板中调整字符串。我会让用户输入诸如[translate[mary had a little lamb]]之类的标记,当页面呈现时,助手将启动并从DB或google translate 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,带有一些文本。如果这造成了任何混乱,很抱歉。

这里有一个快速的方法:

在助手模块中:

在控制器中:

在你看来:



这显然是相当骇客。它本质上并不安全,但也不应该太危险,这取决于你对
translate
方法中的输入所做的操作。

内容是可信的,用户也是如此,因此99.99%的人确信不会发生任何事情。。。至少现在不是。但你是对的,这种黑客行为永远不应该在面向公众的网站上进行。还有一个小提示,使用str.scan而不是str.match将返回所有匹配项,在本例中这是很好的。谢谢你的帮助!
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) %>