[外掛]提供使用者即時切換語系

phpBB 3 MOD Support
無論是官方或非官方認證之外掛,安裝與使用問題討論。
(發表文章請按照公告格式發表,違者砍文)

版主: 版主管理群譯文組

版面規則
請注意!您的提問必須遵守發問格式,違者砍文。
主題已鎖定
頭像
SCR
竹貓忠實會員
竹貓忠實會員
文章: 330
註冊時間: 2006-03-11 23:21
來自: 網路的小角落

[外掛]提供使用者即時切換語系

文章 SCR »

我這外掛是參考 CRLin 的 http://phpbb-tw.net/phpbb/viewtopic.php?f=134&t=50568 這篇所修改的.
提供給所有使用者能即時切換論壇的語系(使用下拉式選單).
ps:供給多種語系選擇時,您必須已安裝該語系檔!

開啟 includes/functions.php
尋找

代碼: 選擇全部

	// The following assigns all _common_ variables that may be used at any point in a template.
之前加上

代碼: 選擇全部

	$sql = 'SELECT lang_iso, lang_local_name
 FROM ' . LANG_TABLE;
	$result = $db->sql_query($sql);
 $lang_select = '<select  onChange="this.form.submit();" name="lang"><option value="">Select lang</option>';
	while ($lang_iso = $db->sql_fetchrow($result))
	{
 $lang_select .= '<option value="' . $lang_iso['lang_iso'] . '">' . $lang_iso['lang_local_name'] . '</option>';
}
 $lang_select .= '</select>';
尋找

代碼: 選擇全部

		'ROOT_PATH'			=> $phpbb_root_path,
之後加上

代碼: 選擇全部

  'LANG_SELECT' => $lang_select,

開啟 includes/session.php
尋找

代碼: 選擇全部

		global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;
更改為

代碼: 選擇全部

global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache, $lang;
$language = $config['default_lang'];
if (isset($_GET['lang']) || isset($_POST['lang']))
{
	$lang = isset($_GET['lang']) ? $_GET['lang'] : $_POST['lang'];
	$sql = 'SELECT lang_iso
			FROM ' . LANG_TABLE . "
			WHERE lang_iso = '$lang'";
	$result = $db->sql_query($sql);
	if( ($result = $db->sql_query($sql)) && ($row = $db->sql_fetchrow($result)) )
	{
		$this->set_cookie('lang', $lang, time() + 31536000);
	}
	else
	{
		$set_time = time() - 31536000;
		$this->set_cookie('lang', '', $set_time);
		$lang = '';
	}
}
elseif (isset($_COOKIE[$config['cookie_name'] . '_lang']))
{
	$lang = $_COOKIE[$config['cookie_name'] . '_lang'];
}
if (!Empty($lang))
{
	if ($this->data['user_id'] != ANONYMOUS)
	{
		$this->data['user_lang'] = $lang;
	}
	$config['default_lang'] = $lang;
}
elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && $this->data['user_id'] == ANONYMOUS)
{
	// Obtain installed language
	$installed_languages = array();
	$sql = 'SELECT lang_iso FROM ' . LANG_TABLE;
	$result = $db->sql_query($sql, 3600);
			
	while ($lang_iso = $db->sql_fetchrow($result))
	{
		extract($lang_iso);
		if (file_exists($phpbb_root_path . 'language/' . $lang_iso . "/common.$phpEx"))
		{
			$installed_languages[] = $lang_iso;
		}
	}
	$accept_lang_ary = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	foreach ($accept_lang_ary as $accept_lang)
	{
		if(strlen($accept_lang) > 2)
		{
			$accept_lang = substr($accept_lang, 0, 2) . '_' . strtoupper(substr($accept_lang, 3, 2));
		}
		if (in_array($accept_lang, $installed_languages))
		{
			$language = $accept_lang;
			break;
		}
		else
		{
			$accept_lang = $supported_languages[$accept_lang];
			if (in_array($accept_lang, $installed_languages))
			{
				$language = $accept_lang;
				break;
			}
		}
	}
	$config['default_lang'] = $language;
}
開啟 styles/prosilver/template/overall_header.html
尋找

代碼: 選擇全部

				<!-- IF U_PRINT_PM --><li class="rightside"><a href="{U_PRINT_PM}" title="{L_PRINT_PM}" accesskey="p" class="print">{L_PRINT_PM}</a></li><!-- ENDIF -->
之後增加

代碼: 選擇全部

<li class="rightside"><form action="" method="post">{LANG_SELECT}</form></li>
進入管理員控制台(ACP) → 一般 → 清除快取
附加檔案
範例圖片
範例圖片
Select lang.gif (12.23 KiB) 已瀏覽 6574 次
知難非行易,知易反行難~~
頭像
rex
版面管理員
版面管理員
文章: 501
註冊時間: 2001-11-01 15:28
來自: 竹貓星球
聯繫:

Re: [外掛]提供使用者即時切換語系

文章 rex »

includes/session.php

若有修改到此檔案在日後升級phpBB3版本,記得先改回初始值~以免發生錯誤。

此錯誤訊息為phpbb3.0.3 升級至3.0.4時所產生之錯誤

代碼: 選擇全部

[phpBB Debug] PHP Notice: in file /includes/session.php on line 1547: basename() expects parameter 1 to be string, array given
Language file ./../language//common.php couldn't be opened.
全面支援 phpBB3.3.x 版本虛擬空間

台灣[不限流量]虛擬主機
*可自由調整php 版本。
*免費 SSL 簽章。
https://kukan.tw/
主題已鎖定

回到「[3.0.x] 外掛問題討論」