Pregunta

Encuentro Yu gran marco, y el sitio web de ejemplo creado con la cáscara yiic es un buen punto para empezar ... sin embargo, no cubre el tema de los sitios web en varios idiomas, por desgracia. La documentación abarca el tema de la traducción de mensajes cortos, pero no mantener el contenido en varios idiomas ...

Estoy a punto de empezar a trabajar en un sitio web que tiene que estar en al menos dos idiomas, y me pregunto ¿cuál es la mejor manera de mantener el contenido de ese ... El problema es que el contenido se mezcla intensamente con elementos comunes (como archivos de vídeo incorporados).

necesito para evitar la duplicación de los bienes comunes ... hasta ahora solía tener una matriz de matrices que contienen los textos (por lo general no más de 1-2 párrafos cortos), entonces el archivo de vista se acaba haciendo que el texto de una matriz.

Ahora me gustaría evitar manteniéndolo en matrices (que requiere un poco de atención al poner dobles citas "" y es un inconveniente en general ...).

Así que, ¿cuál es la mejor manera de mantener los párrafos cortos? ¿Debo tener en DB como (id | msg_id | idioma | contenido) y luego seleccionarlos por msg_id y el lenguaje? Que todavía me requiere para crear un poco de msg_id e insertarlos en vista de archivos ...

¿Hay alguna paradigma recomendada para los que Yii tiene algunas soluciones?

Gracias, metro.

¿Fue útil?

Solución

aplicación A Yii por defecto utiliza el método yü :: t () para la traducción de mensajes de texto y hay 3 tipos diferentes de fuentes de mensajes:

  1. CPhpMessageSource :. Las traducciones se almacenan como pares de valores clave en un array PHP
  2. CGettextMessageSource : Las traducciones se almacenan como archivos de GNU Gettext. (PO Archivos)
  3. CDbMessageSource :. Traducciones de los mensajes se almacenan en tablas de la base

Si no me entienda mal, está utilizando agrupaciones clásicas de traducciones. Te recomiendo el uso de los archivos PO GetText y con Yii para las operaciones de traducción.

Se puede encontrar gran cantidad de información acerca de la traducción y la i18n con yü en esta página href="http://www.yiiframework.com/doc/guide/topics.i18n" documentación oficial .

Otros consejos

Gettext es buena por su facilidad de traducción, pero la ejecución de PHP por defecto no es seguro para subprocesos. Por lo tanto, yü utiliza su propio desencajonadora, aumentando drásticamente el tiempo de procesamiento en comparación con las matrices de PHP.

Desde que era la creación de un volumen alto, sitio de alta transacción, el impacto en el rendimiento no era aceptable. Además, mediante el uso de APC, podríamos almacenar en caché la traducción en PHP aumentar aún más el rendimiento.

Mi enfoque era, por tanto, utilizar matrices en PHP para mantener las traducciones en una base de datos para facilitar la traducción, la generación de los archivos necesarios cuando se cambian las traducciones.

El DB es similar a esto:

TABLE Message            // stores source language, updated by script
 id INT UNSIGNED
 category VARCHAR(20)         // first argument to Yii::t()
 key TEXT                     // second argument to Yii::t()
 occurences TINYINT UNSIGNED  // number of times found in sources

TABLE MessageTranslation // stores target language, translated by human  
 id INT UNSIGNED
 language VARCHAR(3)          // ISO 639-1 or 639-3, as used by Yii
 messageId INT UNSIGNED       // foreign key on Message table
 value TEXT
 version VARCHAR(15)
 creationTime TIMESTAMP DEFAULT NOW()
 lastModifiedTime TIMESTAMP DEFAULT NULL
 lastModifiedUserId INT UNSIGNED

Entonces modificado el yiic herramienta CLI 'mensaje' comando para deshacerse de las cadenas recogidos en la base de datos.

http://www.yiiframework.com / wiki / 41 / cómo-a-extend-yiic-shell-comandos /

Una vez en la base de datos, un simple CMS puede ser configurado para proporcionar traductores una manera fácil de traducir y, al mismo tiempo que proporciona la información de versiones, volviendo a las versiones anteriores, la comprobación de la calidad de los traductores, etc ...

Otro guión, también modificado de yiic, a continuación, toma la información de base de datos y lo compila en arrays PHP. Básicamente una combinación de las dos tablas para cada idioma, a continuación, crear una matriz usando 'Mensaje'. 'Clave' y 'MessageTranslation'. 'Valor' como (¿qué otra cosa?) Clave => valor ... guardar en archivo con el nombre de ' mensaje'. 'categoría' en la carpeta especificada por el lenguaje.

Los archivos generados se cargan como normales por Yii CPhpMessageSource.

Para las imágenes, esto era tan simple como colocar en carpetas con el lenguaje adecuado y conseguir el lenguaje aplicación al vincular.

<img src="/images/<?php echo Yii::app()->language; ?>/help_button.png">

Tenga en cuenta que en la vida real, escribí un pequeño método de ayuda a quitarse el país de la cadena de idioma, 'en_US' debe ser 'es'.

Bueno, yo creo que lo que se trata aquí es cómo traducir mensajes de texto / estáticas en la página y Yii lo resuelve bastante bien usando Yii:. T () y la respuesta de Edigu es por ello

me la salida del mensaje el FlexicaCMS sobre la traducción de contenido dinámico en la base de datos, así que en última instancia será el próximo después de resolver un problema de texto / mensaje estático, y que es un verdadero buen enfoque utilizando el comportamiento de Yu. No estoy seguro si los autores FlexicaCMS son demasiado ambiciosos en el apoyo a la traducción de esa manera, ya que haría que la traducción del contenido una cosa sin preocupaciones -. Realmente grande

Una cosa que no mencionan es la url de la página traducida. Por ejemplo your.site.com/fr/translated_article_title.html. Me refiero a la necesidad url tiene / language_id / parte en ella por lo que puede ayudar con SEO.

En Yii1 y Yii2 yü \ i18n \ GettextMessageSource no utiliza Yii motor perfecto caché de todos modos (vistazo a la fuente) para mejorar la carga de los archivos PO o MO. No se recomienda para cargar estos archivos mediante php código puro (incluyendo yü \ i18n \ GettextMessageSource) (es tan lento que PHP matriz IDX): http: // mel. melaxis.com/devblog/2006/04/10/benchmarking-php-localization-is-gettext-fast-enough/

Sin embargo php gettext ext para archivos MO es un poco más rápido que la traducción de matrices de PHP, ya que utiliza la memoria caché pero el punto negativo es:. Cada cambio en la MO requiere reiniciar el servidor

Creo que la mejor solución sería la de extender yü \ i18n \ GettextMessageSource en su propia biblioteca de código y añadir la capacidad de memoria caché para GettextMessageSource para mejorar su rendimiento y usar su versión extendida como el componente.

protected function loadMessages($category, $language);

Simplemente no marca MO fecha de modificación en cada carga para comparar con el caché, en lugar borrar la caché cuando se cambian la MO o archivos PO (que puede ser un calendario).

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