public function testPht() { PhutilTranslator::setInstance(new PhutilTranslator()); $this->assertEqual('beer', pht('beer')); $this->assertEqual('1 beer(s)', pht('%d beer(s)', 1)); $english_locale = PhutilLocale::loadLocale('en_US'); PhutilTranslator::getInstance()->setLocale($english_locale); PhutilTranslator::getInstance()->setTranslations(array('%d beer(s)' => array('%d beer', '%d beers'))); $this->assertEqual('1 beer', pht('%d beer(s)', 1)); $czech_locale = PhutilLocale::loadLocale('cs_CZ'); PhutilTranslator::getInstance()->setLocale($czech_locale); PhutilTranslator::getInstance()->setTranslations(array('%d beer(s)' => array('%d pivo', '%d piva', '%d piv'))); $this->assertEqual('5 piv', pht('%d beer(s)', 5)); }
/** * Load the complete translation map for a locale. * * This will compile primary and fallback translations into a single * translation map. * * @param string Locale code, like "en_US". * @return map<string, wild> Map of all avialable translations. */ public static function getTranslationMapForLocale($locale_code) { $locale = PhutilLocale::loadLocale($locale_code); $translations = self::loadAllTranslations(); $results = array(); foreach ($translations as $translation) { if ($translation->getLocaleCode() == $locale_code) { $results += $translation->getFilteredTranslations(); } } $fallback_code = $locale->getFallbackLocaleCode(); if ($fallback_code !== null) { $results += self::getTranslationMapForLocale($fallback_code); } return $results; }
public static function setLocaleCode($locale_code) { if (!$locale_code) { return; } if ($locale_code == self::$localeCode) { return; } try { $locale = PhutilLocale::loadLocale($locale_code); $translations = PhutilTranslation::getTranslationMapForLocale($locale_code); $override = self::getEnvConfig('translation.override'); if (!is_array($override)) { $override = array(); } PhutilTranslator::getInstance()->setLocale($locale)->setTranslations($override + $translations); self::$localeCode = $locale_code; } catch (Exception $ex) { // Just ignore this; the user likely has an out-of-date locale code. } }
private function newTranslator($locale_code) { $locale = PhutilLocale::loadLocale($locale_code); return id(new PhutilTranslator())->setLocale($locale); }
* - Next to 'arcanist/'. * - Anywhere in the normal PHP 'include_path'. * - Inside 'arcanist/externals/includes/'. * * When looking in these places, we expect to find a 'libphutil/' directory. */ function arcanist_adjust_php_include_path() { // The 'arcanist/' directory. $arcanist_dir = dirname(dirname(__FILE__)); // The parent directory of 'arcanist/'. $parent_dir = dirname($arcanist_dir); // The 'arcanist/externals/includes/' directory. $include_dir = implode(DIRECTORY_SEPARATOR, array($arcanist_dir, 'externals', 'includes')); $php_include_path = ini_get('include_path'); $php_include_path = implode(PATH_SEPARATOR, array($parent_dir, $php_include_path, $include_dir)); ini_set('include_path', $php_include_path); } arcanist_adjust_php_include_path(); if (getenv('ARC_PHUTIL_PATH')) { @(include_once getenv('ARC_PHUTIL_PATH') . '/scripts/__init_script__.php'); } else { @(include_once 'libphutil/scripts/__init_script__.php'); } if (!@constant('__LIBPHUTIL__')) { echo "ERROR: Unable to load libphutil. Put libphutil/ next to arcanist/, or " . "update your PHP 'include_path' to include the parent directory of " . "libphutil/, or symlink libphutil/ into arcanist/externals/includes/.\n"; exit(1); } phutil_load_library(dirname(dirname(__FILE__)) . '/src/'); PhutilTranslator::getInstance()->setLocale(PhutilLocale::loadLocale('en_US'))->setTranslations(PhutilTranslation::getTranslationMapForLocale('en_US'));