2) $requested_lang = substr($requested_lang, 0, 2); if (locale_exists($requested_lang)) return $requested_lang; } } if (locale_exists($default_locale)) return $default_locale; return 'en'; } function get_locale() { global $webimroot, $locale_pattern; $locale = verifyparam("locale", $locale_pattern, ""); if ($locale && locale_exists($locale)) { $_SESSION['locale'] = $locale; setcookie('webim_locale', $locale, time() + 60 * 60 * 24 * 1000, "$webimroot/"); } else if (isset($_SESSION['locale'])) { $locale = $_SESSION['locale']; } if (!$locale || !locale_exists($locale)) $locale = get_user_locale(); return $locale; } function get_locale_links($href) { global $current_locale; $localeLinks = array(); $allLocales = get_available_locales(); if (count($allLocales) < 2) { return null; } foreach ($allLocales as $k) { $localeLinks[$k] = getlocal_($k, "names"); } return $localeLinks; } function load_messages($locale) { global $messages, $webim_encoding, $output_encoding; $hash = array(); $current_encoding = $webim_encoding; $fp = fopen(dirname(__FILE__) . "/../../locales/$locale/properties", "r"); while (!feof($fp)) { $line = fgets($fp, 4096); $keyval = preg_split("/=/", $line, 2); if (isset($keyval[1])) { if ($keyval[0] == 'encoding') { $current_encoding = trim($keyval[1]); } else if ($keyval[0] == 'output_encoding') { $output_encoding[$locale] = trim($keyval[1]); } else if ($current_encoding == $webim_encoding) { $hash[$keyval[0]] = str_replace("\\n", "\n", trim($keyval[1])); } else { $hash[$keyval[0]] = myiconv($current_encoding, $webim_encoding, str_replace("\\n", "\n", trim($keyval[1]))); } } } fclose($fp); $messages[$locale] = $hash; } function getoutputenc() { global $current_locale, $output_encoding, $webim_encoding, $messages; if (!isset($messages[$current_locale])) load_messages($current_locale); return isset($output_encoding[$current_locale]) ? $output_encoding[$current_locale] : $webim_encoding; } function getstring_($text, $locale) { global $messages; if (!isset($messages[$locale])) load_messages($locale); $localized = $messages[$locale]; if (isset($localized[$text])) return $localized[$text]; if ($locale != 'en') { return getstring_($text, 'en'); } return "!" . $text; } function getstring($text) { global $current_locale; return getstring_($text, $current_locale); } function getlocal($text) { global $current_locale, $webim_encoding; return myiconv($webim_encoding, getoutputenc(), getstring_($text, $current_locale)); } function getlocal_($text, $locale) { global $webim_encoding; return myiconv($webim_encoding, getoutputenc(), getstring_($text, $locale)); } function getstring2_($text, $params, $locale) { $string = getstring_($text, $locale); for ($i = 0; $i < count($params); $i++) { $string = str_replace("{" . $i . "}", $params[$i], $string); } return $string; } function getstring2($text, $params) { global $current_locale; return getstring2_($text, $params, $current_locale); } function getlocal2($text, $params) { global $current_locale, $webim_encoding; $string = myiconv($webim_encoding, getoutputenc(), getstring_($text, $current_locale)); for ($i = 0; $i < count($params); $i++) { $string = str_replace("{" . $i . "}", $params[$i], $string); } return $string; } /* prepares for Javascript string */ function getlocalforJS($text, $params) { global $current_locale, $webim_encoding; $string = myiconv($webim_encoding, getoutputenc(), getstring_($text, $current_locale)); $string = str_replace("\"", "\\\"", str_replace("\n", "\\n", $string)); for ($i = 0; $i < count($params); $i++) { $string = str_replace("{" . $i . "}", $params[$i], $string); } return $string; } $locale_pattern = "/^[\w-]{2,5}$/"; $current_locale = get_locale(); $messages = array(); $output_encoding = array(); ?>