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 |
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.
![]() |
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.
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. |
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.
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.
![]() |
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. |
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.
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.
![]() |
Regresión en PHP 5.3 |
|---|---|
Antes de PHP 5.3, |
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.
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.
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.
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.
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.
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
}
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();
![]() |
Nota |
|---|---|
Debe establecer el cache antes de usar o iniciar
cualquier adaptador o instancia de |
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');
![[Note]](images/note.png)
![[Warning]](images/warning.png)