* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ namespace Chill\MainBundle\Templating; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Translation\Translator; /** * * This helper helps to find the string in current locale from translatable_strings * * @author Julien Fastré * */ class TranslatableStringHelper { /** * * @var RequestStack */ private $requestStack; private $fallbackLocales; public function __construct(RequestStack $requestStack, Translator $translator) { $this->requestStack = $requestStack; $this->fallbackLocales = $translator->getFallbackLocales(); } /** * return the string in current locale if it exists. * * If it does not exists; return the name in the first language available. * * Return a blank string if any strings are available. * Return NULL if $translatableString is NULL * * @param array $translatableStrings * @return string */ public function localize(array $translatableStrings) { if (NULL === $translatableStrings) { return NULL; } $language = $this->requestStack->getCurrentRequest()->getLocale(); if (isset($translatableStrings[$language])) { return $translatableStrings[$language]; } else { foreach ($this->fallbackLocales as $locale) { if (array_key_exists($locale, $translatableStrings)) { return $translatableStrings[$locale]; } } } // no fallback translation... trying the first available $langs = array_keys($translatableStrings); if (count($langs) === 0) { return ''; } return $translatableStrings[$langs[0]]; } }