public static function getLocaleName($locale)
 {
     $trans = I2CE::getConfig()->traverse("/locales/languages", true, false);
     if (!$trans instanceof I2CE_MagicDataNode) {
         return $locale;
     }
     if (($pos = strpos($locale, '_')) !== false) {
         $lang = substr($locale, 0, $pos);
         $region = substr($locale, $pos + 1);
     } else {
         $lang = $locale;
         $region = false;
     }
     $resolution = I2CE_Locales::getLocaleResolution($locale);
     $t_lang = false;
     foreach ($resolution as $loc) {
         if ($trans->is_translated($loc, $locale)) {
             return $trans->getTranslation($loc, false, $locale);
         }
         if ($trans->is_translated($loc, $lang)) {
             $t_lang = $trans->getTranslation($loc, false, $lang);
             if ($region) {
                 $t_lang .= ' (' . $region . ')';
             }
             return $t_lang;
         }
     }
     if ($trans->is_scalar($locale)) {
         return $trans->{$locale};
     }
     if (!$trans->setIfIsSet($t_lang, $lang)) {
         $t_lang = $lang;
     }
     return $t_lang;
 }
 public function getTranslation($locale, $resolve = true, $path = null)
 {
     if ($path !== null) {
         $data = $this->traverse($path, false, false);
         if (!$data instanceof I2CE_MagicDataNode) {
             return false;
         }
     } else {
         if ($this->type == self::TYPE_NOT_POPULATED) {
             if (!$this->populate()) {
                 I2CE::raiseError("Could not populate at " . $this->getPath(false));
                 return false;
             }
         }
         $data = $this;
     }
     if (!$data->type > 0) {
         return false;
     }
     if (!$data->is_translatable()) {
         $resolution = array(I2CE_Locales::DEFAULT_LOCALE);
     } else {
         if ($resolve) {
             if ($this->top instanceof I2CE_MagicData) {
                 $resolution = $this->top->locales;
             } else {
                 $resolution = I2CE_Locales::getLocaleResolution($locale);
             }
         } else {
             $resolution = array($locale);
         }
     }
     foreach ($resolution as $locale) {
         if ($locale == I2CE_Locales::DEFAULT_LOCALE) {
             if ($data->_hasAttribute($locale, 'T')) {
                 $val = $data->_getAttribute($locale, 'T');
                 if (strlen($val) > 0) {
                     return $val;
                 }
             }
             return $data->value;
         } else {
             if ($data->_hasAttribute($locale, 'T')) {
                 return $data->_getAttribute($locale, 'T');
             }
         }
     }
     return $data->value;
 }
Esempio n. 3
0
 public static function getPublishedConceptList($oid, $version = false, $lang = 'en-US')
 {
     $doc = false;
     $versions = self::getVersions($oid);
     if (!$version && count($versions) > 0) {
         $version = max($versions);
     }
     if (!in_array($version, $versions)) {
         return false;
     }
     $available_langs = self::getLangs($oid, $version);
     $available_locales = array();
     foreach ($available_langs as $available_lang) {
         $available_locales[strtolower(strtr($available_lang, '-', '_'))] = $available_lang;
     }
     $found_lang = false;
     foreach (I2CE_Locales::getLocaleResolution(strtr($lang, '-', '_')) as $search_locale) {
         $search_locale = strtolower($search_locale);
         if (array_key_exists($search_locale, $available_locales)) {
             $found_lang = $available_locales[$search_locale];
             break;
         }
     }
     if (!I2CE_MagicDataNode::checkKey($found_lang) || !($path = "/modules/SVS/lists/" . $oid . "/published/" . $version . '/' . $found_lang) || !I2CE::getConfig()->setIfIsSet($doc, $path)) {
         return false;
     }
     return $doc;
 }