A continuación encontrará una descripción de los diferentes formatos de origen
que pueden utilizarse con Zend_Translate.
![]() |
Nota |
|---|---|
Tenga en cuenta que la mayoría de los formatos descritos deberían crearse utilizando una herramienta o un proceso de generación. Estas herramientas y procesos no forman parte de Zend Framework y para la mayoría de los formatos descritos hay disponibles herramientas gratuitas. |
Los archivos fuente Array son simples arrays. Pero tiene que definirlos manualmente, ya que no hay ninguna herramienta que ayude en esto. Pero como son tan simples, es la forma más rápida de buscar mensajes si su código funciona como se espera. Generalmente es el mejor adaptador para comenzar con el negocio de la traducción.
$english = array(
'message1' => 'message1',
'message2' => 'message2',
'message3' => 'message3');
$german = array(
'message1' => 'Nachricht1',
'message2' => 'Nachricht2',
'message3' => 'Nachricht3');
$translate = new Zend_Translate(
array(
'adapter' => 'array',
'content' => $english,
'locale' => 'en'
)
);
$translate->addTranslation(array('content' => $german, 'locale' => 'de'));
Desde la versión 1.5 también se admite tener arrays incluidos dentro de un archivo externo.
Solo tiene que proporcionar el nombre del archivo y Zend_Translate
lo incluirá automáticamente y buscará el array. Vea el siguiente ejemplo para más detalles:
// myarray.php
return array(
'message1' => 'Nachricht1',
'message2' => 'Nachricht2',
'message3' => 'Nachricht3');
// controller
$translate = new Zend_Translate(
array(
'adapter' => 'array',
'content' => '/path/to/myarray.php',
'locale' => 'de'
)
);
![]() |
Nota |
|---|---|
Los archivos que no devuelvan un array no se podrán incluir. Además, cualquier salida dentro de este archivo será ignorada y suprimida. |
Los archivos fuente Gettext son creados por la biblioteca gettext de GNU. Hay varias herramientas gratuitas disponibles que pueden analizar sus archivos de código y crear los archivos fuente gettext necesarios. Estos tienen la extensión *.mo y son archivos binarios. Una herramienta de código abierto para crear los archivos es poEdit. Esta herramienta también le ayuda durante el propio proceso de traducción.
// We accume that we have created the mo files and translated them
$translate = new Zend_Translate(
array(
'adapter' => 'gettext',
'content' => '/path/to/english.mo',
'locale' => 'en'
)
);
$translate->addTranslation(
array(
'content' => '/path/to/german.mo',
'locale' => 'de'
)
);
Como puede ver, los adaptadores se utilizan exactamente de la misma manera, con una pequeña diferencia: cambiar array por gettext. Todos los demás usos son exactamente los mismos que con los demás adaptadores. Con el adaptador gettext ya no tiene que preocuparse de la estructura de directorios estándar de gettext, de bindtextdomain ni de textdomain. Solo indique la ruta y el nombre de archivo al adaptador.
![]() |
Nota |
|---|---|
|
Siempre debería utilizar UTF-8 como codificación de origen. De lo contrario tendrá problemas al utilizar dos codificaciones de origen diferentes. Por ejemplo, uno de sus archivos fuente está codificado con ISO-8815-11 y otro con CP815. Solo puede establecer una codificación para su archivo fuente, así que probablemente uno de sus idiomas no se mostrará correctamente. UTF-8 es un formato portable que admite todos los idiomas. Al utilizar UTF-8 para todos los idiomas, eliminará el problema de las codificaciones incompatibles. |
Muchos editores de gettext añaden información del adaptador como cadena de traducción vacía.
Esta es la razón por la que las cadenas vacías no se traducen cuando se utiliza el
adaptador gettext. En su lugar, se eliminan de la tabla de traducción y
se proporcionan mediante el método getAdapterInfo(). Este devolverá
la información del adaptador para todos los archivos gettext añadidos como un array usando
el nombre de archivo como clave.
// Getting the adapter informations
$translate = new Zend_Translate(
array(
'adapter' => 'gettext',
'content' => '/path/to/english.mo',
'locale' => 'en'
)
);
print_r($translate->getAdapterInfo());
Los archivos fuente TMX son un nuevo estándar de la industria. Tienen la ventaja de ser archivos XML, por lo que son legibles por cualquier editor y, por supuesto, por las personas. Puede crear archivos TMX manualmente con un editor de texto, o puede utilizar una herramienta especial. Pero la mayoría de las herramientas actualmente disponibles para crear archivos fuente TMX no son gratuitas.
Ejemplo 74.3. Ejemplo de archivo TMX
<?xml version="1.0" ?>
<!DOCTYPE tmx SYSTEM "tmx14.dtd">
<tmx version="1.4">
<header creationtoolversion="1.0.0" datatype="winres" segtype="sentence"
adminlang="en-us" srclang="de-at" o-tmf="abc"
creationtool="XYZTool" >
</header>
<body>
<tu tuid='message1'>
<tuv xml:lang="de"><seg>Nachricht1</seg></tuv>
<tuv xml:lang="en"><seg>message1</seg></tuv>
</tu>
<tu tuid='message2'>
<tuv xml:lang="de"><seg>Nachricht2</seg></tuv>
<tuv xml:lang="en"><seg>message2</seg></tuv>
</tu>
</body>
</tmx>
$translate = new Zend_Translate(
array(
'adapter' => 'tmx',
'content' => 'path/to/mytranslation.tmx',
'locale' => 'en'
)
);
Los archivos TMX pueden tener varios idiomas dentro del mismo archivo.
Todos los demás idiomas incluidos se añaden automáticamente,
por lo que no tiene que llamar a addLanguage().
Si desea que solo se traduzcan idiomas específicos del origen, puede
establecer la opción defined_language en TRUE.
Con esta opción puede añadir explícitamente los idiomas deseados con
addLanguage(). El valor por defecto de esta opción es añadir todos
los idiomas.
![]() |
Opción useId |
|---|---|
|
Cuando establece la opción useId en
En nuestro ejemplo, la clave del mensaje sería por defecto message1.
Cuando esta opción se establece en Tenga en cuenta que la entrada tuv que está relacionada con la entrada srclang debe ser la primera entrada tuv tal como se establece en el ejemplo anterior. |
Los archivos fuente CSV son pequeños y legibles por humanos. Si sus clientes quieren traducir por su cuenta, probablemente utilizará el adaptador CSV.
Ejemplo 74.4. Ejemplo de archivo CSV
#Example csv file message1;Nachricht1 message2;Nachricht2
$translate = new Zend_Translate(
array(
'adapter' => 'csv',
'content' => '/path/to/mytranslation.csv',
'locale' => 'de'
)
);
$translate->addTranslation(
array(
'content' => 'path/to/other.csv',
'locale' => 'fr'
)
);
Hay tres opciones diferentes para el adaptador CSV. Puede establecer delimiter, limit y enclosure.
El delimitador por defecto para cadenas CSV es ';', pero con la opción delimiter puede decidir utilizar otro.
El límite por defecto para una línea dentro de un archivo CSV es '0'. Esto significa que el final de una línea CSV se busca automáticamente. Si establece limit en cualquier valor, entonces el archivo CSV se leerá más rápido, pero cualquier línea que exceda este límite se truncará.
El delimitador de texto por defecto para archivos CSV es '"'. Puede establecer uno diferente utilizando la opción enclosure.
Ejemplo 74.5. Segundo ejemplo de archivo CSV
# Example CSV file "message,1",Nachricht1 message2,"Nachricht,2" "message3,",Nachricht3
$translate = new Zend_Translate(
array(
'adapter' => 'csv',
'content' => '/path/to/mytranslation.csv',
'locale' => 'de',
'delimiter' => ','
)
);
$translate->addTranslation(
array(
'content' => '/path/to/other.csv',
'locale' => 'fr'
)
);
![]() |
Nota |
|---|---|
Cuando utiliza caracteres no ASCII dentro de su archivo CSV, como diéresis o caracteres UTF-8, entonces siempre debería utilizar el delimitador de texto. Omitir el delimitador de texto puede provocar la pérdida de caracteres en su traducción. |
Los archivos fuente INI son legibles por humanos pero normalmente no muy pequeños ya que también incluyen otros datos además de las traducciones. Si tiene datos que deban ser editables por sus clientes, puede utilizar el adaptador INI.
Ejemplo 74.6. Ejemplo de archivo INI
[Test] ;TestPage Comment Message_1="Nachricht 1 (de)" Message_2="Nachricht 2 (de)" Message_3="Nachricht :3 (de)"
$translate = new Zend_Translate(
array(
'adapter' => 'ini',
'content' => '/path/to/mytranslation.ini',
'locale' => 'de'
)
);
$translate->addTranslation(
array(
'content' => '/path/to/other.ini',
'locale' => 'it'
)
);
Los archivos INI tienen varias restricciones. Si un valor en el
archivo INI contiene algún carácter no alfanumérico, debe
encerrarse entre comillas dobles ("). También hay palabras reservadas que
no deben utilizarse como claves en archivos INI. Estas incluyen:
NULL, yes, no, TRUE, y
FALSE. Los valores NULL, no
y FALSE dan como resultado "",
yes y TRUE dan como resultado '1'. Los caracteres
{}|&~![()" no deben utilizarse en ninguna parte de la clave y tienen un
significado especial en el valor. No los utilice, ya que producirá un comportamiento inesperado.
![[Note]](images/note.png)