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 として、言語を 2 番目のパラメーターとして渡すだけで、関数は残ります。と同じように:

$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 に答える