q在同一页面中翻译插件切换语言

时间:2013-05-15 21:04:23

标签: wordpress plugins qtranslate

我的qTranslate按钮存在严重问题 现在,网络结构是:http://www.site.com/news/?lang=en

当我留在主页并尝试更改语言时,botton会打开第一篇文章(可能是因为我使用永久链接):

<?php if(qtrans_getLanguage()=='it'): ?>
    <li><a href="<?php echo qtrans_convertURL(get_permalink(), 'en'); ?>" >eng</a></li>
    <li class="liguaattiva">ita</li>
<?php endif; ?>
<?php if(qtrans_getLanguage()=='en'): ?>
    <li class="liguaattiva">eng</li>
    <li><a href="<?php echo qtrans_convertURL(get_permalink(), 'it'); ?>" >ita</a></li>
<?php endif; ?>

如何在不打开最后一篇文章或回到主页的情况下解决这个问题,但只能在同一页面中切换语言?

4 个答案:

答案 0 :(得分:2)

我在我的项目中使用qTranslate而且我没有在上面的代码中执行任何操作,并且在语言之间切换没有问题。

我所做的只是调用创建语言菜单的qts_language_menu()函数,没有别的。这将创建必要的链接,使您能够在语言之间切换,但保持在同一页面上。

答案 1 :(得分:1)

您不需要使用get_permalink()

您可以将空字符串作为url传递,将语言作为第2个参数传递 功能会休息! 就像:

$my_translated_content_url = qtrans_convertURL("", "en");

infact如果你看到函数定义:

function qtrans_convertURL($url='', $lang='', $forceadmin = false) {
  global $q_config;

  // invalid language
  if($url=='') $url = esc_url($q_config['url_info']['url']); // <-You don't need the url
  if($lang=='') $lang = $q_config['language'];
      [... the function continue...]

答案 2 :(得分:0)

链接存储在$ qTranslate_slug对象中。我创建了一个函数,可以轻松地以所需语言获取当前页面的链接:

function getUrlInTargetLanguage($targetLang){
    global $qtranslate_slug;
    return $qtranslate_slug->get_current_url($targetLang);
}

例如,如果你想获得英文链接,你应该写:

getUrlInTargetLanguage("en");

答案 3 :(得分:0)

可能是这么晚但是遵循良好的功能来轻松调用当前语言或自动生成qTranslate的任何语言URL:

// check language
function check_lang() {
    return qtranxf_getLanguage();
}

// Generate language convert URL
function get_lan_url($lang){
    echo qtranxf_convertURL('', $lang);
}

// generate inline translate short code
add_shortcode( 'translate_now', 'get_translate' );
function get_translate( $atts, $content = null ) {
    extract( shortcode_atts(
            array(
                'ar' => '',
                'en' => '',
                'es' => '',
                'fr' => '',
            ), $atts )
    );
    if ( check_lang() == 'ar' ) {
        echo $atts['ar'];
    }
    if ( check_lang() == 'en' ) {
        echo $atts['en'];
    }
    if ( check_lang() == 'es' ) {
        echo $atts['ar'];
    }
    if ( check_lang() == 'fr' ) {
        echo $atts['ar'];
    }
}

function translate_now($ar,$en,$es,$fr){
    $content = '[translate_now ar="'.$ar.'" en="'.$en.'" es="'.$es.'" fr="'.$fr.'"]';
    echo do_shortcode($content);
}

现在您可以使用check_lang()函数检查当前语言,例如:

<?php if(check_lang() == 'ar'): echo 'مرحبا'; endif;?>
<?php if(check_lang() == 'en'): echo 'Hello'; endif;?>
<?php if(check_lang() == 'es'): echo 'Hola'; endif;?>
<?php if(check_lang() == 'fr'): echo 'Bonjour'; endif;?>

此外,您可以使用函数translate_now()通过传递值来转换内联:

<?php
translate_now(
    'مرحبا', // ar
    'Hello', //en
    'Hola', //es
    'Bonjour' //fr
);
?>

同样要生成任何langauge转换URL,请使用函数get_lan_url()传递请求的语言:

<a href="<?php get_lan_url('ar');?>">العربية</a>
<a href="<?php get_lan_url('en');?>">English</a>
<a href="<?php get_lan_url('es');?>">España</a>
<a href="<?php get_lan_url('fr');?>">Français</a>