Set language per post

时间:2016-04-02 作者:Fahad Alduraibi

我有一个以英语为主,阿拉伯语为辅的双语博客。目前,我使用帖子“自定义字段”来表示帖子是阿拉伯文的,我在我的子主题中使用该字段来将方向更改为RTL,并将文本翻译为阿拉伯文,但是,我手动这样做,这意味着我使用两种语言的字符串完全自定义主题,并根据自定义字段值选择正确的主题,还为帖子标题的html标记设置方向,正文和注释。但是,它正在工作,稍后更改主题意味着我需要重做所有事情。我也在尝试使用一个评论插件“wpDiscuz”,但除了编辑插件本身之外,没有其他简单的方法来控制语言,我不想这样做,因为我希望能够轻松地更新它,而不是在每次更新后重做更改。

因为WP已经支持阿拉伯语,并将其翻译为。mo文件具有正确的rtl css,并且新插件支持。mo翻译。我想我会利用这一点,并找到一个方法,将wordpress语言更改为阿拉伯语,仅适用于某些帖子。然而,我仍然不能做这件事。

我创建了一个带有单个文件的插件functions.php 内容如下:

function my_reset_locale($locale) {
    $locale = \'ar\';
    return $locale;
}
add_filter(\'locale\',\'my_reset_locale\',10);
这一个改变了它的所有内容(头版和所有单个帖子),我尝试读取帖子ID

global $post;
$postId = isset($post) ? $post->ID : \'\';
但是,对我的函数的前4次调用发生在$post->ID设置之前,如果我等到它设置好,那就太晚了,因为语言已经加载了,而在这之后更改$locale则没有任何作用。

那么,在阅读语言之前(我认为是调用“load\\u textdomain”来根据语言环境选择翻译),我可以做些什么来尽早获得有关帖子的信息呢

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

我找不到答案,所以我最终提供了解决方案。

这并不简单,因为我既不是wordpress的专家,也不是php的专家,但wordpress文档非常棒,所以下面是解决方案:

// Set the post language when loading up the page based on the store meta
function ppl_set_post_language() {
    $postID = url_to_postid( $_SERVER["REQUEST_URI"] );
    if ($postID > 0) {
        $postLanguage = esc_attr( get_post_meta( $postID, \'_ppl_post_language\', true ) );
        if ( ! empty( $postLanguage ) ) {
            global $locale;
            $locale = $postLanguage;
        }
    }
}
// Any call to \'url_to_postid\' earlier then \'setup_theme\' will generate a fatal error.
add_action(\'setup_theme\', \'ppl_set_post_language\');
编辑帖子或页面时,存储语言代码(例如。en_USar) 在岗位上meta. 这一部分很简单,但问题是当显示页面时,何时运行检查语言的代码?如果你运行得太早,你将没有帖子ID,因为它还没有被wordpress加载,如果你等待并运行代码太晚,那就太晚了,因为wordpress将加载默认语言。我找到的最佳点是行动setup_theme 因为在那一步,翻译还没有加载,我们可以调用url_to_postid 获取用于检索post meta的post ID。

完成后,我想为什么不创建一个其他人可以从中受益的WordPress插件呢

https://wordpress.org/plugins/per-post-language/

相关推荐

month name translation

我使用birdtips主题,它将发布日期格式化为$birdtips_posted = date(__(\'Y. F j.\', \'birdtips\'), strtotime(get_the_time(\"Y-m-d\"))); 其中Y.F.j.已经被改写以反映我的语言。据我所知,\\uuuu是翻译功能,但我如何告诉Wordpress我使用匈牙利语,它会自动翻译月份名称,或者我应该在中给出名称。采购订单文件?