在 Rails 翻译文件中使用 HTML

发布于 2024-09-17 08:53:36 字数 356 浏览 4 评论 0原文

我的 Rails 应用程序 (config/locale/[en|de].yml) 中有一些翻译,我在视图中使用 <%=t "teasers.welcome" %> 来使用它。示例:

teasers:
    welcome: "<strong>Welcome</strong> to the Website ..."

在 Rails 2.3.8 中,这工作得很好,在 Rails 3 中,HTML 被转义并转换为 &lt;... 我怎样才能阻止这种形式的这种转换并在我的中使用 HTML像 Rails 2.3.8 中那样的翻译文件?

I have some translations in my Rails application (config/locale/[en|de].yml) and I use it in my views with <%=t "teasers.welcome" %>. Example:

teasers:
    welcome: "<strong>Welcome</strong> to the Website ..."

In Rails 2.3.8 this works just fine, with Rails 3, the HTML is escaped and translated to <... How can I prevent this form this translation and use HTML in my translation files like in Rails 2.3.8?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

铜锣湾横着走 2024-09-24 08:53:36

除了使用 raw 之外,还有其他未记录的(但官方的)方法可以做到这一点。
所有以 _html 结尾的键都会自动呈现为未转义。

将密钥从重命名

teasers:
    welcome: "<strong>Welcome</strong> to the Website ..."

teasers:
    welcome_html: "<strong>Welcome</strong> to the Website ..."

Other than using raw, there's an other undocumented (but official) way to do so.
All keys ending with _html are automatically rendered unescaped.

Rename the key from

teasers:
    welcome: "<strong>Welcome</strong> to the Website ..."

to

teasers:
    welcome_html: "<strong>Welcome</strong> to the Website ..."
动听の歌 2024-09-24 08:53:36

我想这是因为

<%= t("blah") %>

在 Rails 2.x 中执行的操作相当于

<%=h t("blah") %>

使用 Rails 3 时

执行的操作。来自 发行说明

切换到默认启用 XSS 转义
用于导轨。

要解决此问题,请再次从发行说明中获取:

您不再需要调用 h(string)
为了转义 HTML 输出,它是通过
所有视图模板中的默认值。如果你
想要未转义的字符串,请调用
原始(字符串)。

所以只需替换

<%= t("blah") %>

<%= raw t("blah") %>

I suppose it's because doing

<%= t("blah") %>

in rails 2.x, now is the equivalent of doing

<%=h t("blah") %>

when you're using rails 3.

From the release notes:

Switch to on-by-default XSS escaping
for rails.

To fix this, and once again from the release notes:

You no longer need to call h(string)
to escape HTML output, it is on by
default in all view templates. If you
want the unescaped string, call
raw(string).

So just replace

<%= t("blah") %>

by

<%= raw t("blah") %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文