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

如何在CoffeeScript页面访问Rails locales文件中的字符串?

在CoffeeScript中访问Rails I18n本地化字符串的正确方式

你遇到的问题很典型——t()是Rails后端视图的Helper方法,CoffeeScript作为前端脚本文件,根本没法直接调用后端的Ruby方法,所以才会报undefined method 't'的错误。下面给你几种靠谱的解决方案:

方法1:通过全局变量注入本地化内容

在你的ERB布局文件(比如application.html.erb)里,把I18n的翻译内容转成JSON并挂载到全局window对象上:

<script>
  window.I18n = <%= raw I18n.backend.send(:translations).to_json %>;
  // 也可以只注入需要的部分,减少体积:
  // window.ShareLocales = <%= raw { share_message: t('share_message') }.to_json %>;
</script>

之后在CoffeeScript里就能直接访问了:

# 直接访问指定locale的字符串
shareMessage = I18n.en.share_message

# 如果要适配当前应用的locale,更通用的写法
shareMessage = I18n[I18n.locale].share_message

方法2:通过DOM的data属性传递单个字符串

如果只是需要这一个share_message字符串,更轻量的方式是在视图里把它放到某个DOM元素的data属性中:

<!-- 随便找个合适的元素,比如页面的共享按钮容器 -->
<button id="share-btn" data-share-text="<%= t('share_message') %>">分享</button>

然后在CoffeeScript里读取这个属性:

# 原生JS写法
shareMessage = document.getElementById('share-btn').dataset.shareText

# 如果你用jQuery的话
shareMessage = $('#share-btn').data('shareText')

方法3:使用专门的gem管理前端I18n

如果你的前端需要大量使用本地化字符串,推荐用i18n-js这个gem。它能自动把Rails的config/locales下的文件编译成前端可用的脚本,让你能在CoffeeScript里用和后端几乎一样的语法调用:

shareMessage = I18n.t('share_message')

具体的安装和配置可以参考gem的官方文档,步骤很简单,适合中大型项目的多语言场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:10:10