如何在October CMS中基于用户语言环境翻译找回密码邮件?
解决RainLab.User找回密码邮件本地化问题
先改对模板存放路径
别直接修改插件目录里的模板,插件更新会把你添加的文件覆盖掉。正确操作是在自己的主题目录下创建对应路径:themes/你的主题名/mail/rainlab/user/recover_password-de.htm,系统会优先加载主题里的模板,安全不会丢失。
后台模板配置要对应
在后台「系统 > 邮件模板」里新建别名user:recover_password-de,关联到刚才主题里创建的模板文件。模板里的文本要么直接写目标语言内容,要么用翻译过滤器,但得确保翻译配置到位。
关键:让邮件发送时切换到用户的locale
RainLab.User默认不会自动根据用户的区域设置切换locale,得加个事件监听来搞定:
在你的自定义插件Plugin.php或者主题的init.php里添加这段代码:
Event::listen('rainlab.user.recover.extendEmailParams', function($mailer, $user, $code) { // 强制切换到用户的区域设置 App::setLocale($user->locale); });
这段代码会在发送找回密码邮件前触发,把应用locale改成用户的设置,这样模板里的翻译过滤器才能生效。
翻译文件要配好
在主题或插件的lang/de目录下创建mail.php文件,里面放对应的翻译内容:
return [ 'all_rights_reserved' => 'Alle Rechte vorbehalten', // 其他需要翻译的邮件文本都放在这里 ];
然后模板里用{{ 'mail.all_rights_reserved'|_ }}来调用翻译,别直接写死文本。
最后测试验证
- 创建一个locale设为
de的测试用户,发起找回密码请求 - 检查邮件是否加载了德语模板,翻译内容是否正确显示
- 如果还是有问题,开启October CMS的调试模式,查看日志里是否有模板加载失败或翻译缺失的错误信息
内容的提问来源于stack exchange,提问作者Behiry
相关产品推荐
相关产品推荐

