diff --git a/common.php b/common.php index 627ea33f..7b266ff3 100644 --- a/common.php +++ b/common.php @@ -39,6 +39,7 @@ if(isset($CONF['configured'])) { exit(0); } } +require_once("$incpath/languages/language.php"); require_once("$incpath/functions.inc.php"); require_once("$incpath/languages/" . check_language () . ".lang"); diff --git a/functions.inc.php b/functions.inc.php index 9baf22b4..680782d5 100644 --- a/functions.inc.php +++ b/functions.inc.php @@ -142,19 +142,29 @@ function _flash_string($type, $string) { // check_language // Action: checks what language the browser uses // Call: check_language +// Parameter: $use_post - set to 1 if $_POST should NOT be read // -function check_language () +function check_language ($use_post = 1) { global $CONF; $lang = $CONF['default_language']; $supported_languages = array ('bg', 'ca', 'cn', 'cs', 'da', 'de', 'en', 'es', 'et', 'eu', 'fi', 'fo', 'fr', 'hu', 'is', 'it', 'mk', 'nl', 'nn', 'pl', 'pt-br', 'ru', 'sl', 'sv', 'tr', 'tw'); + # TODO: use global $supported_languages (from languages/languages.php) instead + if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $lang_array = preg_split ('/(\s*,\s*)/', $_SERVER['HTTP_ACCEPT_LANGUAGE']); + if (safecookie('lang')) { + array_unshift($lang_array, safecookie('lang')); # prefer language from cookie + } + if ( $use_post && safepost('lang')) { + array_unshift($lang_array, safepost('lang')); # but prefer $_POST['lang'] even more + } + for($i = 0; $i < count($lang_array); $i++) { $lang_next = $lang_array[$i]; - $lang_next = strtolower(substr(trim($lang_next), 0, 2)); + $lang_next = strtolower(trim($lang_next)); if(in_array($lang_next, $supported_languages)) { $lang = $lang_next; @@ -165,7 +175,30 @@ function check_language () return $lang; } +// +// language_selector +// Action: returns a language selector dropdown with the browser (or cookie) language preselected +// Call: language_selector() +// +function language_selector() +{ + global $supported_languages; # from languages/languages.php + + $current_lang = check_language(); + $selector = '"; + return $selector; +} // // check_string @@ -374,6 +407,19 @@ function safeserver ($param, $default="") { return $retval; } +/** + * safecookie + * @see safeget() + * @param String $param + * @param String $default (optional) + * @return String value from $_COOKIE[$param] or $default + */ +function safecookie ($param, $default="") { + $retval=$default; + if (isset($_COOKIE[$param])) $retval=$_COOKIE[$param]; + return $retval; +} + // // get_domain_properties diff --git a/languages/language.php b/languages/language.php new file mode 100644 index 00000000..667ae97a --- /dev/null +++ b/languages/language.php @@ -0,0 +1,37 @@ + + 'Български - Bulgarian', + 'ca' => 'Català - Catalan', + 'cn' => '中文 - Chinese simplified (gb2312)', + 'tw' => '中文 - Chinese traditional', + 'cs' => 'Česky - Czech', + 'da' => 'Dansk - Danish', + 'de' => 'Deutsch - German', + 'en' => 'English', + 'es' => 'Español - Spanish', + 'et' => 'Eesti - Estonian', + 'eu' => 'Euskara - Basque', + 'fi' => 'Suomi - Finnish', + 'fo' => 'Faroese', + 'fr' => 'Français - French', + 'hr' => 'Hrvatski - Croatian', + 'hu' => 'Magyar - Hungarian', + 'is' => 'Icelandic', + 'it' => 'Italiano - Italian', + 'lt' => 'Lietuvių - Lithuanian', + 'mk' => 'Macedonian - Macedonian', + 'nl' => 'Nederlands - Dutch', + 'nn' => 'Norsk - Norwegian', + 'pl' => 'Polski - Polish', + 'pt-br' => 'Português - Brazilian portuguese', + 'ru' => 'Русский - Russian', + 'sk' => 'Slovenčina - Slovak', + 'sl' => 'Slovenščina - Slovenian', + 'sv' => 'Svenska - Swedish', + 'tr' => 'Türkçe - Turkish', +); + +/* vim: set expandtab ft=php softtabstop=4 tabstop=4 shiftwidth=4: */ +?> diff --git a/login.php b/login.php index 8b175831..39b992a9 100644 --- a/login.php +++ b/login.php @@ -25,6 +25,7 @@ * * fUsername * fPassword + * lang */ require_once('common.php'); @@ -54,6 +55,12 @@ if ($_SERVER['REQUEST_METHOD'] == "POST") $fPassword = ''; if (isset ($_POST['fUsername'])) $fUsername = escape_string ($_POST['fUsername']); if (isset ($_POST['fPassword'])) $fPassword = escape_string ($_POST['fPassword']); + $lang = safepost('lang'); + + if ( $lang != check_language(0) ) { # only set cookie if language selection was changed + setcookie('lang', $lang, time() + 60*60*24*30); # language cookie, lifetime 30 days + # (language preference cookie is processed even if username and/or password are invalid) + } $result = db_query ("SELECT password FROM $table_admin WHERE username='$fUsername' AND active='1'"); if ($result['rows'] == 1) diff --git a/templates/login.php b/templates/login.php index 1cc8a5ec..d471b174 100644 --- a/templates/login.php +++ b/templates/login.php @@ -13,6 +13,11 @@