Ocultar idioma WPML

5 minutos de lectura

avatar de usuario
Oshrib

estoy usando WPML idioma, y ​​no puedo encontrar una solución para lo siguiente:

En el conmutador de idioma, quiero ocultar el idioma, digamos, por ejemplo, “él”, si el idioma actual es, digamos, por ejemplo, “ar”, de modo que cuando estemos en el sitio árabe no veremos en el selector el hebreo, y lo mismo si estamos en hebreo, el árabe no se mostrará.

En palabras cortas: lo que quiero es, si estamos en un sitio árabe, la bandera hebrea estará oculta.

Lo que probé:

function language_selector_flags(){
    $languages = icl_get_languages('skip_missing=0');
    if(!empty($languages)){
       if(ICL_LANGUAGE_CODE=='en') 
       {
$order = array('ar'); //Specify your sort order here
       }
elseif(ICL_LANGUAGE_CODE=='he')
{
$order = array('en', 'ar'); //Specify your sort order here
}

        foreach ($order as $l) {
            if (isset($languages[$l])) {
                $l = $languages[$l]; //grab this language from the unsorted array that is returned by icl_get_languages()

                //Display whatever way you want -- I'm just displaying flags in anchors  (CSS: a {float:left; display:block;width:18px;height:12px;margin:0 2px;overflow:hidden;line-height:100px;})
                if($l['active']) { $class = "active"; $url=""; } else { $class=""; $url="href="".$l['url'].'"'; }
                echo '<a '.$url.' style="background:url('.$l['country_flag_url'].') no-repeat;" class="flag '.$class.'">';
                echo $l['language_code'].'';
            }
        }
    }
}

No afecta en absoluto al selector.

  • entonces, ¿solo desea que se muestre el idioma/bandera actual?

    – birgire

    23 de diciembre de 2013 a las 2:54

avatar de usuario
birgire

Puedes consultar el complemento Indicador de WPML en el menú.

Podrías usar el plugin_wpml_flag_in_menu() función del complemento (ver código fuente aquí) y reemplaza:

// Exclude current viewing language             
if( $l['language_code'] != ICL_LANGUAGE_CODE )
{
    // ...
}

con

// Include only the current language                
if( $l['language_code'] == ICL_LANGUAGE_CODE )
{
    // ...
}

para mostrar solo el idioma/bandera actual, si te entiendo correctamente.

PD: Si necesita más ayuda, podría, por ejemplo, mostrarnos el resultado de esta función de depuración para el idioma activo:

function debug_icl_active_language()
{
    $languages = icl_get_languages( 'skip_missing=0' );
    foreach( (array) $languages as $l )
    {
        if( $l['active'] )
        { 
            printf( '<pre> Total languages: %d - Active: %s </pre>', 
                    count( $languages ), 
                    print_r( $l, TRUE ) );
        }
    }
}

  • Oye, quiero hacer esta pregunta… lo que obtengo ahora es que la bandera actual no se muestra… lo que quiero es, si estamos en un sitio en árabe, la bandera hebrea estará oculta hotel7777.com

    – Oshrib

    5 de enero de 2014 a las 23:28


  • @Bside Puede intentar depurar con el debug_icl_active_language() función

    – birgire

    6 de enero de 2014 a las 1:52


  • ¿Puedes compartir el resultado de la función de depuración?

    – birgire

    9 de enero de 2014 a las 2:01

Tengo un enlace útil para ti, por favor revísalo primero:

http://wpml.org/forums/topic/hide-language-vs-display-hidden-languages-in-your-profile-not-working/

http://wpml.org/forums/topic/hide-one-language/

http://wpml.org/forums/topic/hiding-active-language-in-menu/

http://wpml.org/forums/topic/language-selector-how-to-hide-one-language/

Gracias

avatar de usuario
Boris Belensky

function language_selector_flags(){
    $languages = icl_get_languages('skip_missing=0');
    if(!empty($languages)){
        $filter = array();
        $filter['ar'] = array( 'he' );
        // set your other filters here

        $active_language = null;
        foreach ($languages as $l)
            if($l['active']) {
                $active_language = $l['language_code'];
                break;
            }

        $filter = $active_language && isset( $filter[$active_language] ) ? $filter[$active_language] : array();
        foreach ($languages as $l) {

                //Display whatever way you want -- I'm just displaying flags in anchors  (CSS: a {float:left; display:block;width:18px;height:12px;margin:0 2px;overflow:hidden;line-height:100px;})
                if( in_array( $l['language_code'], $filter) )
                    continue;
                if($l['active']) { $class = "active"; $url=""; } else { $class=""; $url="href="".$l['url'].'"'; }
                echo '<a '.$url.' class="flag '.$class.'"><img src="', $l['country_flag_url'], '" alt="', esc_attr( $l['language_code'] ), '" /></a>';
            }
        }
    }

EDITAR: Si lo hago bien, su cliente (supongo) no quiere que sus clientes (especialmente los israelíes) sepan que también ofrece servicio a los clientes de habla árabe. Si es así, entonces puedes analizar el Accept-Language encabezado y filtre el selector de idioma según el resultado.

  • Mi cliente no quiere que el árabe vea el botón de idioma de Israel… tienes la idea.

    – Oshrib

    9 de enero de 2014 a las 8:00


  • mmm, comienza a verse como mi cliente quiere, excepto el error y cómo se ven las banderas: hotel7777.com/?lang=ar

    – Oshrib

    9 de enero de 2014 a las 8:16

  • Ahora eliminé el error, pero aún veo el nombre del idioma en la bandera… ¿cómo puedo solucionarlo?

    – Oshrib

    9 de enero de 2014 a las 8:22

  • Puedes verlo en el pie de página

    – Oshrib

    9 de enero de 2014 a las 8:58

  • Edité el código en mi respuesta para cambiar el nombre de idioma a la bandera de idioma.

    – Boris Belensky

    9 de enero de 2014 a las 13:42

Tengo un problema/problema similar:

En este sitio web: https://neu.member-diving.com/

Tengo idiomas que no necesito en el conmutador. Probé el código anterior, pero nada cambió hasta ahora.

Entonces, lo que me gustaría hacer es, cuando un cliente está en una página “alemana”, los otros idiomas alemanes en el conmutador no deberían estar allí, solo el inglés y el alemán real.

¿Dónde necesito poner código como

function language_selector_flags(){
    $languages = icl_get_languages('skip_missing=0');
    if(!empty($languages)){
        $filter = array();
        $filter['ar'] = array( 'he' );
        // set your other filters here

        $active_language = null;
        foreach ($languages as $l)
            if($l['active']) {
                $active_language = $l['language_code'];
                break;
            }

        $filter = $active_language && isset( $filter[$active_language] ) ? $filter[$active_language] : array();
        foreach ($languages as $l) {

                //Display whatever way you want -- I'm just displaying flags in anchors  (CSS: a {float:left; display:block;width:18px;height:12px;margin:0 2px;overflow:hidden;line-height:100px;})
                if( in_array( $l['language_code'], $filter) )
                    continue;
                if($l['active']) { $class = "active"; $url=""; } else { $class=""; $url="href="".$l['url'].'"'; }
                echo '<a '.$url.' class="flag '.$class.'"><img src="', $l['country_flag_url'], '" alt="', esc_attr( $l['language_code'] ), '" /></a>';
            }
        }
    }

¿Ha sido útil esta solución?