如何根据用户在 WordPress 中的语言动态更改电子邮件的语言?
How to change the language of the email dynamically according to user's language in WordPress?
我正在寻找一种通过自定义插件使用 wp_mail()
功能根据用户语言发送简单 WordPress 电子邮件的方法。一旦我通过设置切换 WordPress 语言,我就可以翻译电子邮件并以正确的语言接收电子邮件。但是如何根据用户的语言动态更改电子邮件的语言?
我已经保存了一个用户列表以及他们的首选语言。主题和电子邮件内容被翻译成不同的语言。出于测试目的,我一直在尝试强制使用语言环境,但它似乎没有任何作用,而且电子邮件仍以默认的 WordPress en_US 语言环境到达。
$locale = 'es_ES';
switch_to_locale($locale);
$to = 'test@email.com';
$subject = __('Email subject', 'textdomain');
$message = __('My email content', 'textdomain');
wp_mail( $to, $subject, $message, $headers );
restore_previous_locale();
如果能收到一些反馈、经验或知识,我将不胜感激。如何简单地切换一些字符串的语言环境,然后将其恢复到原来的状态?
看来我终于成功了。
- 首先 - 确保您已准备好包含适当翻译的 .mo 翻译文件
- 调用
switch_to_locale($locale);
后,您还必须加载文本域。我使用了 load_plugin_textdomain()
函数。
如果有人遇到这个线程,这里是更新后的代码:
$locale = 'es_ES';
switch_to_locale($locale);
load_plugin_textdomain('textdomain', false, basename( plugin_dir_path( __DIR__ ) ) . '/languages');
$to = 'test@email.com';
$subject = __('Email subject', 'textdomain');
$message = __('My email content', 'textdomain');
wp_mail( $to, $subject, $message, $headers );
restore_previous_locale();
我正在寻找一种通过自定义插件使用 wp_mail()
功能根据用户语言发送简单 WordPress 电子邮件的方法。一旦我通过设置切换 WordPress 语言,我就可以翻译电子邮件并以正确的语言接收电子邮件。但是如何根据用户的语言动态更改电子邮件的语言?
我已经保存了一个用户列表以及他们的首选语言。主题和电子邮件内容被翻译成不同的语言。出于测试目的,我一直在尝试强制使用语言环境,但它似乎没有任何作用,而且电子邮件仍以默认的 WordPress en_US 语言环境到达。
$locale = 'es_ES';
switch_to_locale($locale);
$to = 'test@email.com';
$subject = __('Email subject', 'textdomain');
$message = __('My email content', 'textdomain');
wp_mail( $to, $subject, $message, $headers );
restore_previous_locale();
如果能收到一些反馈、经验或知识,我将不胜感激。如何简单地切换一些字符串的语言环境,然后将其恢复到原来的状态?
看来我终于成功了。
- 首先 - 确保您已准备好包含适当翻译的 .mo 翻译文件
- 调用
switch_to_locale($locale);
后,您还必须加载文本域。我使用了load_plugin_textdomain()
函数。
如果有人遇到这个线程,这里是更新后的代码:
$locale = 'es_ES';
switch_to_locale($locale);
load_plugin_textdomain('textdomain', false, basename( plugin_dir_path( __DIR__ ) ) . '/languages');
$to = 'test@email.com';
$subject = __('Email subject', 'textdomain');
$message = __('My email content', 'textdomain');
wp_mail( $to, $subject, $message, $headers );
restore_previous_locale();