Силекс и локализация ветки

Я пытаюсь реализовать перевод в своем веб-приложении с помощью silex framework. Итак, я придумал этот

<!--?php
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
$app['debug'] = true;
$app--->register(new Silex\Provider\UrlGeneratorServiceProvider());
$app->register(new Silex\Provider\TwigServiceProvider(), array(
 'twig.path' => __DIR__.'/../views',
));
$app->register(new Silex\Provider\TranslationServiceProvider(array(
 'locale_fallbacks' => array('hr'),
)));
$app['translator'] = $app->share($app->extend('translator', function($translator) {
 $translator->addLoader('xlf', new \Symfony\Component\Translation\Loader\XliffFileLoader());
 $translator->addResource('xlf', __DIR__.'/../locales/hr.xlf', 'hr');
 $translator->addResource('xlf', __DIR__.'/../locales/en.xlf', 'en');
 $translator->addResource('xlf', __DIR__.'/../locales/sl.xlf', 'sl');
 return $translator;
}));
$app->get('/', function () use ($app) {
 $app['translator']->setLocale('hr');
 return $app['twig']->render('home.twig', array('d' => $app['translator']->getLocale()));
});
$app->get('/{_locale}/', function() use ($app) {
 $app['translator']->setLocale($app['request']->get('locale'));
 return $app['twig']->render('home.twig', array('d' => $app['translator']->getLocale()));
});
$app->run();

В принципе, мне бы хотелось, чтобы моя домашняя страница (mysite.com) по умолчанию была локали hr, но я не могу заставить ее работать. Переводы работают нормально, но когда я проверяю локаль в своем шаблоне ветки, я получаю "en" (мне нужна эта проверка для вывода некоторого дополнительного текста в зависимости от языка). Если я вхожу в локаль явно так, как mysite.com/hr или mysite.com/en, то ведется регистрация регистров, как ожидалось.

Кроме того, мне интересно, есть ли у хорошей практики многоязычная страница без указанной локали на главной странице.

1 ответ

Попробуйте

$app['locale'] = 'hr';

Стандарт по умолчанию для Silex установлен в 'en'.

Дополнительная информация в документация по переводу silex

licensed under cc by-sa 3.0 with attribution.