是否从现有的.po和.mo文件自动翻译?

时间:2017-03-08 作者:dingo_d

我正在开发一个简单的发票插件,我将用它为我的客户创建发票。工作插件可以在这里找到:

https://github.com/dingo-d/invoice-create-plugin

现在我基本上已经完成了。您可以创建发票,设置所有内容,然后在发票中单击下载,您将在pdf 插件中的文件夹。

这张pdf是英文的,因为我是用英文写的。但我也创造了一个克罗地亚人.mo.po 翻译。

我的想法是,我可以选择创建pdf文件的语言。

我搜索了一下,只发现了这个:https://stackoverflow.com/questions/9225380/using-gettext-to-translate-an-email-inside-an-ajax-call

但我真的不知道怎么用这个。

我应该使用setlocale() 在创建我的pdf之前,还是?如果我已经.mo 文件可用吗?所有字符串都是可翻译的ofc。

这能做到吗?

EDIT

到目前为止,这些措施奏效了:

将整个管理语言设置为克罗地亚语,会影响插件和生成的pdf。

这是一个很糟糕的解决方案,因为每次我想发布pdf时都需要更改语言。

挂钩到locale 滤器

add_filter( \'locale\', \'mbd_change_locale\', 10 );

function mbd_change_locale() {
    return \'hr_HR\';
}
这也会影响一切。

我有没有办法在AJAX调用中使用这个过滤器来更改语言环境并强制转换?

1 个回复
最合适的回答,由SO网友:dingo_d 整理而成

通过添加解决

if ( isset( $_POST[\'language\'] ) ) { // Input var okay.

    add_filter( \'locale\', \'mbd_set_my_locale\' );
    /**
     * Set locale based on the $_POST choice.
     *
     * @param  string $locale Locale code.
     * @return string         Selected locale code.
     */
    function mbd_set_my_locale( $locale  ) {
        $language = sanitize_text_field( wp_unslash( $_POST[\'language\'] ) ); // Input var okay.

        if ( \'hr\' === $language ) {
            $locale = \'hr\';
        } else {
            $locale = \'en\';
        }
        return $locale;
    }
}
在初始化主插件类之前。

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。