0

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

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

我想做的是实现某种要在模板中使用的标签,并具有与普通翻译调整静态模板中的字符串相同的助手。我会让用户输入诸如 [translate[mary had a little lamb]] 之类的标签,当页面呈现时,助手会启动并从数据库或谷歌翻译 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,到处都有一些文本。抱歉,如果这引起任何混乱。

4

1 回答 1

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方法中的输入执行的操作。

于 2013-10-02T22:39:11.740 回答