TigerZF
🌐Español

74.2. Adaptadores para Zend_Translate

Zend_Translate puede manejar diferentes adaptadores para traducción. Cada adaptador tiene sus propias ventajas y desventajas. A continuación se muestra una lista completa de todos los adaptadores soportados para archivos de origen de traducción.

Tabla 74.1. Adaptadores para Zend_Translate

Adaptador Descripción Uso
Array Usa arrays de PHP Páginas pequeñas; uso más simple; solo para programadores
Csv Usa archivos separados por comas (*.csv/*.txt) Formato de archivo de texto simple; rápido; posibles problemas con caracteres unicode
Gettext Usa archivos binarios gettext (*.mo) Estándar de GNU para linux; seguro para hilos (thread-safe); necesita herramientas para traducir
Ini Usa archivos simples INI (*.ini) Formato de archivo de texto simple; rápido; posibles problemas con caracteres unicode
Tbx Usa archivos termbase exchange (*.tbx/*.xml) Estándar de la industria para cadenas de terminología entre aplicaciones; formato XML
Tmx Usa archivos tmx (*.tmx/*.xml) Estándar de la industria para traducción entre aplicaciones; formato XML; legible por humanos
Qt Usa archivos qt linguist (*.ts) Framework de aplicaciones multiplataforma; formato XML; legible por humanos
Xliff Usa archivos xliff (*.xliff/*.xml) Un formato más simple que TMX pero relacionado con él; formato XML; legible por humanos
XmlTm Usa archivos xmltm (*.xml) Estándar de la industria para memoria de traducción de documentos XML; formato XML; legible por humanos
Otros *.sql Otros adaptadores diferentes podrían implementarse en el futuro

74.2.1. Cómo decidir qué adaptador de traducción usar

Debería decidir qué adaptador desea usar para Zend_Translate. Con frecuencia, criterios externos como un requisito del proyecto o un requisito del cliente determinan esto por usted, pero si está en la posición de hacerlo usted mismo, las siguientes indicaciones pueden simplificar su decisión.

[Note] Nota

Al decidir su adaptador también debería tener en cuenta la codificación utilizada. Aunque Zend Framework declara UTF-8 como codificación predeterminada, a veces necesitará otra codificación. Zend_Translate no cambiará ninguna codificación que esté definida dentro del archivo de origen, lo que significa que si su origen Gettext está construido sobre ISO-8859-1 también devolverá las cadenas en esa codificación sin convertirlas. Solo hay una restricción:

Cuando use un formato de origen basado en XML como TMX o XLIFF debe definir la codificación dentro de la cabecera de los archivos XML porque los archivos XML sin codificación definida serán tratados como UTF-8 por cualquier analizador XML de forma predeterminada. También debería tener en cuenta que en realidad la codificación de los archivos XML está limitada a las codificaciones soportadas por PHP, que son UTF-8, ISO-8859-1 y US-ASCII.

74.2.1.1. Zend_Translate_Adapter_Array

El adaptador Array es el adaptador más simple de usar para los programadores. Pero cuando tenga numerosas cadenas de traducción o muchos idiomas, debería pensar en otro adaptador. Por ejemplo, si tiene 5000 cadenas de traducción, el adaptador Array posiblemente no sea la mejor opción para usted.

Solo debería usar este adaptador para sitios pequeños con un puñado de idiomas, y si usted o su equipo de programadores crea las traducciones ustedes mismos.

74.2.1.2. Zend_Translate_Adapter_Csv

El adaptador Csv es el adaptador más simple de usar para los clientes. Los archivos CSV son legibles por editores de texto estándar, pero los editores de texto a menudo no soportan conjuntos de caracteres utf8.

Solo debería usar este adaptador si su cliente quiere hacer las traducciones él mismo.

[Note] Nota

Tenga en cuenta que el adaptador Csv tiene problemas cuando sus archivos Csv están codificados de forma diferente a la configuración regional de su entorno. Esto se debe a un error de PHP que no se corregirá antes de PHP 6.0 (http://bugs.php.net/bug.php?id=38471). Por lo tanto, debería tener en cuenta que el adaptador Csv, debido a restricciones de PHP, no tiene en cuenta la configuración regional.

74.2.1.3. Zend_Translate_Adapter_Gettext

El adaptador Gettext es el adaptador que se usa con más frecuencia. Gettext es un formato de origen de traducción que fue introducido por GNU, y ahora se usa en todo el mundo. No es legible por humanos, pero hay varias herramientas gratuitas (por ejemplo, POEdit), que son muy útiles. El adaptador Gettext de Zend_Translate no está implementado usando la extensión gettext de PHP. Puede usar el adaptador Gettext incluso si no tiene instalada la extensión gettext de PHP. Además, el adaptador es seguro para hilos (thread-safe) y la extensión gettext de PHP actualmente no es segura para hilos.

La mayoría de las personas usarán este adaptador. Con las herramientas disponibles, la traducción profesional es muy simple. Pero los datos de gettext se almacenan en un formato legible por máquina, que no es legible sin herramientas.

74.2.1.4. Zend_Translate_Adapter_Ini

El adaptador Ini es un adaptador muy simple que incluso puede ser usado directamente por los clientes. Los archivos INI son legibles por editores de texto estándar, pero los editores de texto a menudo no soportan conjuntos de caracteres utf8.

Solo debería usar este adaptador cuando su cliente quiera hacer las traducciones él mismo. No use este adaptador como origen de traducción genérico.

[Warning] Regresión en PHP 5.3

Antes de PHP 5.3, parse_ini_file() y parse_ini_string() manejaban sin problemas los caracteres no ASCII dentro de las claves de opciones INI. Sin embargo, a partir de PHP 5.3, dichas claves ahora se eliminarán silenciosamente del array devuelto por cualquiera de las dos funciones. Si tenía claves que utilizaban caracteres UTF-8 o Latin-1, es posible que sus traducciones ya no funcionen al usar el adaptador INI. Si este es el caso, recomendamos utilizar un adaptador diferente.

74.2.1.5. Zend_Translate_Adapter_Tbx

El adaptador Tbx es un adaptador que será usado por clientes que ya usan el formato TBX para su sistema de traducción interno. Tbx no es un formato de traducción estándar sino más bien una colección de cadenas de origen ya traducidas y pretraducidas. Cuando use este adaptador debe asegurarse de que todas las cadenas de origen necesarias estén traducidas. TBX es un formato basado en archivos XML y un formato completamente nuevo. Los archivos XML son legibles por humanos, pero el análisis no es tan rápido como con los archivos gettext.

Este adaptador es perfecto para empresas cuando ya existen archivos de origen pretraducidos. Los archivos son legibles por humanos e independientes del sistema.

74.2.1.6. Zend_Translate_Adapter_Tmx

El adaptador Tmx es el adaptador que usarán la mayoría de los clientes que tienen múltiples sistemas que usan el mismo origen de traducción, o cuando el origen de traducción debe ser independiente del sistema. TMX es un formato basado en archivos XML, que se anuncia como el próximo estándar de la industria. Los archivos XML son legibles por humanos, pero el análisis no es tan rápido como con los archivos gettext.

La mayoría de las empresas medianas y grandes usan este adaptador. Los archivos son legibles por humanos e independientes del sistema.

74.2.1.7. Zend_Translate_Adapter_Qt

El adaptador Qt es para todos los clientes que tienen archivos TS como su origen de traducción, generados por QtLinguist. QT es un formato basado en archivos XML. Los archivos XML son legibles por humanos, pero el análisis no es tan rápido como con los archivos gettext.

Varios actores importantes han construido software sobre el framework QT. Los archivos son legibles por humanos e independientes del sistema.

74.2.1.8. Zend_Translate_Adapter_Xliff

El adaptador Xliff es el adaptador que usará la mayoría de los clientes que quieren tener archivos XML pero no tienen herramientas para TMX. XLIFF es un formato basado en archivos XML, relacionado con TMX pero más simple, ya que no soporta todas sus posibilidades. Los archivos XML son legibles por humanos, pero el análisis no es tan rápido como con los archivos gettext.

La mayoría de las empresas medianas usan este adaptador. Los archivos son legibles por humanos e independientes del sistema.

74.2.1.9. Zend_Translate_Adapter_XmlTm

El adaptador XmlTm es el adaptador que usarán los clientes que hacen su propio maquetado. XmlTm es un formato que permite que la fuente HTML completa se incluya en el origen de traducción, de modo que la traducción está acoplada con el maquetado. XLIFF es un formato basado en archivos XML, relacionado con XLIFF pero no tan simple de leer.

Este adaptador solo debería usarse cuando ya existen archivos de origen. Los archivos son legibles por humanos e independientes del sistema.

74.2.2. Integrar adaptadores escritos por uno mismo

Zend_Translate le permite integrar y usar clases de adaptador escritas por usted mismo. Pueden usarse como las clases de adaptador estándar que ya están incluidas dentro de Zend_Translate.

Cualquier clase de adaptador que quiera usar con Zend_Translate debe ser una subclase de Zend_Translate_Adapter. Zend_Translate_Adapter es una clase abstracta que ya define todo lo necesario para la traducción. Lo que usted debe hacer es la definición del lector de los datos de traducción.

El uso del prefijo "Zend" debería limitarse a Zend Framework. Si extiende Zend_Translate con su propio adaptador, debería nombrarlo como "Company_Translate_Adapter_MyFormat". El siguiente código muestra un ejemplo de cómo podría implementarse una clase de adaptador escrita por uno mismo:

try {
    $translate = new Zend_Translate(
        array(
            'adapter' => 'Company_Translate_Adapter_MyFormat',
            'content' => '/path/to/translate.xx',
            'locale'  => 'en',
            'myoption' => 'myvalue'
        )
    );
} catch (Exception $e) {
    // File not found, no adapter class...
    // General failure
}

74.2.3. Acelerar todos los adaptadores

Zend_Translate le permite usar internamente Zend_Cache para acelerar la carga de los orígenes de traducción. Esto resulta muy útil si usa muchos orígenes de traducción o formatos de origen extensos como los archivos basados en XML.

Para usar el cache solo tiene que dar un objeto de cache al método Zend_Translate::setCache(). Este toma una instancia de Zend_Cache como único parámetro. Además, si usa cualquier adaptador directamente puede usar el método setCache(). Por conveniencia también están los métodos estáticos getCache(), hasCache(), clearCache() y removeCache().

$cache = Zend_Cache::factory('Core',
                             'File',
                             $frontendOptions,
                             $backendOptions);
Zend_Translate::setCache($cache);
$translate = new Zend_Translate(
    array(
        'adapter' => 'gettext',
        'content' => '/path/to/translate.mo',
        'locale'  => 'en'
    )
);

// to clear the cache somewhere later in your code
Zend_Translate::clearCache();
[Note] Nota

Debe establecer el cache antes de usar o iniciar cualquier adaptador o instancia de Zend_Translate. De lo contrario, su origen de traducción no se almacenará en cache hasta que agregue un nuevo origen con el método addTranslation().

Cuando el cache adjunto admite etiquetado, puede establecer una cadena de etiqueta propia usando la opción tag. Esto le permite eliminar solo el cache de esta instancia única de Zend_Translate. Cuando no usa esta opción, se utiliza la etiqueta predeterminada Zend_Translate.

Usando la opción tag debe indicar la etiqueta usada a clearCache() para declarar qué etiqueta quiere eliminar.

$cache = Zend_Cache::factory('Core',
                             'File',
                             $frontendOptions,
                             $backendOptions);
Zend_Translate::setCache($cache);
$translate = new Zend_Translate(
    array(
        'adapter' => 'gettext',
        'content' => '/path/to/translate.mo',
        'locale'  => 'en',
        'tag'     => 'MyTag'
    )
);

// somewhere later in your code
Zend_Translate::clearCache('MyTag');