SummArg | Cursos y recursos para webmasters

31/08/2011

Gestionar traducciones manuales en WordPress con qTranslate

qTranslate es un plugin muy popular para WordPress que nos ayuda a gestionar múltiples traducciones de nuestros contenidos. El entorno para la edición es muy simple y claro, generando un campo para cada idioma en que deseamos traducir el título y una pestaña para cambiar el idioma en el editor tinyMCE.

Permite generar tres tipos de urls:

  • Modo query (?lang=en)
  • Modo pre-path ( /en/%permalink%)
  • Modo pre-domain (http://en.domain.com)

 

Para añadir una botonera que permita cambiar de idioma, simplemente bastará con crear un área de widgets y agregar el que genera gTranlate, con opciones para mostrar texto y bandera o un menú dropdown para agilizar la selección.

Para utilizar condicionales por idioma en nuestra plantilla, ya sea para cargar diferentes menús o widgets en general por idioma, deberemos utilizar un condicional como el siguiente:

<?php if(qtrans_getLanguage()=='es'): ?>
<?php wp_nav_menu( array( 'theme_location' => 'menu-espaniol' ) ); ?>
<?php else: ?>
<?php wp_nav_menu( array( 'theme_location' => 'menu-english' ) ); ?>
<?php endif; ?>

 

Dejar un comentario

  1. Alain

    Hola!

    Gracias por vuestra ayuda, tengo una duda, ¿sabeis como puedo dejar fijo en la cabecera el cambio de idioma?

    Saludos!!!

  2. carlos

    Y si por defecto el idioma español, y quiero tener ingles y aleman, como quedaria la ultima parte del codigo que has publicado.

    ‘menu-espaniol’ ) ); ?>

    ‘menu-english’ ) ); ?>

  3. Nekko

    Probá con algo como esto:

    < ?php if(qtrans_getLanguage()=='es'): wp_nav_menu( array( 'theme_location' => ‘menu-espaniol’ ) );
    elseif(qtrans_getLanguage()==’en’):
    wp_nav_menu( array( ‘theme_location’ => ‘menu-english’ ) );
    else:
    wp_nav_menu( array( ‘theme_location’ => ‘menu-aleman’ ) );
    endif; ?>

  4. carlos

    Gracias por la respuesta.

    Pero funciona a medias. El idioma cambia, pero solo el texto principal de la web, no cambia el menú personalizado.

    En functions.php creo que hay que insertar mas variables en el menú, yo tengo 3, para español, ingles y aleman. Pero no se si estan bien, y por eso falle.

    Estoy utilizando un theme básico de WordPress el Twenty Ten.

  5. Nekko

    Asegurate que los menús en apariencia > menu tengan los nombres adecuados (menu-espaniol, menu-english y menu-aleman).

    http://codex.wordpress.org/Function_Reference/wp_nav_menu

    Para registrar los menús en el functions.php bastaría con insertar el siguiente código y contame si te dió resultado:

    add_action( ‘init’, ‘my_custom_menus’ );
    function my_custom_menus() {
    register_nav_menus(
    array(
    ‘menu-espaniol’ => __( ‘Menu Español’ ),
    ‘menu-english’ => __( ‘Menu English’ ),
    ‘menu-aleman’ => __( ‘Menu Aleman’ )
    )
    );
    }

  6. carlos

    Gracias Nekko, funciona perfectamente.

    Ahora tengo otras dudas, ya que si pongo un menu personalizado en un widget para la sidebar, como puedo indicar que en español muestre uno menu y en ingles y alemano otro con sus respectivos enlaces en el idioma correspondiente.

  7. carlos

    Del ultimo codigo he tenido que quitar esta parte para que funcione

    add_action( ‘init’, ‘my_custom_menus’ );
    function my_custom_menus() {

    Aunque me he dado cuenta, que en el menu español, tambien aparece el de aleman, el unico que esta bien es el de ingles.

  8. oye no me salen las opciones para escoger el idioma dentro de las paginas. estoy utilizando un tema llamado Travel Blogger. que pasara?

  9. Colocaste el widget? Estás seguro de que el área de widgets del theme funciona correctamente?

  10. carlos

    Hola,

    Tengo la página de inicio configurada para que muestre una página estática, a esa página estática le tengo asociado un widget de menú personalizado.

    Como puedo indicar que ese widget de menú personalizado, aparezca en el idioma correspondiente??

    Gracias.

  11. Buenas noches! Gracias por los apuntes, la verdad es que para alguien como yo, que no tengo mucha idea de php, nos orienta para saber qué hacer con el código. Tengo dudas sobre como hacer lo que comentais, pero igual explico lo que tengo yo y me decís si es correcto.
    Querría tener un sidebar diferente por idioma (tengo 3 – francés, español y portugués). Entiendo que tendría que introducir algo como esto:

    ‘menu-espaniol’ ) );
    elseif(qtrans_getLanguage()==’fr’):
    wp_nav_menu( array( ‘theme_location’ => ‘menu-frances’ ) );
    else:
    wp_nav_menu( array( ‘theme_location’ => ‘menu-portugues’ ) );
    endif; ?>

    Dos dudas: a) esto me haría tener un menú por idioma, pero no el sidebar, no?; b) donde tendría que meter este código? en el page.php
    Y para tener un sidebar y no un menú por idioma, podría ser? qué código tendría que meter?

    Por último, tendría que cambiar el funtions.php y meter algo como esto:

    add_action( ‘init’, ‘my_custom_menus’ );
    function my_custom_menus() {
    register_nav_menus(
    array(
    ‘menu-espaniol’ => __( ‘Menu Español’ ),
    ‘menu-frances’ => __( ‘Menu Frances’ ),
    ‘menu-portugues’ => __( ‘Menu Portugues’ )
    )
    );

    De nuevo, si fuese para un sidebar?
    Ya acabo, en realidad estoy usando el Widget “Slick Contact Forms” y me serviría con tener esto traducido por idioma, pero como no consigo hacerlo, igual es mejor tener el sidebar completo por idioma y repetir todos los widgets que quiera en cada sidebar, verdad??

    Muchas gracias adelantadas!
    }

  12. carlos

    Yo estoy un poco igual.

    No consigo tener el sidebar para cada idioma. Me gustaria saber alguna solución sencilla, ya que estoy tocando el archivo sidebar.php y no consigo que funcione.

    Estaba probando con codigo de la siguiente manera, probando con 2 idiomas, pero lo que hace es duplicar los widgets.

  13. carlos

    Estoy probando con este codigo.:

    if ( is_active_sidebar( ‘sidebar-es’ ) ) : ?>

    if(qtrans_getLanguage()==’es’):
    dynamic_sidebar( ‘sidebar-es’ ); ?>
    php else:

    php endif:

    php endif;

  14. carlos

    El codigo anterior no es el que estoy pegando, supongo que el editor de comentarios no admite el codigo php.

  15. Nekko

    Hola Carlos! La verdad es que no lo he probado en una sidebar, pero siguiendo la lógica no tenemos mas que colocar condicionales para que cargue diferentes sidebars dependiendo del idioma.

    < ?php if(qtrans_getLanguage()=='es'): get_sidebar('espaniol');
    elseif(qtrans_getLanguage()=='en'): get_sidebar('ingles');
    endif; ?>

    Y por supuesto crearía las dos sidebars (sidebar-espaniol.php y sidebar-ingles.php). No lo he probado, pero creo que por ahí podría andar el asunto.

  16. Tengo una duda, que se debe poner en donde pone theme_location?

    Lo que quiero es que dependiendo del idioma, el menú principal muestre unos elementos u otros.

    Un saludo

Dejar un comentario