Pregunta

He comenzado a usar gettext para traducir texto y los mensajes que envío al usuario. Estoy usando poedit como editor, pero yo estoy luchando con mensajes dinámicos.

Por ejemplo, tengo cosas como el inicio de sesión donde tengo una variable que indica el tipo de error.

$this->translate('page-error-' . $error);

Cuando i actualización automática de poedit esto se lee como "página-sin errores". Lo que hago es tener un archivo Dónde coloco llamadas ficticias para traducir el método con todas las claves posibles hacer que se añadan en mi poedit cuando la actualización automática.

Particularmente no me gusta esta situación. ¿Cómo hacen ustedes a él.

Gracias por sus ideas

¿Fue útil?

Solución

No - esto no es posible, porque el editor (y las herramientas gettext) están leyendo sus fuentes, no la ejecución de su programa. Vas a tener que mantener las llamadas ficticias o agregar las claves a los archivos la traducción en sí mismo.

Otros consejos

¿Está tratando algo así como

$this->translate(sprintf('page-error-%s', $error));

Me encontré con el mismo problema.

Por ejemplo, he

en php

//Gives FORM_HEADER_ADD or FORM_HEADER_EDIT
echo $this->translate('FORM_HEADER_' . strtoupper($this->data)); 

Cuando i sincronía con poedit será recoger 'FORM_HEADER_' que no es un identificador que he (generado) en el código.

Así que tuve que solucionar el problema de mi dando Poedit identificadores completos que he resuelto de la siguiente manera en php

echo ($this->data === 'add') ? $this->translate('FORM_HEADER_ADD') : $this->translate('FORM_HEADER_EDIT');

ACTUALIZACIÓN!

Me quedé mirando a este problema. Y yo actualmente dejaron de importar desde la fuente. Esta es la forma en que continúo hasta que encuentre una mejor solución

  1. Construir aplicación y utilizar tantos identificadores estáticos como sea posible.
  2. Habilitar registro de identificadores no traducidas (dinámicos)

    protected function _initMyTranslate(){
    
        $date = new Zend_Date();
        $fileName = sprintf('/../logs/translation_%1$s.log', $date->toString('dd-MM'));
    
        $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . $fileName);
        $log    = new Zend_Log($writer);
    
        // get the translate resource from the ini file and fire it up
        $resource = $this->getPluginResource('translate');
        $translate = $resource->getTranslate();
    
        // add the log to the translate
        $translate->setOptions(
                array(
                    'log'             => $log,
                    'logUntranslated' => true
                )
            );
    
        // return the translate to get it in the registry and so on
        return $translate;
    }
    
  3. Uso Poedit para sincronizar con una fuente y traducir las cadenas que se encuentran.

  4. Durante la fase / depuración de pruebas para comprobar el registro de cadenas sin traducir.
  5. Añadir las cadenas sin traducir en el fichero .po.

    msgid "IDENTIFIER"
    msgstr "TRANSLATION STRING"
    
  6. Abrir archivo po y guardarlo para crear el archivo MO (NO sincronización con la fuente o todo está perdido).

ACTUALIZACIÓN 2.

Ahora uso un archivo separado para mis identificadores manuales, mediante el uso de un editor de texto (gedit / bloc de notas). Ahora tengo dos archivos:

  1. Auto generada por poedit llamado .po
  2. archivo editted manualmente llamado _manual.po

i configurado mi traducirá en application.ini para escanear todos los archivos del directorio de idioma

resources.translate.adapter = gettext
resources.translate.content = APPLICATION_PATH "/../library/languages/"
resources.translate.locale = auto ;use en to force english or nl for dutch..etc
resources.translate.scan = directory
resources.translate.options.disableNotices = false

Si desea traducir a otro idioma en poedit hacer archivo -.> Nuevo catálogo de fichero POT, y comenzar la traducción de sus cadenas añadidos manualmente

Si usted tiene un número finito de errores, se puede añadir un poco de código ficticio dentro de un if (false) estado, cuyo único propósito es tener PoEdit recoger las traducciones.

Por ejemplo:

if (false) {
  _('role_visitor');
  _('role_hiker_reader');
  _('role_hiker');
  _('role_translator');
  _('role_proofreader');
  _('role_moderator');
  _('role_moderator_2');
  _('role_moderator_3');
  _('role_admin');
}

A continuación, puede traducirse en:

$translated_role = _('role_' . $role);

Créditos a: http://eng.marksw.com/2012/12/05/how-to-expose-dynamic-translatable-text-to-translation-tools-like-poedit/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top