| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <?php
- // Functions for internationalization
- /**
- * Translates string to given language in first parameter, key given in second parameter (dynamically loads required language). Works like spritf from second parameter
- * @global array $LANG Associative array of language pharses
- * @return string Translated string
- */
- function _translate() {
- global $LANG;
- $args = func_get_args();
- $l = $args[0];
- if (empty($l)) return 'NO LANGUAGE DEFINED';
- $key = $args[1];
- if (empty($key)) return '';
- // No translation needed
- if (!preg_match('/[a-z]/i', $key)) {
- return $key;
- }
- // Load language file (if not loaded yet)
- if (!isset($LANG[$l])) {
- require_once($_SERVER['DOCUMENT_ROOT']."/inc/i18n/$l.php");
- }
- //if (!isset($LANG[$l][$key])) file_put_contents('/somewhere/something.log', "$key\n", FILE_APPEND);
- $text = isset($LANG[$l][$key]) ? $LANG[$l][$key] : $key;
- array_shift($args);
- if (count($args) > 1) {
- $args[0] = $text;
- return call_user_func_array('sprintf', $args);
- } else {
- return $text;
- }
- }
- /**
- * Translates string by a given key in first parameter to current session language. Works like sprintf
- * @global array $LANG Associative array of language pharses
- * @return string Translated string
- * @see _translate()
- */
- function __() {
- $args = func_get_args();
- array_unshift($args, $_SESSION['language']);
- return call_user_func_array('_translate', $args);
- }
- /**
- * Detects user language from Accept-Language HTTP header.
- * @param string Fallback language (default: 'en')
- * @return string Language code (such as 'en' and 'ja')
- */
- function detect_user_language($fallback='en') {
- static $user_lang = '';
- // Already detected
- if (!empty($user_lang)) return $user_lang;
- // Check if Accept-Language header is available
- if (!isset($_SERVER) ||
- !isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ||
- !is_string($_SERVER['HTTP_ACCEPT_LANGUAGE'])
- ) {
- // Store result for reusing
- $user_lang = $fallback;
- return $user_lang;
- }
- // Sort Accept-Language by `q` value
- $accept_langs = explode(',', preg_replace('/\s/', '', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE'])));
- $accept_langs_sorted = array() ;
- foreach ($accept_langs as $lang) {
- $div = explode(';q=', $lang, 2);
- if (count($div) < 2) {
- // `q` value was not specfied
- // -> Set default `q` value (1)
- $div[] = '1';
- }
- list($code, $q) = $div;
- if (preg_match('/^[\w\-]+$/', $code)) {
- // Acceptable language code
- $accept_langs_sorted[$code] = (double)$q;
- }
- }
- arsort($accept_langs_sorted);
- // List languages
- exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var);
- $languages = json_decode(implode('', $output), true);
- unset($output);
- // Find best matching language
- foreach ($accept_langs_sorted as $user_lang => $dummy) {
- $decision = '';
- foreach ($languages as $prov_lang) {
- if (strlen($decision) > strlen($prov_lang)) continue;
- if (strpos($user_lang, $prov_lang) !== false) {
- $decision = $prov_lang;
- }
- }
- if (!empty($decision)) {
- // Store result for reusing
- $user_lang = $decision;
- return $user_lang;
- }
- }
- // Store result for reusing
- $user_lang = $fallback;
- return $user_lang;
- }
- /**
- * Detects user language .
- * @param string Fallback language (default: 'en')
- * @return string Language code (such as 'en' and 'ja')
- */
- function detect_login_language(){
- }
|