es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo utilizar la función __() en PHP (en el backend, no en el frontend) y devolverla a la llamada Ajax.

Tengo un problema con la función __() en PHP.
En mi proyecto de WordPress, estoy haciendo una llamada de retorno ajax para obtener la traducción por una razón que no se puede evitar. Durante la llamada de retorno, estoy haciendo una consulta a la base de datos. Por ejemplo, ‘SELECT title from products’. El valor de ‘title’ es “¡ABC es fácil como 123!”.

Luego necesito devolver el valor al frontend. Pero tiene que estar en el idioma preferido del usuario, es decir, chino. Así que tengo que devolverlo como ‘ABC 就像 123 一样简单!’.

Hasta ahora, he intentado la función e(), _(), gettext() en la función de retorno, pero ninguno de ellos resuelve el problema.
Probarlo en la página PHP (como html) no tiene ningún problema.

Código JS:

function translation(text){
console.log("text=",text);
var res="";
$.ajax({
    url: ajaxurl,
    data: {action:"get_translations",text:text},
    async: false,
    success: function(response) {
        res = JSON.parse(response);
        console.log("res=",res);
    }
});

return res;
}

Código PHP:

function get_translations($data){
    $text = _( $data["text"] );
    $text = gettext($data["text"]);
    error_log("text = ".$text.";");
    error_log("gettext=".gettext("My Membership").";");
    echo wp_json_encode($text);
}

Editar: También debería mencionar que la función PHP get_translations() está en el tema, no en el plugin.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para el problema con la función __() en PHP

    El problema mencionado en la pregunta se puede resolver utilizando la función gettext() en PHP con los archivos de traducción de idioma específicos. Parece que el código ya está utilizando esta función, pero no con los argumentos correctos. Aquí está cómo se puede solucionar:

    1. Asegúrese de que los archivos de traducción de idioma existan para el idioma al que desea traducir. En este caso, parece que se desea el idioma chino.
    2. Cargue los archivos de traducción de idioma en el código PHP. Esto se puede hacer con la función load_theme_textdomain(). Por ejemplo:

    load_theme_textdomain( 'mi-tema', get_template_directory() . '/languages' );
    

    Donde ‘mi-tema’ es el dominio de texto de su tema y ‘/languages’ es el directorio donde se almacenan los archivos de traducción de idioma.

    1. Utilice la función gettext() con el texto deseado para traducir. Por ejemplo:
    $texto = gettext( 'ABC is easy as 123!' );
    

    Esto devolverá el texto traducido si existe en los archivos de traducción de idioma.

    1. Si el texto traducido no existe en los archivos de traducción de idioma, devolverá el texto original. Para evitar esto, agregue el texto a los archivos de traducción manualmente. Por ejemplo, en el archivo .po:
    msgid "ABC is easy as 123!"
    msgstr "ABC 就像 123 一样简单!"
    
    1. Llame a la función gettext() con el dominio de texto traducido. En este caso, debería ser ‘mi-tema’, que fue cargado en el paso 2. Por ejemplo:
    $texto = gettext( 'ABC is easy as 123!', 'mi-tema' );
    

    Eso debería solucionar el problema con la función __() en PHP.

Comments are closed.