Язык для гостя автоматом

Форум для авторов модов для phpBB 2.0.x.
TailWind
phpBB 1.0.0
Сообщения: 7
Зарегистрирован: 17.03.2008 13:09

Язык для гостя автоматом

Сообщение TailWind » 17.12.2008 13:33

У гостя есть язык по умолчанию.
Как бы сделать авто-определение?

Чтобы для Россиян был русский, а для остальных английский.

TailWind
phpBB 1.0.0
Сообщения: 7
Зарегистрирован: 17.03.2008 13:09

Re: Язык для гостя автоматом

Сообщение TailWind » 23.12.2008 18:07

Отвечаю на свой вопрос:

Я взял начало
Select default language
http://mods.db9.dk

Код: Выделить всё

# 
#-----[ OPEN ]------------------------------------------------ 
# 
common.php

# 
#-----[ FIND ]------------------------------------------------ 
# 
$board_config[$row['config_name']] =
} 

# 
#-----[ AFTER, ADD ]------------------------------------------ 
#

// Start add - Select default language MOD
if( !isset($board_config['real_default_lang']) )
{
	$board_config['real_default_lang'] = $board_config['default_lang'];
}
$language = ( isset($HTTP_POST_VARS['language']) ) ? $HTTP_POST_VARS['language'] : $HTTP_GET_VARS['language']; 
if ($language) 
{ 
	$language=trim(strip_tags($language));	
	$board_config['default_lang'] = $language; 
	setcookie($board_config['cookie_name'].'_default_lang',$language , (time()+21600), $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']); 
} else 
{
	if (isset($HTTP_COOKIE_VARS[$board_config['cookie_name'].'_default_lang']) ) 
	{
	   $board_config['default_lang']=$HTTP_COOKIE_VARS[$board_config['cookie_name'].'_default_lang']; 
	} else
	{
		$dir = opendir($phpbb_root_path.'language');
		$lang_d = array();
		while (false !== ($file = readdir($dir)))
		{
			if ( ereg("^lang_", $file) && !is_file($dirname . "/" . $file) && !is_link($dirname . "/" . $file) )
			{
				$filename = trim(str_replace("lang_", "", $file));
				$displayname = preg_replace("/^(.*?)_(.*)$/", "\\1 [ \\2 ]", $filename);
				$displayname = preg_replace("/\[(.*?)_(.*)\]/", "[ \\1 - \\2 ]", $displayname);
				$lang_d[$displayname] = '1';
			}
		}
		closedir($dir);
		@asort($lang_d);
		@reset($lang_d);
		while ( list($displayname, $filename) = @each($lang_d) )
		{
			if (strpos($displayname,$_SERVER['HTTP_ACCEPT_LANGUAGE'])===0)
			{
				$language = $displayname;
				$board_config['default_lang'] = $language; 
				break;
			}
		}
	}
}
// End add - Select default language MOD
Этого достаточно чтобы мод работал.
Дальше я просто разместил в шапочке пару кнопок "Русский" и "Английский".

Код: Выделить всё

<form method="post" action="ссылка на текущую страницу">      
        <INPUT NAME= "language" type="hidden" value="russian" /> 
        <input type="image" src="http://picture.gif" name="tupica" />
</form>

Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Зарегистрирован: 12.05.2005 17:25
Откуда: Оренбург (Южный Урал)
Благодарил (а): 24 раза
Поблагодарили: 54 раза
Контактная информация:

Re: Язык для гостя автоматом

Сообщение Поручик » 24.12.2008 10:42

В целом подход верный, я сделал примерно то же самое. Но обратите внимание, корректно будет работать только для IE. В Опере и Лисе переменная $HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'] может иметь другой вид (проверено) и условие не сработает.

Вот мой фрагмент

Код: Выделить всё

	$accept_lang = $HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'];
	$dirname = $phpbb_root_path . 'language';
	$dir = opendir($dirname); 
	$lang_d = array(); 
	while (false !== ($file = readdir($dir))) 
	{ 
		if ( ereg('^lang_', $file) && !is_file($dirname . '/' . $file) && !is_link($dirname . '/' . $file) ) 
		{ 
			$displayname = preg_replace('/^(.*?)_(.*)$/', "\\1 [ \\2 ]", trim(str_replace('lang_', '', $file))); 
			$displayname = preg_replace('/\[(.*?)_(.*)\]/', "[ \\1 - \\2 ]", $displayname); 
			$lang_d[$displayname] = '1'; 
		} 
	} 
	closedir($dir); 
	@asort($lang_d); 
	@reset($lang_d); 
	while ( list($displayname, $filename) = @each($lang_d) ) 
	{ 
		if ((strpos($displayname, $accept_lang) === 0) || (strpos($accept_lang, substr($displayname, 0, 2)) === 0))
		{ 
			$board_config['default_lang'] = $displayname; 
			break; 
		} 
	} 
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html

TailWind
phpBB 1.0.0
Сообщения: 7
Зарегистрирован: 17.03.2008 13:09

Re: Язык для гостя автоматом

Сообщение TailWind » 24.12.2008 14:30

Вы правы!

Вот ответ Мазилы: ru,en-us;q=0.7,en;q=0.3
Internet Explorer: ru

Ещё можно прямо в overall_header.tpl через page_header.php вот такой drop-down box приделать:

Код: Выделить всё

function guest_language_select($default, $select_name = "language", $dirname="language")
{	
  $lang_select = language_select($default);	
  
  $lang_select = str_replace('<select', '<select onChange="this.form.submit()"', $lang_select);

	return $lang_select;
}

Закрыто

Вернуться в «Для авторов (phpBB 2.0.x)»