function is_valid_code($code) { /* Check the given string is a valid language code. */ $lang = MLPLanguageHandler::compact_code($code); $short = $lang['short']; if (isset($short)) { return MLPLanguageHandler::is_valid_short_code($short); } return false; }
function _l10n_inject_lang_markers_cb($matches) { global $l10n_language, $l10n_replace_strings, $l10n_url_exclusions, $prefs; $debug = 0; #$debug = !$l10n_replace_strings['insert_blank']; $logfile = $prefs['tempdir'] . DS . 'l10n.log.txt'; static $counter; if (!isset($counter)) { $counter = 0; } $counter += 1; $insert = 0; $result = $matches[0]; $query = ''; if (isset($prefs['l10n_language_marker_func']) and is_callable($prefs['l10n_language_marker_func'])) { $callback_language_marker = call_user_func($prefs['l10n_language_marker_func'], $l10n_language['long']); } if (!$callback_language_marker) { $callback_language_marker = $l10n_language['short']; } if ($debug) { error_log(n . n . 'Hit #' . $counter . ' : [' . $matches[0] . ']', 3, $logfile); } if (@$l10n_replace_strings['insert_blank'] && empty($matches[0])) { $insert = 1; if ($debug) { error_log(' ... Blank! ... INSERTING : /' . $callback_language_marker . '/', 3, $logfile); } } else { if ($debug) { error_log(' ... PARSING : ' . $matches[2], 3, $logfile); } $url = trim($matches[2], '/'); $url = strtolower($url); $qs = strpos($url, '?'); if ($qs !== false) { $url = substr($url, 0, $qs); } $r = array_map('urldecode', explode('/', $url)); if (isset($prefs['l10n_detect_language_func']) and is_callable($prefs['l10n_detect_language_func'])) { $callback_detect_language = call_user_func($prefs['l10n_detect_language_func'], $req); } if (is_array($callback_detect_language) and isset($callback_detect_language['lang']) and isset($callback_detect_language['lang']['long'])) { $callback_detect_language = $callback_detect_language['lang']['long']; } else { $callback_detect_language = $r[0]; } if ($debug) { error_log(n . t . ' -> ' . $callback_detect_language, 3, $logfile); } $excluded = in_array($r[0], $l10n_url_exclusions); if ($excluded) { if ($debug) { error_log(' ... SKIPPING: this is an excluded section/area ', 3, $logfile); } } else { if (!@$l10n_replace_strings['insert_blank'] && empty($matches[1])) { if ($debug) { error_log(' ... SKIPPING: not a URL ', 3, $logfile); } } elseif (empty($callback_detect_language) || !(MLPLanguageHandler::is_valid_short_code($callback_detect_language) && MLPLanguageHandler::iso_639_langs($callback_detect_language, 'valid_long'))) { if ($debug) { error_log(' ... INSERTING : ' . $callback_language_marker, 3, $logfile); } $insert = 1; } else { if ($debug) { error_log(' ... SKIPPING: language (' . $callback_detect_language . ') present ', 3, $logfile); } } } } if ($insert) { $extra = ''; if ($matches[2][0] !== '/') { $extra = '/'; } $result = $l10n_replace_strings['start_rep'] . $matches[1] . '/' . $callback_language_marker . $extra . $matches[2] . $l10n_replace_strings['stop_rep']; if ($debug) { error_log(n . t . ' -> ' . $result, 3, $logfile); } } return $result; }