我有一个大型应用程序,它使用定制的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,其中包含一些文本。对不起,如果这引起任何混淆。
答案 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
方法中输入的处理方式。