1. Go to this page and download the library: Download odan/twig-translation library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
odan / twig-translation example snippets
$loader = new \Twig\Loader\FilesystemLoader('/path/to/templates');
$twig = new \Twig\Environment($loader, array(
'cache' => '/path/to/twig-cache',
));
$translator = new \Symfony\Component\Translation\Translator(
'en_US',
new MessageFormatter(new IdentityTranslator()),
null
);
$translator->addLoader('mo', new MoFileLoader());
$twig->addExtension(new \Odan\Twig\TwigTranslationExtension($translator));
// Locale settings
$settings['locale'] = [
'path' => '/path/to/resources/locale',
'cache' => '/path/to/locale-cache',
'locale' => 'en_US',
'domain' => 'messages',
// Should be set to false in production
'debug' => false,
];
use Odan\Twig\TwigTranslationExtension;
use Psr\Container\ContainerInterface;
use Symfony\Component\Translation\Formatter\MessageFormatter;
use Symfony\Component\Translation\IdentityTranslator;
use Symfony\Component\Translation\Loader\MoFileLoader;
use Symfony\Component\Translation\Translator;
// ...
return [
// ...
Translator::class => function (ContainerInterface $container) {
$settings = $container->get('settings')['locale'];
$translator = new Translator(
$settings['locale'],
new MessageFormatter(new IdentityTranslator()),
$settings['cache'],
$settings['debug']
);
$translator->addLoader('mo', new MoFileLoader());
// Optional: Inject the translator instance into the __() function
// __($translator);
return $translator;
},
Twig::class => function (ContainerInterface $container) {
$twig = Twig::create('/path/to/templates', []);
// Add extension
$translator = $container->get(Translator::class);
$twig->addExtension(new TwigTranslationExtension($translator));
// Add more extension ...
return $twig;
},
];
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* Translate text.
*
* @param string|TranslatorInterface $message The message being translated or the translator
* @param string|int|float|bool ...$context The context arguments
*
* @return string The translated message
*/
function __($message, ...$context): string
{
/** @var TranslatorInterface $translator */
static $translator = null;
if ($message instanceof TranslatorInterface) {
$translator = $message;
return '';
}
$translated = $translator->trans($message);
if (!empty($context)) {
$translated = vsprintf($translated, $context);
}
return $translated;
}
// Twig settings
$settings['twig'] = [
'path' => '/path/to/twig/templates',
// Should be set to true in production
'cache_enabled' => true,
'cache_path' => '/path/to/twig-cache', // <---
];
use Odan\Twig\TwigCompiler;
use Slim\App;
use Slim\Views\Twig;
// Bootstrap Slim application
/** @var ContainerInterface $container */
$container = ()$settings['cache_path'];
$twig = $container->get(Twig::class)->getEnvironment();
// Compile twig templates (*.twig) to PHP code
$compiler = new TwigCompiler($twig, $cachePath, true);
$compiler->compile();
echo "Done\n";
return 0;