Rails 7中i18n初始化代码应放置在哪个位置?
在Rails 7.0.4中放置i18n-js初始化代码的位置
首先明确:你看到的这段ES6代码是前端浏览器端运行的,并非服务器端代码。Rails 7默认通过两种方式管理前端JS,下面分场景说明代码放置位置:
场景1:使用Importmap(Rails 7默认配置)
- 先执行命令将i18n-js包加入importmap:
bin/importmap pin i18n-js
- 在
app/javascript/controllers/目录下新建i18n_init.js文件,写入初始化代码:
import { I18n } from "i18n-js"; // 若translations.json存放在app/javascript/assets/路径下,需对应调整导入路径 import translations from "../assets/translations.json"; // 将i18n实例挂载到window,方便全局调用 window.i18n = new I18n(translations);
- 在
app/javascript/application.js中引入这个初始化文件:
import "controllers/i18n_init"
场景2:使用jsbundling-rails(esbuild/rollup/webpack)
- 先通过npm安装i18n-js:
npm install i18n-js
- 在
app/javascript/目录下创建i18n.js文件,写入初始化代码:
import { I18n } from "i18n-js"; import translations from "./translations.json"; export const i18n = new I18n(translations); // 需要全局调用的话,挂载到window对象 window.i18n = i18n;
- 在
app/javascript/application.js中引入该文件:
import "./i18n"
开发环境下Rails会自动处理构建,生产环境需执行npm run build完成打包,产物会进入资产管道。
补充:生成前端可用的translations.json
你之前使用的i18n gem是服务器端的,需要把yml格式的翻译文件转为前端可用的JSON:
- 在
config/initializers/i18n.rb中添加配置:
I18n::JS.configure do |config| config.export_path = Rails.root.join("app/javascript/assets/translations.json") config.export = true end
- 执行rake任务生成JSON文件:
rake i18n:js:export
内容的提问来源于stack exchange,提问作者seeker
相关产品推荐
相关产品推荐

