如何在 Django 前端 JavaScript 中实现按钮文本的国际化翻译

10次阅读

如何在 Django 前端 JavaScript 中实现按钮文本的国际化翻译

本文介绍如何结合 django 内置 i18n 机制,在前端 javascript 对象中动态翻译按钮文案,无需修改原始 html 结构,兼容现有 vue/react 或纯 js 项目。

django 构建多语言网站时,模板中的 {% trans %} 标签可轻松处理服务端渲染内容的翻译,但前端 javaScript 对象(如按钮配置、状态提示等)默认无法被 Django 模板引擎解析。针对这类场景,推荐采用「服务端预注入翻译字符串」的方式——即在 html 模板中提前将翻译后的文本以变量形式注入全局作用域或内联

✅ 正确做法:服务端生成翻译后传入前端

首先,在对应 Django 模板(如 base.html 或页面模板)的

或 底部添加:

然后在你的 JavaScript 配置文件(或内联脚本)中直接使用:

const configButton = {     purchases: {         attr: 'data-out',         default: {             class: 'button_style_blue',             text: '' + window.translations.addToList         },         active: {             class: 'button_style_light-blue-outline',             text: '' + window.translations.recipeInList         }     } };

⚠️ 注意事项:确保已启用 Django 国际化中间件(django.middleware.locale.LocaleMiddleware)并正确配置 LANGUAGES 和 LOCALE_PATHS;所有 trans 模板标签中的字符串需被 makemessages 扫描到(建议统一用英文书写,避免硬编码中文);若使用 gettext python 函数(如原答案所示),仅适用于服务端 Python 代码,不能直接在浏览器 js 中调用——该方式在原答案中存在概念混淆,实际不可行;必须通过模板渲染或 API 接口传递翻译结果。

? 进阶建议:支持动态语言切换

如需在不刷新页面的前提下切换语言,可配合 Django REST Framework 提供一个翻译接口:

立即学习Java免费学习笔记(深入)”;

# views.py from django.utils.translation import gettext as _ from django.http import jsonResponse  def get_translations(request):     return JsonResponse({         'addToList': _('Add to purchase list'),         'recipeInList': _('Recipe in purchase list'),     })

前端通过 fetch() 获取实时翻译,并更新 configButton,实现无感语言切换。

总之,Django 的国际化能力强大,但 JavaScript 层需遵循「服务端提供翻译 → 前端消费」的原则。避免尝试在浏览器中直接调用 Python 的 _() 函数,而应善用模板变量注入或轻量 API,确保翻译准确、可维护且符合 Django 最佳实践。

text=ZqhQzanResources