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

发布时间 - 2026-01-21 00:00:00    点击率:

本文介绍如何结合 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 提供一个翻译接口:

# 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 最佳实践。


# vue  # react  # javascript  # python  # java  # html  # js  # 前端  # json  # go  # 编码  # 浏览器 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何自定义分页视图?(Pagination示例)  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  免费网站制作appp,免费制作app哪个平台好?  javascript日期怎么处理_如何格式化输出  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  JavaScript实现Fly Bird小游戏  Swift中switch语句区间和元组模式匹配  如何快速启动建站代理加盟业务?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  zabbix利用python脚本发送报警邮件的方法  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Android自定义控件实现温度旋转按钮效果  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  详解CentOS6.5 安装 MySQL5.1.71的方法  googleplay官方入口在哪里_Google Play官方商店快速入口指南  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  网站建设要注意的标准 促进网站用户好感度!  如何快速生成凡客建站的专业级图册?  中山网站制作网页,中山新生登记系统登记流程?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  如何用花生壳三步快速搭建专属网站?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  详解jQuery中基本的动画方法  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  独立制作一个网站多少钱,建立网站需要花多少钱?  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】