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.