Soporte » Plugins y Hacks » Loco translate no encuentra las cadenas dentro de un array

  • Resuelto Enery88

    (@enery88)


    Hola, tengo una array que incluye la función _(string,textdomain) dentro de cada hueco de esta. ¿Es posible que loco translate no encuentre las cadenas de texto porque es una mala praxis? ¿O debería de poder cogerlas? Esta es la array a la que me refiero:

    $months_of_year = array(
      __('January','mgm'),
      __('February','mgm'),
      __('March','mgm'),
      __('April','mgm'),
      __('May','mgm'),
      __('June','mgm'),
      __('July','mgm'),
      __('August','mgm'),
      __('September','mgm'),
      __('October','mgm'),
      __('November','mgm'),
      __('December','mgm')
    );

    Gracias por la ayuda!!

    • Este debate fue modificado hace 2 años, 3 meses por Fernando Tellado. Razón: Movido al foro adecuado
Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • Hola @enery88 acabo de probar el array con las correspondientes traducciones en el archivo po y funciona correctamente.

    Es decir, creo el array que muestras, con el poedit escaneo el plugin de prueba creado, encuentra todos los meses, los traduzco, y desde el plugin muestro por ejemplo enero con echo esc_html( $months_of_year[0] ); y me muestra Enero correctamente.

    Si no te funciona, el problema debe ser distinto de la función i18n, ya que la función está usada correctamente.

    Moderador josearcos

    (@josearcos)

    Hola @enery88, tal como comenta @carloslongarela, el array está bien formado y la función bien utilizada. ¿Puedes compartir el código completo? ¿Qué hook estás utilizando en la función que encapsula ese código?

    Saludos.

    Hola @josearcos y @carloslongarela, gracias por vuestra ayuda. Pues veréis, lo que sucede es que comparo es array con otra que viene de la base de datos, y me he dado cuenta que debo dejarla como un string sin la función de traducción, así que ahora ahí no tengo el problema sino aquí, no se porque me pasa lo mismo con el texto del option que con el array que puse en el tema. no me da error el plugin de loco translate pero tampoco me encuentra esas cadenas para traducir.

    function display_custom_channel_fields($post){ ?>
    <div class="form-field form-required wrap">
    	<label for="_month_field"><?= __( 'Month', 'textdomain' ) ?></label>
    	<select class="select post-form" id="_month" name="_month_field" value="<?= esc_attr( $month ) ?>" required>
    <?php
    $months_of_year = array('January','February','March','April','May','June','July','August','September','October','November','December');
    					
    foreach($months_of_year as $month_of_year) {
    	$selected= (esc_attr( $month ) == $month_of_year)? 'selected' : ''; ?>
    	<option <?= $selected ?> value="<?= esc_attr( $month_of_year ) ?>"><?= __($month_of_year,'mgm') ?></option>
    <?php } ?>
    	</select>
    </div>
    <?php } ?>

    Tienes que agregar esas traducciones en el po del plugin con loco translate. Intenta agregarlo manualmente @enery88

    Hola @enery88 ya que el problema no es con la traducción sino algo totalmente distinto, deberías abrir una nueva entrada con la nueva pregunta para que quede correctamente ordenado.

    Una recomendación viendo el código, deberías seguir los WordPress Coding Standards y por ejemplo para las comparaciones utilizar === (también comparación de tipo), nunca utilizar <? en lugar de <?php ni sustituir <?php =en lugar de <?php echo es una mala práctica ya que muchas configuraciones de PHP no tienen habilitados los shortgas y está desaconsejada directamente desde PHP http://php.net/manual/es/language.basic-syntax.phptags.php

    Esperamos el nuevo post para poder ver si encontramos una solución 🙂

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • El debate ‘Loco translate no encuentra las cadenas dentro de un array’ está cerrado a nuevas respuestas.