Seite 1 von 1

Switch Language auch für Registrierte

Verfasst: 30.04.2003 21:32
von Faser
Hallo nochmal!

Kennt jemand einen switch_language-Mod, der nicht nur bei Gästen funktioniert? Jeder soll die Language im Header über zwei Flaggen ändern können.

Mit dem bisherigen Mod habe ich zwar ein wenig rumgespielt, schaffe es aber nicht, dass die Sprache nach dem Login erhalten bleibt...

Vielen Dank schon mal für Antworten!!

Verfasst: 01.05.2003 11:33
von Faser
keiner 'ne Idee?

Verfasst: 01.05.2003 11:36
von Chaze
Das Problem wird sein, dass auf jeder Seite in der die User-Infos abgerufen werden die Sprache wieder auf den Wert in der DB gesetzt wird. Du müßtest eigentlich 'nur' einen Link setzen um die Sprache für den jeweiligen User in der DB zu ändern.

Verfasst: 01.05.2003 14:40
von Faser
Jo, ich hatte es mal mit folgendem Code in der page_header.php versucht:

Code: Alles auswählen

//
// Switch language
if ( isset($lang) )
{
	$sql = "UPDATE " . USERS_TABLE . "
		SET user_lang = german
		WHERE user_id = $userdata[user_id]";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not update users table', '', __LINE__, __FILE__, $sql);
	}
}
// Switch language
//
Sollte ja dann eigentlich immer, wenn die Variable $lang gesetzt wurde (z.B. beim Dateinamen: index.php?lang=german), die USERS_TABLE updaten und user_lang auf die Variable setzen...

Allerdings passiert folgendes: Sobald man auf der Seite rumklickt, springt die Sprache auf Englisch, egal, ob etwas angegeben wurde, oder nicht :-|

Hat jemand 'ne Idee, was da falsch sein könnte??

Verfasst: 01.05.2003 14:46
von saerdnaer
sicher ich würde so eine abfrage eher in die common oder in die init_userprefs funktion in der functions.php einbauen...

ah

Verfasst: 01.05.2003 15:47
von Faser
Hmm, aus irgendeinem mir unerdenklichen Grunde bekomme ich dann einen Parse Error:
Parse error: parse error in /var/www/html/i-study/forum/includes/functions.php on line 227
in folgender Zeile:

Code: Alles auswählen

	   $sql = "UPDATE " . USERS_TABLE . " 
:-?

Verfasst: 01.05.2003 16:45
von saerdnaer
machs doch einfach so:
function init_userprefs($userdata)
{
global $board_config, $theme, $images;
global $template, $lang, $phpEx, $phpbb_root_path, $db, $HTTP_GET_VARS;

if ( $userdata['user_id'] != ANONYMOUS )
{
if ( !empty($userdata['user_lang']))
{
$board_config['default_lang'] = $userdata['user_lang'];
}
if ( !empty($HTTP_GET_VARS['lang']) )
{
$board_config['default_lang'] = $HTTP_GET_VARS['lang'];
$sql = "UPDATE ". USER_TABLE . "
SET user_lang = '" . $HTTP_GET_VARS['lang'] . "'
WHERE user_id = '" . $userdata['user_id'] . "'";
if ( !($db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not update user language');
}
}
das rote ist neu

ah

Verfasst: 01.05.2003 16:59
von Faser
Vielen Dank, so funktioniert's ;-)

Für alle, die nicht ganz mitgekommen sind: Nur die komplette function init_userprefs in der includes/functions.php mit der hier ersetzen:

Code: Alles auswählen

//
// Initialise user settings on page load
function init_userprefs($userdata) 
{ 
	global $board_config, $theme, $images; 
	global $template, $lang, $phpEx, $phpbb_root_path, $db, $HTTP_GET_VARS; 

	if ( $userdata['user_id'] != ANONYMOUS ) 
	{ 
		if ( !empty($userdata['user_lang'])) 
		{ 
			$board_config['default_lang'] = $userdata['user_lang']; 
		} 

		//
		// Switch language
		if ( !empty($HTTP_GET_VARS['lang']) ) 
		{ 
			$board_config['default_lang'] = $HTTP_GET_VARS['lang']; 
			$sql = "UPDATE ". USERS_TABLE . " 
				SET user_lang = '" . $HTTP_GET_VARS['lang'] . "' 
				WHERE user_id = '" . $userdata['user_id'] . "'"; 
			if ( !($db->sql_query($sql)) ) 
			{ 
				message_die(GENERAL_ERROR, 'Could not update user language'); 
			} 
		}
		// Switch language
		//
		
		if ( !empty($userdata['user_dateformat']) )
		{
			$board_config['default_dateformat'] = $userdata['user_dateformat'];
		}

		if ( isset($userdata['user_timezone']) )
		{
			$board_config['board_timezone'] = $userdata['user_timezone'];
		}
	}

	if ( !file_exists(@phpbb_realpath($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_main.'.$phpEx)) )
	{
		$board_config['default_lang'] = 'english';
	}

	include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_main.' . $phpEx);

	if ( defined('IN_ADMIN') )
	{
		if( !file_exists(@phpbb_realpath($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_admin.'.$phpEx)) )
		{
			$board_config['default_lang'] = 'english';
		}

		include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_admin.' . $phpEx);
	}

	include_attach_lang();

	//
	// Set up style
	//
	if ( !$board_config['override_user_style'] )
	{
		if ( $userdata['user_id'] != ANONYMOUS && $userdata['user_style'] > 0 )
		{
			if ( $theme = setup_style($userdata['user_style']) )
			{
				return;
			}
		}
	}

	$theme = setup_style($board_config['default_style']);

	return;
}