如何在 Django 项目中实现前端按钮文本的国际化翻译
发布时间 - 2026-01-21 00:00:00 点击率:次本文介绍如何结合 django 内置 i18n 系统与前端 javascript 配置,安全、规范地实现按钮等动态文本的多语言支持,重点解决 js 对象中硬编码字符串的翻译问题。
在 Django 多语言项目中,模板(.html)中的文本可通过 {% trans %} 或 gettext 轻松翻译,但前端 JavaScript 中(如按钮配置对象)的字符串无法被 Django 模板引擎直接处理。若将翻译逻辑完全交由前端(如使用 i18next),会增加维护成本并脱离 Django 的统一语言包管理。更推荐的做法是:在后端预处理翻译,并通过 JSON 或内联脚本安全注入到前端上下文。
✅ 推荐方案:服务端翻译 + 前端变量注入
首先,在视图或上下文中完成翻译,利用 Django 的 gettext(别名 _)获取当前激活语言的译文:
# views.py 或 context processor 中
from django.utils.translation import gettext as _
def your_view(request):
context = {
'add_to_list_text': _("Add to purchase list"),
'recipe_in_list_text': _("Recipe in purchase list"),
}
return render(request, 'your_template.html', context)然后在模板中,将翻译后的字符串安全注入到 JavaScript 全局变量或初始化脚本中(注意使用 |json_script 过滤器防止 XSS):
{{ add_to_list_text|json_script:"js-translations" }}
或构造对象
更清晰的做法是统一构造翻译对象并内联输出:
最后,在你的 JS 配置中引用这些已翻译的变量:
const configButton = {
purchases: {
attr: 'data-out',
default: {
class: 'button_style_blue',
text: '' + djangoTranslations.addToPurchaseList
},
active: {
class: 'button_style_light-blue-outline',
text: '' + djangoTranslations.recipeInPurchaseList
}
}
};⚠️ 注意事项
- 切勿在 .js 文件中直接调用 gettext:静态 JS 文件不经过 Django 模板渲染,_() 函数不可用;
- 避免拼接 HTML 与翻译文本:确保 escapejs 过滤器已应用,防止 XSS(如译文中含引号或
-
启用 i18n 中间件与模板支持:确认 settings.py 中已配置:
MIDDLEWARE = [..., 'django.middleware.locale.LocaleMiddleware', ...] TEMPLATES = [{..., 'OPTIONS': {'context_processors': [..., 'django.template.context_processors.i18n', ...
]}, ...}]
-
运行 makemessages 和 compilemessages:每次新增 _("...") 后需执行:
python manage.py makemessages -l en -l zh_Hans python manage.py compilemessages
通过该方式,你既能复用 Django 成熟的翻译流程(.po 文件管理、语言切换、语言前缀 URL 支持),又能保持前端逻辑简洁可控,真正实现前后端一体化的国际化体验。
# javascript
# python
# java
# html
# js
# 前端
# json
# go
# 编码
# 后端
# 多语言
# django
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
高端云建站费用究竟需要多少预算?
b2c电商网站制作流程,b2c水平综合的电商平台?
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
JS弹性运动实现方法分析
如何用低价快速搭建高质量网站?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Laravel集合Collection怎么用_Laravel集合常用函数详解
如何选择PHP开源工具快速搭建网站?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何在局域网内绑定自建网站域名?
如何选择可靠的免备案建站服务器?
详解vue.js组件化开发实践
香港网站服务器数量如何影响SEO优化效果?
JavaScript如何实现错误处理_try...catch如何捕获异常?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
,南京靠谱的征婚网站?
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
如何在IIS7中新建站点?详细步骤解析
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
android nfc常用标签读取总结
JS经典正则表达式笔试题汇总
如何用wdcp快速搭建高效网站?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
如何快速搭建高效可靠的建站解决方案?
如何打造高效商业网站?建站目的决定转化率
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
香港服务器建站指南:免备案优势与SEO优化技巧全解析
公司网站制作价格怎么算,公司办个官网需要多少钱?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
利用 Google AI 进行 YouTube 视频 SEO 描述优化
韩国服务器如何优化跨境访问实现高效连接?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Laravel中的withCount方法怎么高效统计关联模型数量
Laravel如何处理CORS跨域请求?(配置示例)
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
Laravel如何优化应用性能?(缓存和优化命令)
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项


