Rails控制器外渲染视图时i18n国际化失效问题求助
解决控制器外渲染视图时I18n失效的问题
当你通过ABCController.render在其他控制器动作里渲染视图时,渲染上下文默认不会继承当前请求的locale设置,这就是始终只显示英文的核心原因。可以通过以下两种方式解决:
方法1:直接在render参数中指定locale
调用render时显式传入当前请求的locale值:
ABCController.render :index, assigns: {myvar: '12345'}, locale: I18n.locale
方法2:创建自定义Renderer并设置locale
先初始化带有locale配置的Renderer实例,再用它渲染视图:
renderer = ABCController.renderer.new(locale: I18n.locale) renderer.render :index, assigns: {myvar: '12345'}
原理说明:Controller.render会生成独立的渲染环境,默认使用Rails配置的默认locale(通常为英文)。显式传入当前请求的I18n.locale,就能让视图使用正确的语言文件,和正常访问控制器时的行为保持一致。
内容的提问来源于stack exchange,提问作者user2185938
相关产品推荐
相关产品推荐

