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

Drupal中Drupal.t() JavaScript翻译函数失效问题求助

Drupal自定义模块JS翻译失效的解决思路

模块的PHP控制器、模板层翻译都正常,但JS里用Drupal.t()就是拿不到翻译,window.drupalTranslations里也找不到对应词条,给你几个排查方向:

1. 手动把JS要用的翻译词条同步到前端

Drupal不会自动把所有后端翻译词条传到JS里,得明确告诉系统哪些词条要给JS用:

  • 在模块的.module文件里,用#attached把翻译字符串塞进drupalSettings:
// 比如在hook_page_attachments里添加
function mybestmodule_page_attachments(array &$attachments) {
  $attachments['#attached']['library'][] = 'core/drupal.i18n';
  $attachments['#attached']['drupalSettings']['locale']['translation']['strings']['mybestmodule.greeting'] = t('mybestmodule.greeting')->render();
}

或者在定义JS库的时候直接绑定翻译:

function mybestmodule_library_info_build() {
  $libraries['mybestmodule.main'] = [
    'js' => [
      'js/mybestmodule.js' => [],
    ],
    'dependencies' => [
      'core/drupal',
      'core/drupalSettings',
      'core/once',
      'core/jquery',
    ],
    'translations' => [
      'mybestmodule.greeting' => t('mybestmodule.greeting')->getUntranslatedString(),
    ],
  ];
  return $libraries;
}

2. 让locale模块扫描到JS里的翻译词条

运行drush locale:check的时候,得确保系统扫到了JS文件里的mybestmodule.greeting:

  • 在mybestmodule.info.yml里加一行,指定要扫描的JS文件:
interface translation files:
  - js/mybestmodule.js

加完再跑drush locale:check && drush locale:update,看看后台翻译页面里有没有这个词条的JS版本。

3. 检查前端的drupalSettings有没有加载翻译

打开页面源代码,搜drupalSettings.locale.translation.strings,看看有没有mybestmodule.greeting。要是没有,说明词条没传过来:

  • 也可以在模块的Twig模板里手动塞:
{% set greeting_trans = 'mybestmodule.greeting'|t %}
{{ drupalSettings_add('locale.translation.strings.mybestmodule.greeting', greeting_trans) }}

4. 清缓存+确认翻译状态

  • 先去/admin/config/regional/translate确认这个法语翻译是已完成状态,法语也得是启用的语言。
  • 跑drush locale:update && drush cr full,彻底清一遍缓存,有时候缓存残留会搞事情。

5. 检查JS代码的执行时机

虽然用了Drupal.behaviors,但还是确认下drupalSettings是不是已经加载完了:

(function ($, Drupal, once) {
  Drupal.behaviors.myBestModule = {
    attach: function (context, settings) {
      once('myBestModule', 'body', context).forEach(function () {
        // 先打log看看drupalSettings里有没有翻译
        console.log(settings.locale?.translation?.strings['mybestmodule.greeting']);
        console.log(Drupal.t('mybestmodule.greeting'));
      });
    }
  };
})(jQuery, Drupal, once);

6. 重新导入翻译文件试试

要是上面都没用,试试删除现有翻译,重新导入PO文件:

  • 去/admin/config/regional/translate/import,选法语,上传mybestmodule.fr.po,导入后再清缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:33:18