php - spanish - Generar archivos de mensajes de traducción Yii
yii2 traduccion (3)
Me interesa saber si hay un script o de otra manera disponible para recopilar y generar mensajes de traducción Yii en un controlador / proyecto.
P.ej. Si tengo los siguientes códigos en un controlador
Yii::t(''blog'', ''Your name'');
Yii::t(''category'', ''Category name'');
Debe generar archivos de mensajes de traducción en inglés como blog.php y category.php con las cadenas anteriores en el directorio de mensajes. Por favor, avíseme si alguien conoce el camino. Gracias
Eso suena como un trabajo para grep
y una expresión regular. Busque esto:
Yii::t/s*/(/s*(''(?:[^'']|(?<=//)'')*''|"(?:[^"]|(?<=//)")*")/s*,/s*(''(?:[^'']|(?<=//)'')*''|"(?:[^"]|(?<=//)")*")/s*/)
Como lo de arriba es desafortunadamente ilegible, lo desglosaré un poco:
Yii::t/s*/(/s*##PATTERN##/s*,/s*##PATTERN##/s*/)
Obviamente, esto coincide con una llamada a Yii::t
teniendo en cuenta el espacio en blanco. La salsa secreta es ##PATTERN##
, que se repite dos veces. ##PATTERN##
es
(''(?:[^'']|(?<=//)'')*''|"(?:[^"]|(?<=//)")*")
Lo anterior coincide con ''([^'']|(?<=//)'')*''
(una cadena citada individualmente) o "([^"]|(?<=//)")*"
(una doble cadena citada). Los grupos no capturadores ( ?:
Se han utilizado para ignorar los resultados provisionales que no son de interés.
Después de coincidir con esta expresión regular, el grupo de captura # 1 mantendrá el nombre del archivo de traducción (por ejemplo, ''blog''
) y el grupo # 2 mantendrá el nombre de la cadena (por ejemplo, ''Your name''
).
No hay necesidad de reinventar la rueda. Puedes usar yiic
para eso (si vas a la carpeta del framework y yiic help message
obtendrás toda la información necesaria sobre su uso). Para su comodidad, voy a pegarlo aquí.
USO yiic message path / to / config / file
DESCRIPCIÓN Este comando busca mensajes para traducir en los archivos fuente especificados y los compila en matrices PHP como fuente de mensajes.
PARÁMETROS * config-file: obligatorio, la ruta del archivo de configuración. Puede encontrar un ejemplo en framework / messages / config.php.
El archivo se puede colocar en cualquier lugar y debe ser un script válido de PHP que devuelve una matriz de pares nombre-valor. Cada par nombre-valor representa una opción de configuración.
Las siguientes opciones están disponibles:
- sourcePath: string, directorio raíz de todos los archivos fuente.
- messagePath: cadena, directorio raíz que contiene traducciones de mensajes.
- languages: array, lista de códigos de idioma a los que se deben traducir los mensajes extraídos. Por ejemplo, array (''zh_cn'', ''en_au'').
- fileTypes: array, una lista de extensiones de archivos (por ejemplo, ''php'', ''xml''). Solo se procesarán los archivos cuyo nombre de extensión se encuentre en esta lista. Si está vacío, se procesarán todos los archivos.
- exclude: array, una lista de exclusiones de directorios y archivos. Cada exclusión puede ser un nombre o una ruta. Si el nombre o la ruta de un archivo o directorio coincide con la exclusión, no se copiará. Por ejemplo, una exclusión de ''.svn'' excluirá todos los archivos y directorios cuyo nombre sea ''.svn''. Y una exclusión de ''/ a / b'' excluirá el archivo o directorio ''sourcePath / a / b''.
- traductor: el nombre de la función para traducir mensajes. El valor predeterminado es ''Yii :: t''. Esto se usa como una marca para encontrar los mensajes que se traducirán.
- sobrescribir: si el archivo de mensaje debe sobrescribirse con los mensajes fusionados.
- removeOld: si el mensaje ya no necesita traducción, se eliminará, en lugar de estar entre un par de marcas ''@@''.
Debería modificar (y mover) el archivo de configuración de ejemplo y ya está todo listo. Asegúrese de utilizar rutas completas (es decir, C:/path/to/project
en Windows o /var/www/your/project
en * nix)
Podría darle información sobre cómo comenzar y puede escribir su propio guión. Esto me pareció bueno por ahora :)
Crear componentes componentes / Translation.php
public function missing($messageEvent) {
Yii::log(
"''".$messageEvent->message."'' => '''',",
''translation'',
$messageEvent->category.''.''.$messageEvent->language
);
}
}
Edite el archivo de configuración config / main.php
''components'' => array(
//...
''log'' => array(
array(
''class''=>''CFileLogRoute'',
''levels''=>''translation'',
''logFile''=>''translations.log'',
),
//...
),
''messages'' => array(
//''class'' => ''CDbMessageSource'',
''onMissingTranslation'' => array(''Translation'', ''missing''),
//''sourceMessageTable'' => ''source_message'',
//''translatedMessageTable'' => ''message''
),
)
Resultado
Terminará con el archivo translation.php
en su directorio de archivos de registro y el contenido del archivo será algo así como:
2012/06/28 09:45:00 [translation] [Site.lv] ''MyStringInSource'' => '''',
....
dependiendo de tu configuración Para que pueda copiar ''MyStringInSource'' => '''',
y coloque el archivo de traducción correspondiente.
Esto es útil en el proceso de desarrollo porque hará crecer el archivo translation.log con la traducción faltante (repetidamente) hasta que los traduzca.
Espero que te dé una idea.