是否可以临时覆盖语言设置?

时间:2014-02-14 作者:terraling

我有一个双语网站,可以在wp config中设置WPLANG之前测试cookie。php,所有文本国际化等。

我的一个问题是,通知电子邮件是用当前用户的语言发送的,而不是收件人的语言。因此,如果user1以英语发表评论,而user2以西班牙语使用网站,但以蹩脚的英语回复,则user1收到的评论通知电子邮件将以西班牙语发送。

我为每个用户存储了一个语言首选项,因此我打算自定义电子邮件的发送方式,以便它首先检查收件人的语言。

那么,问题来了。

下面是从pluggable中的wp\\u notify\\u posauthor()中提取的一个示例行。使用gettext调用构造电子邮件的php:

$notify_message  = sprintf( __( \'New comment on your post "%s"\' ), $post->post_title ) . "\\r\\n";
我希望继续使用这种基于gettext的方法。

但这意味着在构建电子邮件之前立即临时切换语言环境设置,然后立即将其切换回原来的位置。

[编辑]阅读核心文件我想我最好将其描述为在发送电子邮件之前卸载文本域,然后在需要时重新加载。为了优化,我可以专门为要加载和卸载的通知消息创建一个文本域子集,而不是整个站点的文本域,当然,在发送多个通知时,可以按语言将要发送的消息分组

这是a)有意义的,b)可能的,和c)明智的吗?

因为另一种方法是将gettext放在这里,在php中同时包含两个(最终是所有)语言版本,并根据我的语言测试相应地构建电子邮件字符串。

2 个回复
SO网友:oferwald

添加区域设置筛选器

add_filter(\'locale\', \'locale_filter\');
在过滤器中返回您选择的区域设置,

function locale_filter($locale) {
    return "whatever";
}
然而,这需要在上下文中完成,您的邮件发送触发器需要知道目标用户并从那里获取区域设置,虽然这并不容易,但可行。

SO网友:Cas Dekkers

我不确定我是否完全理解你的问题,但无论如何,我建议不要编辑WPLANG 直接的,避免把饼干弄得那么乱。WordPress已经区分了站点范围的语言设置和用户特定的语言首选项:

Site-wide language setting (Settings > General)

Site-wide language setting

User-specific language preference (Users > Your profile)

User-specific language preference

只有安装了多种站点语言时,后一种设置才可见。

这难道不能解决电子邮件翻译问题吗?

结束

相关推荐

multi-language WordPress site

我正在制作由WordPress支持的多语言网站。WPML 不是免费的,而且它对数据库进行了太多额外的sql查询,所以对于我的站点来说,这不是一个好的解决方案。qTranslate 将所有语言保存在一个数据库行中,以后移动到另一个多语言插件非常复杂。<?php _e( \'<!--:en-->english text<!--:--><!--:de-->german text<!--:-->\' ); ?> xLanguage 两年多没有更新