You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Drupal的t()函数内快速设置文本样式,无需额外大量代码?

关于在Drupal的t()函数内设置文本样式的问题

嘿,这个问题我太熟悉了!咱们直接说结论:不能直接在t()函数的字符串里写HTML样式,因为t()的核心作用是处理可翻译文本,默认会转义所有HTML标签(为了防XSS安全,也为了让翻译人员能看懂纯文本内容)。不过你完全不用写大量额外代码,有几种简洁的解决方式,看你具体需求:

情况1:给整个链接文本统一设置样式

其实你当前的代码已经走对路子了!你在l()函数的attributes里设置了button-red等CSS类,这就是最佳实践——把样式和内容分离,通过CSS来控制文本的外观。比如你可以在主题CSS里写:

.button-red {
  color: #ff0000;
  font-weight: bold;
}

这样既不影响翻译,又能灵活控制样式,完全不需要动t()里的字符串。

情况2:给文本的某一部分单独设置样式(比如“Click here”单独变色)

如果需要给文本里的特定片段加样式,你可以用t()的占位符功能,配合l()函数的html: TRUE参数来实现,代码示例如下:

// 先创建安全的HTML片段(防止XSS)
$highlighted_text = \Drupal\Core\Render\Markup::create('<span class="text-highlight">Click here</span>');

// 用占位符把HTML片段插入翻译字符串
$translated_text = t('Need it sooner? @highlighted', ['@highlighted' => $highlighted_text]);

// 生成链接时,设置html为TRUE,告诉l()不要转义内容
$need_it_sooner = l($translated_text, 'need-it-sooner', [
  'attributes' => [
    'class' => ['float-right', 'button', 'button-red'],
    'style' => 'float:right;',
  ],
  'html' => TRUE,
]);

然后在CSS里定义.text-highlight的样式就行,这样翻译人员也只会看到纯文本的占位符描述,不会被HTML干扰。

为什么不能直接在t()里写样式?

t()函数的设计初衷是处理纯文本翻译,如果直接在里面写<span style="color:red">这类代码,一来会被自动转义成普通文本显示(用户会看到<span>标签而不是红色文字),二来翻译人员拿到带HTML的字符串会很困惑,不利于多语言适配,还可能带来XSS安全风险。

所以总结下来,你完全不用写大量额外代码,根据需求选上面两种方法就行,既符合Drupal的最佳实践,又能轻松实现样式需求~

内容的提问来源于stack exchange,提问作者user1692517

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:17:34