2

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

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

<?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

4 回答 4

2

我在我的项目中使用 qTranslate,我没有做任何你在上面的代码中做的事情,并且在语言之间切换没有问题。

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

于 2013-05-27T18:47:34.713 回答
1

您不需要使用 get_permalink()

您可以将一个空字符串作为 url 并将语言作为第二个参数传递,并且该函数将执行休息!就像:

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

事实上,如果你在函数定义中看到:

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...]
于 2014-05-27T14:08:16.397 回答
0

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

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

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

getUrlInTargetLanguage("en");
于 2014-10-29T14:23:35.033 回答
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
);
?>

还要生成任何语言转换 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>
于 2017-07-20T06:34:10.523 回答