translations domain php internationalization twig

php - domain - translation symfony 4



Twig: ejemplo de internacionalización de trabajo(i18n) (2)

Estoy buscando un ejemplo de trabajo i18n para Twig (el motor de plantilla).

La documentación es un poco escasa cuando se trata de archivos de idiomas. ¿A dónde deberían ir, cómo deberían verse y cómo deberían llamarse? He estado intentando con archivos .po / .mo, sin suerte.

Si alguien pudiera señalarme en la dirección correcta ...

Ver: el ejemplo de la extensión i18n que realmente no me dice mucho sobre los archivos de idioma.

Nota: Quiero usar Twig por sí mismo, no como parte de Symfony.

Aquí está mi archivo php:

<?php header(''Content-Type: text/html; charset=utf-8''); $vars = array(); foreach($_POST as $key => $value) { $vars[$key] = json_decode(utf8_encode(urldecode($value))); } /* Prepare Twig template enginge */ require_once ''./lib/Twig/Autoloader.php''; Twig_Autoloader::register(); $loader = new Twig_Loader_Filesystem(''./templates''); $twig = new Twig_Environment($loader, array( //''cache'' => ''./cache'', ''cache'' => false )); /* i18n */ $twig->addExtension(new Twig_Extensions_Extension_I18n()); $availableLanguages = array( ''en'' => ''en_EN'', ''de'' => ''de_DE'', ''default'' => ''de_DE'' ); // Set language $locale = array_key_exists($_GET[''lang''], $availableLanguages) ? $availableLanguages[$_GET[''lang'']] : $availableLanguages[''default'']; putenv(''LC_ALL=''.$locale); setlocale(LC_ALL, $locale); // Specify the location of the translation tables bindtextdomain(''kalkulator'', ''includes/locale''); bind_textdomain_codeset(''kalkulator'', ''UTF-8''); // Choose domain textdomain(''kalkulator''); $template = $twig->loadTemplate(''print.tpl''); $html = $template->render($vars); switch($_GET[''action'']) { case ''mail'': break; default: echo $html; break; } ?>

Y dentro incluye / locale tengo los siguientes archivos:

-rw-r--r-- 1 user group 670 Jul 28 10:17 kalkulator-de_DE.mo -rw-r--r-- 1 user group 982 Jul 28 10:22 kalkulator-de_DE.po -rw-r--r-- 1 user group 688 Jul 28 10:38 kalkulator-en_EN.mo -rw-r--r-- 1 user group 1004 Jul 28 10:38 kalkulator-en_EN.po

Y dentro del archivo print.tpl estoy usando etiquetas para especificar qué partes deben ser traducidas:

{% trans %} Text to be translated {% endtrans %}


La extensión twig i18n se basa en gettext. Entonces, antes que nada, todo lo relacionado con gettext se aplica. Usted encuentra eso documentado aquí: Gettext Docs .

Así que ahora a las partes más concretas de su pregunta, pero asegúrese de que al menos haya entendido los principios básicos con gettext:

¿A dónde deberían ir [los archivos de idioma]?

En el directorio que se ha registrado para el dominio de texto .

, ¿cómo deberían verse y cómo deberían llamarse?

Los archivos de idioma deben nombrarse de la siguiente manera:

text-domain - locale .po/mo

Ejemplo para un dominio de texto llamado myAppPhp y la fr_FR regional fr_FR :

myAppPhp-fr_FR.po myAppPhp-fr_FR.mo

He estado intentando con archivos .po/.mo , sin suerte.

.po/.mo suena bien para mí, tal vez te has perdido el camino donde moverlos o te olvidaste de agregar el dominio de texto al frente.


Intenté todo lo posible en Slim 3 pero nada funcionaba, solo Slim 2, así que creé mi propio camino. Básicamente, el sistema detecta el idioma del navegador y carga el archivo de traducción correcto, más detalles en la imagen: