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;
 }
Пример #3
0
 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);
 }
Пример #5
0
 *  - 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'));