【发布时间】:2018-11-02 14:53:43
【问题描述】:
在 Rails 控制器中,我想计算要发送到前端的 i18n 消息。我进行如下操作:
flash[:notice] = I18n.t 'programs.update.program_saved'
在我的翻译文件 (fr.yml) 中,翻译如下:'Programme sauvegardé'。
在这一行设置断点,然后在我的控制台中键入它时,我遇到了编码问题:
0> I18n.t 'programs.update.program_saved'
=> "Programme sauvegardé"
我已经实现了AJAX pattern 来处理flash 消息,并且在前端,我可以看到相同的编码问题。
除此之外,当我在 rails console 中输入相同的内容时,我没有编码问题。
我在Ruby 2.4.4 和Rails 5.2.1。
什么会导致这个编码问题,以及如何摆脱它?
编辑:添加更多详细信息
我使用RubyMine 2018.2 进行开发。我的 Rails 服务器在 WSL (Windows Subsystem for Linux) 和 Ubuntu 16 下运行。我从Windows 一侧的RubyMine 运行我的rails 服务器。使用的rails SDK 是Linux。 rails server 在Linux 一侧运行。
当显示 HTTP 请求响应中设置的 flash 消息时,我的问题的根源是浏览器中的编码问题。这些 flash 消息按说明计算,即:I18n.t 'programs.update.program_saved'。
当我从 RubyMine 或直接从 Linux 终端启动 Rails 服务器时,问题也是一样的。
为了进行调查,我想调试并使用 RubyMine 控制台。从 RubyMine 调试器控制台执行此命令时,仍然存在编码问题:I18n.t 'programs.update.program_saved'。从rails console 在Linux 或Windows(在RubyMine 中,rails 控制台在Linux 一侧执行)执行此操作时,我没有编码问题。
此外,在 Heroku 实例上运行应用程序时问题仍然存在,所以我想知道这是否与我的本地配置有关。
【问题讨论】:
标签: ruby-on-rails encoding rails-i18n