/** * Configure translator locale. */ public static function configureLocale() { $localeOption = Validation::option('locale'); if (!is_array($localeOption)) { /** @noinspection ExceptionsAnnotatingAndHandlingInspection */ self::$translator->setLocale($localeOption); /** @noinspection ExceptionsAnnotatingAndHandlingInspection */ self::$translator->setFallbackLocales([$localeOption]); } else { /** @noinspection ExceptionsAnnotatingAndHandlingInspection */ self::$translator->setLocale(array_shift($localeOption)); /** @noinspection ExceptionsAnnotatingAndHandlingInspection */ self::$translator->setFallbackLocales($localeOption); } }
public function register(Container $app) { $app['translator'] = function ($app) { if (!isset($app['locale'])) { throw new \LogicException('You must define \'locale\' parameter or register the LocaleServiceProvider to use the TranslationServiceProvider'); } $translator = new Translator($app['locale'], $app['translator.message_selector'], $app['translator.cache_dir'], $app['debug']); $translator->setFallbackLocales($app['locale_fallbacks']); $translator->addLoader('array', new ArrayLoader()); $translator->addLoader('xliff', new XliffFileLoader()); // Register default resources foreach ($app['translator.resources'] as $resource) { $translator->addResource($resource[0], $resource[1], $resource[2], $resource[3]); } foreach ($app['translator.domains'] as $domain => $data) { foreach ($data as $locale => $messages) { $translator->addResource('array', $messages, $locale, $domain); } } return $translator; }; $app['translator.listener'] = function ($app) { return new TranslatorListener($app['translator'], $app['request_stack']); }; $app['translator.message_selector'] = function () { return new MessageSelector(); }; $app['translator.resources'] = $app->protect(function ($app) { return []; }); $app['translator.domains'] = []; $app['locale_fallbacks'] = ['en']; $app['translator.cache_dir'] = null; }
public function register() { $di = $this->getContainer(); $config = $this->getConfig(); $di->add($config['message_selector_class']); foreach ($config['loaders'] as $name => $class) { $di->add($class); $di->add('translation.loader.' . $name, $class); } $di->add('Symfony\\Component\\Translation\\Translator', function () use($di, $config) { $selector = $di->get($config['message_selector_class']); $translator = new Translator($config['locale'], $selector); $translator->setFallbackLocales($config['fallback_locales']); foreach ($config['loaders'] as $name => $class) { $translator->addLoader($name, $di->get('translation.loader.' . $name)); } foreach ($config['resources'] as $locale => $resources) { foreach ($resources as $config) { list($loader, $arg, $domain) = $config + ['array', [], 'messages']; $translator->addResource($loader, $arg, $locale, $domain); } } return $translator; }, true); $di->add('Laasti\\SymfonyTranslationProvider\\TranslationArray')->withArgument('Symfony\\Component\\Translation\\Translator'); }
function configure() { $translator = new Translator("fr_FR", new MessageSelector()); $translator->setFallbackLocales(array("fr")); $translator->addLoader("array", new ArrayLoader()); $translator->addResource("array", array("Hello World!" => "Bonjour"), "fr"); Yasc_App::config()->addOption("translator", $translator); }
/** * @return Translator */ public function create() { $translator = new Translator(null); $translator->addLoader('yml', new YamlFileLoader()); $translator->setFallbackLocales(['cs']); $translator = $this->addResourcesToTranslator($translator); return $translator; }
public function runTest() { $translator = new Translator("fr_FR", new MessageSelector()); $translator->addLoader("array", new ArrayLoader()); $translator->addResource("array", array("Hello World!" => "Bonjour", "Symfony is great" => "Symfony est le meuilleur", "Hello %name%" => "Bonjour %name%", "apple.choice" => "Une pomme | %count% pommes"), "fr_FR"); $translator->setFallbackLocales(array("en")); (new TranslationValidator($translator))->validate(); }
public function testTransChoiceFallbackIsLogged() { $logger = $this->getMock('Psr\\Log\\LoggerInterface'); $logger->expects($this->once())->method('debug')->with('Translation use fallback catalogue.'); $translator = new Translator('ar'); $translator->setFallbackLocales(array('en')); $translator->addLoader('array', new ArrayLoader()); $translator->addResource('array', array('some_message2' => 'one thing|%count% things'), 'en'); $loggableTranslator = new LoggingTranslator($translator, $logger); $loggableTranslator->transChoice('some_message2', 10, array('%count%' => 10)); }
public function register(Application $app) { $config = $this->config; //Expose some settings $app['default_locale'] = $config['default_locale']; $app['fallback_locale'] = $config['fallback_locale']; $app['locales'] = $config['locales']; $app['devture_localization.url_generator'] = $app->share(function ($app) { return new Routing\LocaleAwareUrlGenerator($app, $app['routes'], $app['request_context']); }); if (!isset($app['url_generator'])) { //Technically, we don't need either of those. //But registering as `url_generator` directly will fail if one of them overwrites it later. //Most projects will include one of them anyway, so this ordering requirement shouldn't be a big deal. throw new \LogicException('url_generator missing. Register FrameworkBundle (or the UrlGeneratorServiceProvider) before LocalizationBundle.'); } //Replace the url_generator with our own, to enable transparent locale-aware URL generation $app->extend('url_generator', function ($current) use($app) { return $app['devture_localization.url_generator']; }); $app['devture_localization.locale_listener'] = $app->share(function ($app) use($config) { return new EventListener\LocaleListener($config['default_locale'], array_keys($config['locales']), $app['devture_localization.translator']); }); $app['devture_localization.translator'] = $app->share(function ($app) use($config) { $translator = new Translator('en', $app['devture_localization.translator.message_selector'], $config['cache_path'], $config['auto_reload']); if (isset($app['fallback_locale'])) { $translator->setFallbackLocales(array($app['fallback_locale'])); } $translator->addLoader('json', $app['devture_localization.translator.loader']); return $translator; }); //Alias it, so services that rely on $app['translator'] (like devture/form's FormExtension) can work. //Silex\Provider\TranslationServiceProvider also exports $app['translator'], so this makes us compatible. $app['translator'] = $app->share(function ($app) { return $app['devture_localization.translator']; }); $app['devture_localization.translator.message_selector'] = $app->share(function () { return new MessageSelector(); }); $app['devture_localization.translator.resource_loader'] = $app->share(function ($app) { return new Translation\ResourceLoader($app['devture_localization.translator'], 'json'); }); $app['devture_localization.translator.loader'] = $app->share(function () { return new Translation\JsonFileLoader(); }); $app['devture_localization.twig.translation_extension'] = $app->share(function ($app) { return new TranslationExtension($app['devture_localization.translator']); }); $app['devture_localization.twig.locale_helper_extension'] = $app->share(function ($app) use($config) { return new Twig\LocaleHelperExtension($app, $config['locales']); }); }
/** * @param Request $request * @return Translator */ public static function createTranslator(Request $request) { $translator = new Translator($request->getSession()->get('locale'), new MessageSelector()); $translator->setFallbackLocales(['ru']); $translator->addLoader('array', new ArrayLoader()); $translator->addResource('array', ['username' => 'Имя пользователя', 'date_of_birth' => 'Дата рождения', 'photo' => 'Фото'], 'ru', 'crud_view'); $translator->addResource('array', ['username' => 'Username', 'date_of_birth' => 'Date of birth', 'photo' => 'Photo'], 'en', 'crud_view'); $translator->addResource('array', ['hello_user' => 'Привет, %username%!'], 'ru', 'auth'); $translator->addResource('array', ['hello_user' => 'Hello, %username%!'], 'en', 'auth'); $translator->addResource('array', ['plural' => '%count% яблоко|%count% яблока|%count% яблок'], 'ru'); $translator->addResource('array', ['plural' => 'One apple|%count% apples'], 'en'); return $translator; }
public function register(Container $app) { $app['translator'] = function ($app) { if (!isset($app['locale'])) { throw new \LogicException('You must define \'locale\' parameter or register the LocaleServiceProvider to use the TranslationServiceProvider'); } $translator = new Translator($app['locale'], $app['translator.message_selector'], $app['translator.cache_dir'], $app['debug']); $translator->setFallbackLocales($app['locale_fallbacks']); $translator->addLoader('array', new ArrayLoader()); $translator->addLoader('xliff', new XliffFileLoader()); if (isset($app['validator'])) { $r = new \ReflectionClass('Symfony\\Component\\Validator\\Validation'); $file = dirname($r->getFilename()) . '/Resources/translations/validators.' . $app['locale'] . '.xlf'; if (file_exists($file)) { $translator->addResource('xliff', $file, $app['locale'], 'validators'); } } if (isset($app['form.factory'])) { $r = new \ReflectionClass('Symfony\\Component\\Form\\Form'); $file = dirname($r->getFilename()) . '/Resources/translations/validators.' . $app['locale'] . '.xlf'; if (file_exists($file)) { $translator->addResource('xliff', $file, $app['locale'], 'validators'); } } // Register default resources foreach ($app['translator.resources'] as $resource) { $translator->addResource($resource[0], $resource[1], $resource[2], $resource[3]); } foreach ($app['translator.domains'] as $domain => $data) { foreach ($data as $locale => $messages) { $translator->addResource('array', $messages, $locale, $domain); } } return $translator; }; if (isset($app['request_stack'])) { $app['translator.listener'] = function ($app) { return new TranslatorListener($app['translator'], $app['request_stack']); }; } $app['translator.message_selector'] = function () { return new MessageSelector(); }; $app['translator.resources'] = $app->protect(function ($app) { return array(); }); $app['translator.domains'] = array(); $app['locale_fallbacks'] = array('en'); $app['translator.cache_dir'] = null; }
/** * {@inheritdoc} */ public function register() { $this->app->singleton('Flarum\\Locale\\LocaleManager'); $this->app->alias('Flarum\\Locale\\LocaleManager', 'flarum.localeManager'); $this->app->singleton('translator', function () { $defaultLocale = $this->app->make('flarum.settings')->get('default_locale'); $translator = new Translator($defaultLocale, new MessageSelector()); $translator->setFallbackLocales([$defaultLocale]); $translator->addLoader('yaml', new YamlFileLoader()); return $translator; }); $this->app->alias('translator', 'Symfony\\Component\\Translation\\Translator'); $this->app->alias('translator', 'Symfony\\Component\\Translation\\TranslatorInterface'); }
protected function setUp(array $install = array(), $language = 'en') { $translation = new Translator('en_EN', new MessageSelector()); $translation->setFallbackLocales(array('en')); $translation->addLoader('yaml', new YamlFileLoader()); $translation->addResource('yaml', __DIR__ . '/../../../../../locales/en.yml', 'en'); $translation->addResource('yaml', __DIR__ . '/../../../../../locales/de.yml', 'de'); $command = new InstallCommand(); $command->setInstalls($install)->setTranslator($translation); $console = new Application(); $console->add($command); $command = $console->find('api:install'); $this->command = new CommandTester($command); $this->command->execute(array('command' => $command->getName(), 'language' => $language)); }
protected function setUp($dir = '', array $options = array()) { $translation = new Translator('en_EN', new MessageSelector()); $translation->setFallbackLocales(array('en')); $translation->addLoader('yaml', new YamlFileLoader()); $translation->addResource('yaml', __DIR__ . '/../../../../../locales/en.yml', 'en'); $translation->addResource('yaml', __DIR__ . '/../../../../../locales/de.yml', 'de'); $command = new ValidateCommand(); $command->setConfigDir($dir)->setTranslator($translation); $console = new Application(); $console->add($command); $command = $console->find('api:validate'); $this->command = new CommandTester($command); $this->command->execute(array_merge(array('command' => $command->getName()), $options)); }
public function __construct() { $translator_config = (require APPDIR . 'config/translation.php'); $this->config = $translator_config; $translator = new TranslationProvider($translator_config['default'], new MessageSelector()); $translator->setFallbackLocales(array($translator_config['default'])); $translator->addLoader('array', new PhpFileLoader()); $this->translator = $translator; $app = App::instance(); $app_locale = $app->cookies()->get('app_locale'); if ($app_locale) { if (in_array($app_locale, $this->config['locales'])) { $this->setLocale($app_locale); } else { $this->setLocale($translator_config['default']); } } else { $this->setLocale($translator_config['default']); } }
protected static function createInstance() { if (config('app.debug') && !config('trans.cache_on_debug')) { \Cache::forget('po_cache'); } return \Cache::rememberForever('po_cache', function () { $basePath = config('trans.translations_path'); $locales = config('trans.supported_locales'); $translator = new SymfonyTranslator(config('app.locale')); $translator->addLoader('po', new PoFileLoader()); $translator->setFallbackLocales([config('app.locale')]); foreach ($locales as $locale) { $path = base_path($basePath . DIRECTORY_SEPARATOR . $locale . DIRECTORY_SEPARATOR . 'LC_MESSAGES'); $file = $path . DIRECTORY_SEPARATOR . 'messages.po'; if (file_exists($file)) { $translator->addResource('po', $file, $locale); $translator->getCatalogue($locale); } } return $translator; }); }
public function __construct($request) { $host = explode('.', $request->getHost()); $sousDomaines = array_slice($host, 0, count($host) - 2); $sousDomaine = "fr"; if (count($sousDomaines) > 0) { $sousDomaine = end($sousDomaines); } $translator = new Translator($sousDomaine, new MessageSelector()); $translator->addLoader('yaml', new YamlFileLoader()); $translator->setFallbackLocales(array('fr')); $translator->addResource('yaml', BASE_ROOT . '/core/translations/common.fr.yml', 'fr', 'common'); $translator->addResource('yaml', BASE_ROOT . '/core/translations/common.' . $sousDomaine . '.yml', $sousDomaine, 'common'); $translator->addResource('yaml', BASE_ROOT . '/core/translations/menu.fr.yml', 'fr', 'menu'); $translator->addResource('yaml', BASE_ROOT . '/core/translations/menu.' . $sousDomaine . '.yml', $sousDomaine, 'menu'); $translator->addResource('yaml', BASE_ROOT . '/core/translations/map.fr.yml', 'fr', 'map'); $translator->addResource('yaml', BASE_ROOT . '/core/translations/map.' . $sousDomaine . '.yml', $sousDomaine, 'map'); $translator->addResource('yaml', BASE_ROOT . '/core/translations/grade.fr.yml', 'fr', 'grade'); $translator->addResource('yaml', BASE_ROOT . '/core/translations/grade.' . $sousDomaine . '.yml', $sousDomaine, 'grade'); $translator->addResource('yaml', BASE_ROOT . '/core/translations/item_attr.fr.yml', 'fr', 'itemAttr'); $translator->addResource('yaml', BASE_ROOT . '/core/translations/item_attr.' . $sousDomaine . '.yml', $sousDomaine, 'itemAttr'); $this->objInstance = $translator; }
public function register(Application $app) { $app['translator'] = $app->share(function ($app) { $translator = new Translator($app['locale'], $app['translator.message_selector']); // Handle deprecated 'locale_fallback' if (isset($app['locale_fallback'])) { $app['locale_fallbacks'] = (array) $app['locale_fallback']; } $translator->setFallbackLocales($app['locale_fallbacks']); $translator->addLoader('array', new ArrayLoader()); $translator->addLoader('xliff', new XliffFileLoader()); foreach ($app['translator.domains'] as $domain => $data) { foreach ($data as $locale => $messages) { $translator->addResource('array', $messages, $locale, $domain); } } return $translator; }); $app['translator.message_selector'] = $app->share(function () { return new MessageSelector(); }); $app['translator.domains'] = array(); $app['locale_fallbacks'] = array('en'); }
public function testPrimaryAndFallbackCataloguesContainTheSameMessagesRegardlessOfCaching() { /* * As a safeguard against potential BC breaks, make sure that primary and fallback * catalogues (reachable via getFallbackCatalogue()) always contain the full set of * messages provided by the loader. This must also be the case when these catalogues * are (internally) read from a cache. * * Optimizations inside the translator must not change this behaviour. */ /* * Create a translator that loads two catalogues for two different locales. * The catalogues contain distinct sets of messages. */ $translator = new Translator('a', null, $this->tmpDir); $translator->setFallbackLocales(array('b')); $translator->addLoader('array', new ArrayLoader()); $translator->addResource('array', array('foo' => 'foo (a)'), 'a'); $translator->addResource('array', array('foo' => 'foo (b)'), 'b'); $translator->addResource('array', array('bar' => 'bar (b)'), 'b'); $catalogue = $translator->getCatalogue('a'); $this->assertFalse($catalogue->defines('bar')); // Sure, the "a" catalogue does not contain that message. $fallback = $catalogue->getFallbackCatalogue(); $this->assertTrue($fallback->defines('foo')); // "foo" is present in "a" and "b" /* * Now, repeat the same test. * Behind the scenes, the cache is used. But that should not matter, right? */ $translator = new Translator('a', null, $this->tmpDir); $translator->setFallbackLocales(array('b')); $translator->addLoader('array', new ArrayLoader()); $translator->addResource('array', array('foo' => 'foo (a)'), 'a'); $translator->addResource('array', array('foo' => 'foo (b)'), 'b'); $translator->addResource('array', array('bar' => 'bar (b)'), 'b'); $catalogue = $translator->getCatalogue('a'); $this->assertFalse($catalogue->defines('bar')); $fallback = $catalogue->getFallbackCatalogue(); $this->assertTrue($fallback->defines('foo')); }
<?php use Tikomatic\Registry; use Symfony\Component\Translation\Translator; use Symfony\Component\Translation\Loader\ArrayLoader; use Symfony\Component\Translation\Loader\PoFileLoader; $registry = Registry::getInstance(); //Read language from config $config = $registry->get('config'); //Setup Translator $translator = new Translator($config->get('language')); $translator->setFallbackLocales(array('en')); //$translator->addLoader('array', new ArrayLoader()); $translator->addLoader('pofile', new PoFileLoader()); /*$translator->addResource('array', array( 'Symfony is great!' => 'J\'aime Symfony!', ), 'fr_FR');*/ $translator->addResource('pofile', APP_BASEPATH . '/../locale/fr_FR/LC_MESSAGES/default.po', 'fr_FR'); $translator->addResource('pofile', APP_BASEPATH . '/../locale/en/LC_MESSAGES/default.po', 'en'); //Insert translator into Registry $registry->set('translator', $translator);
public function testTransChoiceFallbackWithNoTranslation() { $translator = new Translator('ru', new MessageSelector()); $translator->setFallbackLocales(array('en')); $translator->addLoader('array', new ArrayLoader()); // consistent behavior with Translator::trans(), which returns the string // unchanged if it can't be found $this->assertEquals('some_message2', $translator->transChoice('some_message2', 10, array('%count%' => 10))); }
}; // Config $container['config'] = function ($c) { if (file_exists(DATABASE . DS . 'config.yml')) { $config = $c->get('yaml')->parse(file_get_contents(DATABASE . DS . 'config.yml')); } else { $config = $c->get('yaml')->parse(file_get_contents(DATABASE . DS . 'config.yml.dist')); } return $config; }; // Translator $container['translator'] = function ($c) { $config = $c->get('config'); $lingua = $config['lingua']; $translator = new Translator($lingua, new MessageSelector()); $translator->setFallbackLocales(['it_IT']); $translator->addLoader('yaml', new YamlFileLoader()); foreach (glob(LANGUAGE . DS . $lingua . DS . '*.' . $lingua . '.yml') as $f) { $translator->addResource('yaml', $f, $lingua); } return $translator; }; // Twig $container['view'] = function ($c) { $config = $c->get('config'); $settings = $c->get('settings'); $tema = $config['tema']; $view = new Slim\Views\Twig($settings['view']['template_path'] . DS . $tema, $settings['view']['twig']); // Add extensions $view->addExtension(new Slim\Views\TwigExtension($c->get('router'), $c->get('request')->getUri())); $view->addExtension(new Twig_Extension_Debug());
/** * Returns the container object. * * @param string $rootDir The root directoy * * @return ContainerBuilder The object instance */ public static function create($rootDir) { $container = new ContainerBuilder(); // Set up the kernel parameters $container->setParameter('kernel.root_dir', $rootDir); $container->setParameter('kernel.cache_dir', $rootDir . '/cache/install'); $container->setParameter('kernel.debug', false); // Load the parameters.yml file if (file_exists($rootDir . '/config/parameters.yml')) { $parameters = Yaml::parse(file_get_contents($rootDir . '/config/parameters.yml')); } else { $parameters = Yaml::parse(file_get_contents($rootDir . '/config/parameters.yml.dist')); } // Add the parameters to the container foreach ($parameters['parameters'] as $name => $value) { $container->setParameter($name, $value); } // Add the Contao upload path $container->setParameter('contao.upload_path', 'files'); // Set up the request stack $request = Request::createFromGlobals(); $requestStack = new RequestStack(); $requestStack->push($request); $container->set('request_stack', $requestStack); // Create the session bag $bag = new ArrayAttributeBag('_contao_be_attributes'); $bag->setName('contao_backend'); // Start the session $session = new Session(); $session->registerBag($bag); $session->start(); $container->set('session', $session); // Set up the database connection $container->set('database_connection', ConnectionFactory::create($parameters)); // Resolve the locale $translationsDir = __DIR__ . '/../Resources/translations'; $resolver = new LanguageResolver($requestStack, $translationsDir); $locale = $resolver->getLocale(); // Set up the translator $translator = new Translator($locale); $translator->setFallbackLocales(['en']); $translator->addLoader('xlf', new XliffFileLoader()); $translator->addResource('xlf', $translationsDir . '/messages.en.xlf', 'en'); if ('en' !== $locale) { $translator->addResource('xlf', $translationsDir . '/messages.' . $locale . '.xlf', 'en'); } $container->setParameter('locale', $locale); $container->set('translator.default', $translator); // Set up Twig $twig = new \Twig_Environment(new \Twig_Loader_Filesystem(__DIR__ . '/../Resources/views')); $twig->addGlobal('path', $request->getBasePath()); $twig->addGlobal('language', str_replace('_', '-', $locale)); $twig->addGlobal('ua', Environment::get('agent')->class); $twig->addFunction(new \Twig_SimpleFunction('asset', function ($path) use($request) { return '/' . ltrim($request->getBasePath() . '/' . $path, '/'); })); $twig->addFilter(new \Twig_SimpleFilter('trans', function ($message, $params = []) use($translator) { return $translator->trans($message, $params); })); $container->set('twig', $twig); // Add the kernel bundles $kernel = new UnbootableKernel('prod', false); $kernel->setRootDir($rootDir); $kernel->setBundles($kernel->registerBundles()); $bundles = []; foreach ($kernel->getBundles() as $bundle) { $bundles[$bundle->getName()] = get_class($bundle); } $container->set('kernel', $kernel); $container->setParameter('kernel.bundles', $bundles); // Add the file system $container->set('filesystem', new Filesystem()); // Add the Contao resources paths $pass = new AddResourcesPathsPass(); $pass->process($container); // Add the Contao resource finder $container->set('contao.resource_finder', new ResourceFinder($container->getParameter('contao.resources_paths'))); // Add the Contao resource locator $container->set('contao.resource_locator', new FileLocator($container->getParameter('contao.resources_paths'))); // Add the installer services $container->set('contao.installer', new Installer($container->get('database_connection'), $container->get('contao.resource_finder'), $container->get('translator.default'))); $container->set('contao.install_tool', new InstallTool($container->get('database_connection'), $rootDir)); $container->set('contao.install_tool_user', new InstallToolUser($container->get('session'))); return $container; }
/** * Gets the translator required for checking the DoubleLocale tests (en_UK etc) */ private function getNonRedirectingHostMapRouter($config = 'routing.yml') { $container = new Container(); $container->set('routing.loader', new YamlFileLoader(new FileLocator(__DIR__ . '/Fixture'))); $translator = new Translator('en_UK', new MessageSelector()); $translator->setFallbackLocales(array('en')); $translator->addLoader('yml', new TranslationLoader()); $translator->addResource('yml', __DIR__ . '/Fixture/routes.en_UK.yml', 'en_UK', 'routes'); $translator->addResource('yml', __DIR__ . '/Fixture/routes.en_US.yml', 'en_US', 'routes'); $translator->addResource('yml', __DIR__ . '/Fixture/routes.nl.yml', 'nl', 'routes'); $translator->addResource('yml', __DIR__ . '/Fixture/routes.en.yml', 'en', 'routes'); $container->set('i18n_loader', new I18nLoader(new DefaultRouteExclusionStrategy(), new DefaultPatternGenerationStrategy('custom', $translator, array('en_UK', 'en_US', 'nl_NL', 'nl_BE'), sys_get_temp_dir(), 'routes', 'en_UK'))); $router = new I18nRouter($container, $config); $router->setRedirectToHost(false); $router->setI18nLoaderId('i18n_loader'); $router->setDefaultLocale('en_UK'); $router->setHostMap(array('en_UK' => 'uk.test', 'en_US' => 'us.test', 'nl_NL' => 'nl.test', 'nl_BE' => 'be.test')); return $router; }
/** * (Symfony translator wrapper metódus) Sets the fallback locales. * * @param array $locales The fallback locales * * @throws \InvalidArgumentException If a locale contains invalid characters */ public function setFallbackLocales(array $locales) { $this->translator->setFallbackLocales($locales); }
/** * @dataProvider dataProviderGetMessages */ public function testGetMessages($resources, $locale, $expected) { $locales = array_keys($resources); $_locale = null !== $locale ? $locale : reset($locales); $locales = array_slice($locales, 0, array_search($_locale, $locales)); $translator = new Translator($_locale, new MessageSelector()); $translator->setFallbackLocales(array_reverse($locales)); $translator->addLoader('array', new ArrayLoader()); foreach ($resources as $_locale => $domainMessages) { foreach ($domainMessages as $domain => $messages) { $translator->addResource('array', $messages, $_locale, $domain); } } $result = $translator->getMessages($locale); $this->assertEquals($expected, $result); }
/** * @expectedException \InvalidArgumentException */ public function testTransChoiceFallbackWithNoTranslation() { $translator = new Translator('ru', new MessageSelector()); $translator->setFallbackLocales(array('en')); $translator->addLoader('array', new ArrayLoader()); $this->assertEquals('10 things', $translator->transChoice('some_message2', 10, array('%count%' => 10))); }
/** * {@inheritdoc} */ public function setFallbackLocales(array $locales) { parent::setFallbackLocales($locales); $this->fallbackResolver->setFallbackLocales($locales); }
*/ // include the composer autoloader require './vendor/autoload.php'; // Use the ridiculously long Symfony namespaces use Symfony\Bridge\Twig\Extension\TranslationExtension; use Symfony\Component\Translation\Loader\PhpFileLoader; use Symfony\Component\Translation\MessageSelector; use Symfony\Component\Translation\Translator; // Instantiate and setup Slim application instance $app = new \Slim\Slim(array('view' => new \Slim\Views\Twig(), 'templates.path' => './views')); // ONLY FOR EXAMPLE, DON'T DO THIS $language = $_GET["lang"]; // First param is the "default language" to use. $translator = new Translator($language, new MessageSelector()); // Set a fallback language incase you don't have a translation in the default language $translator->setFallbackLocales(['en_US']); // Add a loader that will get the php files we are going to store our translations in $translator->addLoader('php', new PhpFileLoader()); // Add language files here $translator->addResource('php', './lang/no_NB.php', 'no_NB'); // Norwegian $translator->addResource('php', './lang/en_US.php', 'en_US'); // English // Get the view $view = $app->view(); // Add the parserextensions TwigExtension and TranslationExtension to the view $view->parserExtensions = array(new \Slim\Views\TwigExtension(), new TranslationExtension($translator)); // setup a home route $app->get("/", function () use($app) { // Render a twig view $app->render("example.twig");
/** * Returns the container object. * * @param KernelInterface $kernel * @param Request $request * * @return ContainerBuilder */ public static function create(KernelInterface $kernel, Request $request) { $rootDir = $kernel->getRootDir(); $cacheDir = dirname($rootDir) . '/var/cache/' . $kernel->getEnvironment(); $logsDir = dirname($rootDir) . '/var/logs'; $container = new ContainerBuilder(); $container->setParameter('kernel.root_dir', $rootDir); $container->setParameter('kernel.cache_dir', $cacheDir); $container->setParameter('kernel.logs_dir', $logsDir); $container->setParameter('kernel.debug', false); $parameters = []; // Load the parameters.yml file if (file_exists($rootDir . '/config/parameters.yml')) { $parameters = Yaml::parse(file_get_contents($rootDir . '/config/parameters.yml')); } elseif (file_exists($rootDir . '/config/parameters.yml.dist')) { $parameters = Yaml::parse(file_get_contents($rootDir . '/config/parameters.yml.dist')); } // Add the parameters to the container if (!empty($parameters['parameters'])) { foreach ($parameters['parameters'] as $name => $value) { $container->setParameter($name, $value); } } // Add the Contao parameters $container->setParameter('contao.upload_path', 'files'); $container->setParameter('contao.image.target_path', 'assets/images'); // Set up the request stack $requestStack = new RequestStack(); $requestStack->push($request); $container->set('request_stack', $requestStack); // Create the session bag $bag = new ArrayAttributeBag('_contao_be_attributes'); $bag->setName('contao_backend'); // Start the session $session = new Session(); $session->registerBag($bag); $session->start(); $container->set('session', $session); // Set up the database connection $container->set('database_connection', ConnectionFactory::create($parameters)); // Resolve the locale $translationsDir = __DIR__ . '/../Resources/translations'; $resolver = new LanguageResolver($requestStack, $translationsDir); $locale = $resolver->getLocale(); // Update the request locale $request->setLocale($locale); // Set up the translator $translator = new Translator($locale); $translator->setFallbackLocales(['en']); $translator->addLoader('xlf', new XliffFileLoader()); $translator->addResource('xlf', $translationsDir . '/messages.en.xlf', 'en'); if ('en' !== $locale) { $translator->addResource('xlf', $translationsDir . '/messages.' . $locale . '.xlf', 'en'); } $container->set('translator', $translator); // Set up Twig $twigLoader = new \Twig_Loader_Filesystem(); $twigLoader->addPath(__DIR__ . '/../Resources/views', 'ContaoInstallation'); $twig = new \Twig_Environment($twigLoader); $twig->addExtension(new AnsiExtension()); $twig->addFunction(new \Twig_SimpleFunction('asset', function ($path) use($request) { return '/' . ltrim($request->getBasePath() . '/' . $path, '/'); })); $twig->addFilter(new \Twig_SimpleFilter('trans', function ($message, $params = []) use($translator) { return $translator->trans($message, $params); })); $container->set('twig', $twig); $kernelBundles = []; foreach ($kernel->getBundles() as $bundle) { $kernelBundles[$bundle->getName()] = get_class($bundle); } $container->set('kernel', $kernel); $container->setParameter('kernel.bundles', $kernelBundles); // Add the file system $container->set('filesystem', new Filesystem()); // Add the Contao resources paths $pass = new AddResourcesPathsPass(); $pass->process($container); // Add the Contao resource finder $container->set('contao.resource_finder', new ResourceFinder($container->getParameter('contao.resources_paths'))); // Add the Contao resource locator $container->set('contao.resource_locator', new FileLocator($container->getParameter('contao.resources_paths'))); // Add the Contao cache $container->set('contao.cache', new FilesystemCache($cacheDir . '/contao/cache', '', 022)); // Add the installer services $container->set('contao.installer', new Installer($container->get('database_connection'), $container->get('contao.resource_finder'), $container->get('translator'))); $container->set('contao.install_tool', new InstallTool($container->get('database_connection'), $rootDir)); $container->set('contao.install_tool_user', new InstallToolUser($container->get('session'))); return $container; }