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; }
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; }