Returns array of locales from given resources
public getAvailableLocales ( ) : array | ||
return | array |
public function getLocale() { $languages = $this->translator->getAvailableLocales(); foreach ($languages as $itemL) { $result = explode("_", $itemL); $iLocale[] = $result[0]; } return $iLocale; }
public function dump() { $allMessages = []; $locales = $this->translator->getAvailableLocales(); foreach ($locales as $locale) { $catalogue = $this->translator->getCatalogue($locale); $messages = $catalogue->all(); $shortLocale = $this->getShortLocale($locale); $allMessages[$shortLocale] = $messages; } return Json::encode($allMessages, Json::PRETTY); }
/** * @param \Kdyby\Translation\Translator $translator * @return string|NULL */ public function resolve(Kdyby\Translation\Translator $translator) { $short = array_map(function ($locale) { return substr($locale, 0, 2); }, $translator->getAvailableLocales()); return $this->httpRequest->detectLanguage($short) ?: NULL; }
/** * @param Translator $translator * @return string|NULL */ public function resolve(Translator $translator) { if (!$this->session->isStarted() && $this->httpResponse->isSent()) { trigger_error("The advice of session locale resolver is required but the session has not been started and headers had been already sent. " . "Either start your sessions earlier or disabled the SessionResolver.", E_USER_WARNING); return NULL; } if (empty($this->localeSession->locale)) { return NULL; } $short = array_map(function ($locale) { return substr($locale, 0, 2); }, $translator->getAvailableLocales()); if (!in_array(substr($this->localeSession->locale, 0, 2), $short, TRUE)) { return NULL; } return $this->localeSession->locale; }
public function compute(Translator $translator, $locale) { $locales = array(); foreach ($this->fallbackLocales as $fallback) { if ($fallback === $locale) { continue; } $locales[] = $fallback; } if (strrchr($locale, '_') !== false) { array_unshift($locales, substr($locale, 0, -strlen(strrchr($locale, '_')))); } foreach ($translator->getAvailableLocales() as $available) { if ($available === $locale) { continue; } if (substr($available, 0, 2) === substr($locale, 0, 2)) { array_unshift($locales, $available); break; } } return array_unique($locales); }
/** * Detects language from the Accept-Language header. * This method uses the code from Nette\Http\Request::detectLanguage. * @link https://github.com/nette/http/blob/0d9ef49051fba799148ef877dd32928a68731766/src/Http/Request.php#L294-L326 * @author David Grudl * @param Kdyby\Translation\Translator $translator * @return string|NULL */ public function resolve(Kdyby\Translation\Translator $translator) { $header = $this->httpRequest->getHeader('Accept-Language'); if (!$header) { return NULL; } $langs = []; foreach ($translator->getAvailableLocales() as $locale) { $langs[] = $locale; if (strlen($locale) > 2) { $langs[] = substr($locale, 0, 2); } } if (!$langs) { return NULL; } $s = strtolower($header); // case insensitive $s = strtr($s, '_', '-'); // cs_CZ means cs-CZ rsort($langs); // first more specific preg_match_all('#(' . implode('|', $langs) . ')(?:-[^\\s,;=]+)?\\s*(?:;\\s*q=([0-9.]+))?#', $s, $matches); if (!$matches[0]) { return NULL; } $max = 0; $lang = NULL; foreach ($matches[1] as $key => $value) { $q = $matches[2][$key] === '' ? 1.0 : (double) $matches[2][$key]; if ($q > $max) { $max = $q; $lang = $value; } } return $lang; }
/** * Saves translation to catalog. ONLY NEON IS SUPPORTED AT THIS MOMENT * * @param string $locale * @param string $code * @param string $string */ private function saveTranslationToCatalogue($locale, $code, $string) { if (!in_array($locale, $this->translator->getAvailableLocales())) { throw new Kdyby\TranslationControl\InvalidArgumentException(sprintf('Catalog "%s" is unknown.', $locale)); } $catalog = $this->translator->getCatalogue($locale); $catalogFound = FALSE; foreach ($catalog->getResources() as $resource) { if (get_class($resource) != 'Symfony\\Component\\Config\\Resource\\FileResource') { continue; } /** @var \Symfony\Component\Config\Resource\FileResource $resource */ $filePath = $resource->getResource(); if (pathinfo($filePath, PATHINFO_EXTENSION) != 'neon' || !Nette\Utils\Strings::endsWith(strtolower($filePath), sprintf('%s.neon', strtolower($locale)))) { continue; } $catalog->add(array($code => $string)); $this->saveTranslationToNeonFile($filePath, $code, $string); $catalogFound = TRUE; } if (!$catalogFound) { throw new Kdyby\TranslationControl\UnsupportedCatalogException('Only neon catalog is supported.'); } }
public function __construct($defaultLocale, Kdyby\Translation\Translator $translator) { $this->availableLocales = $translator->getAvailableLocales(); $this->defaultLocale = $defaultLocale; }
public function getAvailableLocales() { return $this->translator->getAvailableLocales(); }
/** * Sets translator * * @param \Kdyby\Translation\Translator $translator translator * @return self */ public function setTranslator(Translator $translator) { $availableLocales = $translator->getAvailableLocales(); if (in_array('cs_CZ', $availableLocales) === FALSE) { $translator->addResource('neon', __DIR__ . '/lang/visualPaginator.cs_CZ.neon', 'cs_CZ', 'visualPaginator'); } if (in_array('en_GB', $availableLocales) === FALSE) { $translator->addResource('neon', __DIR__ . '/lang/visualPaginator.en_GB.neon', 'en_GB', 'visualPaginator'); } $this->translator = $translator; return $this; }