QTranslate-用两种语言显示文章

时间:2013-05-06 作者:diestreich

我想用两种语言显示我页面上的所有文章,同时菜单和所有内容都用语言选项翻译。

<?php 
$id=5; $post = get_page($id); 
$content = qtrans_use(\'fr\', $post->post_content,false); 
echo $content;  
?>
这就是我能做到的。但我希望每一篇文章都是动态的。

谢谢你的帮助!

1 个回复
SO网友:djjeck

如果您这样做,您可能很容易破坏任何其他与帖子内容相关的插件,如自定义图库、摘录插件等。我认为有一种破坏性较小的方式来实现你(我们)的目标。

当即将显示帖子时,功能qtrans_useCurrentLanguageIfNotFoundShowAvailable 由qTranslate调用,作为筛选器附加在the_content

由于wordpress主题是在插件之后执行的(我假设您编写的是主题而不是插件),因此您可以用自己的钩子替换该钩子,输出您想要的语言。

您可以这样做(在functions.php文件中)

// Remove qTranslate default display hook.
// If this code breaks, update the parameters according to
// the qtranslate_hooks.php file of the plugin.
remove_filter(\'the_content\', \'qtrans_useCurrentLanguageIfNotFoundShowAvailable\', 0);

// Add a custom filter for the content
add_filter(\'the_content\', \'qtrans_useLanguagesIDecide\', 0);
function qtrans_useLanguagesIDecide($content) {
  $YOUR_LANGUAGES = array(\'en\', \'fr\');
  $output = \'\';
  foreach($YOUR_LANGUAGES as $language)
    $output .=
        \'<div class="language-\'.$language.\'">\'.
          qtrans_use($language, $content, true).
        \'</div>\';
  return $output;
}
还请注意,您可能希望类似地覆盖其他挂钩,如the_excerptthe_content_rss.

如果您的博客可能没有每个帖子的所有语言(如我的),您可能还需要改进过滤器,以避免出现“抱歉,此条目仅在法语中可用”的消息,而不是偶尔丢失的英语翻译:

function qtrans_useLanguagesIDecide($content) {
  $YOUR_LANGUAGES = array(\'en\', \'fr\');

  $show_languages = $YOUR_LANGUAGES;
  $qtranslate_languages = qtrans_split($content); // take a peek at translated content
  foreach($show_languages as $key => $language) {
    $translated_content = isset($qtranslate_languages[$language]) ? trim($qtranslate_languages[$language]) : \'\';
    if(empty($translated_content))
      // remove missing language
      unset($show_languages[$key]);
  }

  $output = \'\';
  foreach($show_languages as $language)
    $output .=
        \'<div class="language-\'.$language.\'">\'.
          qtrans_use($language, $content, true).
        \'</div>\';
  return $output;
}
在这种情况下,不要试图使用$translated_content 直接来说,因为qTranslate比我们做得更好。

结束

相关推荐