我正在使用rails-i18n Ruby on Rails构建一个多语言应用程序。 我必须翻译的大部分内容(和数据库条目)都是纯文本,尽管它的一部分有一些嵌入式HTML。
我在考虑使用<%= raw t('translation_key') %>
而不是直接<%= t('translation_key') %>
来考虑将来可能包含html的更改。
如果我在整个网站中采用<%= raw t('translation_key') %>
,那么在谈到
答案 0 :(得分:2)
您只需将_html附加到标记键以处理翻译标记中的HTML:
en:
key_one: test text
key_one_html: <p>test text</p>
然后标准代码将起作用:
<%= t('key_one_html') %>
答案 1 :(得分:1)
效果方面:
性能影响应该可以忽略不计。调用raw
将参数复制到一个新字符串(确切地说是ActiveSupport::SafeBuffer
),并将其html_safe
标志设置为true。另一方面,不再对该字符串执行HTML转义。
安全方面:
在任何地方使用raw
都有更多的实质性缺点。
您说您的翻译是从数据库中读取的。用户可以编辑这些翻译吗?如果是的话......
<script>
标记。<强>备选方案:强>
如果您需要在翻译中加入HTML,还有其他选择:
_html
后缀 以防止自动转义index.en.html
,_footer.de-DE.html
来翻译视图的较大部分。要简化数据库条目的翻译,请尝试
<强>结论:强>
在任何地方使用raw
都会导致很多问题。为自己省去很多麻烦,只需“根据需要”使用它。
答案 2 :(得分:0)
您还可以将globalize gem用于更大的text / html内容部分。
https://github.com/globalize/globalize/blob/master/README.md
如果您担心性能,它还支持急切加载。