aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/classes/user.php
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/classes/user.php')
-rw-r--r--phpBB/includes/classes/user.php122
1 files changed, 71 insertions, 51 deletions
diff --git a/phpBB/includes/classes/user.php b/phpBB/includes/classes/user.php
index a2eb4fb813..bc017c69e0 100644
--- a/phpBB/includes/classes/user.php
+++ b/phpBB/includes/classes/user.php
@@ -133,16 +133,78 @@ class phpbb_user extends phpbb_session
}
/**
- * Initialize user session
- *
- * @param bool $update_session_page If true the session page gets updated.
- * This can be set to false to circumvent certain scripts to update the users last visited page.
- * @access public
+ * Determine and set language
*/
- public function init($update_session_page = true)
+ public function set_language($lang_name = '')
{
- $this->session_begin($update_session_page);
- phpbb::$acl->init($this->data);
+ // Try to determine language from browser
+ if (!$lang_name && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']))
+ {
+ $accept_lang_ary = explode(',', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']));
+
+ foreach ($accept_lang_ary as $accept_lang)
+ {
+ // Set correct format ... guess full xx_yy form
+ $accept_lang = substr($accept_lang, 0, 2) . '_' . substr($accept_lang, 3, 2);
+
+ if (file_exists($this->lang_path . basename($accept_lang)))
+ {
+ $lang_name = $accept_lang;
+ break;
+ }
+ else
+ {
+ // No match on xx_yy so try xx
+ $accept_lang = substr($accept_lang, 0, 2);
+ if (file_exists($this->lang_path . basename($accept_lang)))
+ {
+ $lang_name = $accept_lang;
+ break;
+ }
+ }
+ }
+ }
+
+ // Still no luck?
+ $lang_name = (!$lang_name && isset(phpbb::$config['default_lang'])) ? phpbb::$config['default_lang'] : basename($lang_name);
+
+ // No appropriate language found ... so let's use the first one in the language
+ // dir, this may or may not be English
+ if (!$lang_name)
+ {
+ $dir = @opendir($this->lang_path);
+
+ if (!$dir)
+ {
+ trigger_error('Unable to access the language directory', E_USER_ERROR);
+ }
+
+ while (($file = readdir($dir)) !== false)
+ {
+ $path = $this->lang_path . $file;
+
+ if (!is_file($path) && !is_link($path) && file_exists($path . '/iso.txt'))
+ {
+ $lang_name = $file;
+ break;
+ }
+ }
+ closedir($dir);
+ }
+
+ // Update language name if changed
+ if ($this->lang_name !== $lang_name)
+ {
+ $this->lang_name = $lang_name;
+ }
+
+ // We include common language file here to not load it every time a custom language file is included
+ $lang = &$this->lang;
+
+ if ((include $this->lang_path . $this->lang_name . "/common." . PHP_EXT) === false)
+ {
+ die('Language file ' . $this->lang_path . $this->lang_name . "/common." . PHP_EXT . " couldn't be opened.");
+ }
}
/**
@@ -170,51 +232,9 @@ class phpbb_user extends phpbb_session
$this->date_format = phpbb::$config['default_dateformat'];
$this->timezone = phpbb::$config['board_timezone'] * 3600;
$this->dst = phpbb::$config['board_dst'] * 3600;
-
- /**
- * If a guest user is surfing, we try to guess his/her language first by obtaining the browser language
- * If re-enabled we need to make sure only those languages installed are checked
- * Commented out so we do not loose the code.
-
- if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
- {
- $accept_lang_ary = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
-
- foreach ($accept_lang_ary as $accept_lang)
- {
- // Set correct format ... guess full xx_YY form
- $accept_lang = substr($accept_lang, 0, 2) . '_' . strtoupper(substr($accept_lang, 3, 2));
- $accept_lang = basename($accept_lang);
-
- if (file_exists($this->lang_path . $accept_lang . "/common." . PHP_EXT))
- {
- $this->lang_name = phpbb::$config['default_lang'] = $accept_lang;
- break;
- }
- else
- {
- // No match on xx_YY so try xx
- $accept_lang = substr($accept_lang, 0, 2);
- $accept_lang = basename($accept_lang);
-
- if (file_exists($this->lang_path . $accept_lang . "/common." . PHP_EXT))
- {
- $this->lang_name = phpbb::$config['default_lang'] = $accept_lang;
- break;
- }
- }
- }
- }
- */
}
- // We include common language file here to not load it every time a custom language file is included
- $lang = &$this->lang;
-
- if ((include $this->lang_path . $this->lang_name . "/common." . PHP_EXT) === false)
- {
- die('Language file ' . $this->lang_path . $this->lang_name . "/common." . PHP_EXT . " couldn't be opened.");
- }
+ $this->set_language($this->lang_name);
$this->add_lang($lang_set);
unset($lang_set);