如何解决PHP的gettext不能改变语言临时
在我的项目中,我想向多语言收件人发送通知电子邮件。对于这种情况,已经设置了gettext并可以在网站上正常工作。每个用户都有一个语言环境属性,其中包含他的语言设置。我的代码如下:
$users = [User,User,User];
foreach($users as $user) {
$userLocale = $user->getLocale(); // e.g. en_US,de_DE
putenv("LC_ALL=".$userLocale);
setlocale(LC_ALL,$userLocale);
$content = _("Hello there");
$user->sendNotificationMail($content);
}
该代码将忽略刚设置的语言,并将字符串始终转换为其默认语言循环中设置的第一种语言。 (在这种情况下为德语)
但是当我对putenv("LC_ALL=en_US");
进行硬编码时,它可以工作。
我在这里想念什么?
编辑:
似乎php无法根据需要多次切换语言。 第一次切换成功,但随后的切换似乎失败,或者gettext没有考虑到更改。
我的测试代码:
$payload = "";
putenv("LANG=en_US");
setlocale(LC_ALL,"en_US");
$payload .= _("Add")." - ".getenv("LANG");
putenv("LANG=it_IT");
setlocale(LC_ALL,"it_IT");
$payload .= _("Add")." - ".getenv("LANG");
putenv("LANG=de_DE");
setlocale(LC_ALL,"de_DE");
$payload .= _("Add")." - ".getenv("LANG");
//output: Add - en_USAdd - it_ITAdd - de_DE
//moving de_DE to the top
//output: hinzufügen - de_DEhinzufügen - en_UShinzufügen - it_IT
wtf正在进行吗?
我也尝试删除$payload
的第一个变量设置。然后所有随后的gettext调用将使用设置的第二种语言。
解决方法
尝试将语言代码作为参数发送到sendNotificationMail()中,并在将竞争内容发送给客户端之前在该方法内设置$ userLocale
,似乎您必须每次都设置文本域。
putenv("LANG=".$locale);
setlocale(LC_ALL,$locale);
textdomain($domain);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。