diff options
author | Igor Scheller <igor.scheller@igorshp.de> | 2019-07-08 01:31:59 +0200 |
---|---|---|
committer | Igor Scheller <igor.scheller@igorshp.de> | 2019-07-08 01:58:06 +0200 |
commit | f90ab26feedb61615bde2f94bbf5acc7e4f28342 (patch) | |
tree | bef3b8c72e27089dbef317512c4ab2d11ab34405 /src/Helpers/Translation/TranslationServiceProvider.php | |
parent | e9f157ec5ccdfae73b4c9e82c9ae7c37bcfa1513 (diff) |
Moved translation helpers to sub namespace
Diffstat (limited to 'src/Helpers/Translation/TranslationServiceProvider.php')
-rw-r--r-- | src/Helpers/Translation/TranslationServiceProvider.php | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/Helpers/Translation/TranslationServiceProvider.php b/src/Helpers/Translation/TranslationServiceProvider.php new file mode 100644 index 00000000..d0cda6a8 --- /dev/null +++ b/src/Helpers/Translation/TranslationServiceProvider.php @@ -0,0 +1,63 @@ +<?php + +namespace Engelsystem\Helpers\Translation; + +use Engelsystem\Config\Config; +use Engelsystem\Container\ServiceProvider; +use Symfony\Component\HttpFoundation\Session\Session; + +class TranslationServiceProvider extends ServiceProvider +{ + public function register() + { + /** @var Config $config */ + $config = $this->app->get('config'); + /** @var Session $session */ + $session = $this->app->get('session'); + + $locales = $config->get('locales'); + $locale = $config->get('default_locale'); + + $sessionLocale = $session->get('locale', $locale); + if (isset($locales[$sessionLocale])) { + $locale = $sessionLocale; + } + + $this->initGettext(); + $session->set('locale', $locale); + + $translator = $this->app->make( + Translator::class, + ['locale' => $locale, 'locales' => $locales, 'localeChangeCallback' => [$this, 'setLocale']] + ); + $this->app->instance(Translator::class, $translator); + $this->app->instance('translator', $translator); + } + + /** + * @param string $textDomain + * @param string $encoding + * @codeCoverageIgnore + */ + protected function initGettext($textDomain = 'default', $encoding = 'UTF-8') + { + bindtextdomain($textDomain, $this->app->get('path.lang')); + bind_textdomain_codeset($textDomain, $encoding); + textdomain($textDomain); + } + + /** + * @param string $locale + * @codeCoverageIgnore + */ + public function setLocale($locale) + { + // Set the users locale + putenv('LC_ALL=' . $locale); + setlocale(LC_ALL, $locale); + + // Reset numeric formatting to allow output of floats + putenv('LC_NUMERIC=C'); + setlocale(LC_NUMERIC, 'C'); + } +} |