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

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

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

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

所以基本上:

This is some random text that won't be translated

And the following piece of text will be translated using the helper: [translate[mary had a little lamb]]

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

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

这是一个快速的方法:

在辅助模块中:

 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方法中输入的处理方式。