[問題]關於phpBB的多國語系問題

phpBB Installation & Usage Support
phpBB 2 安裝於各類型作業平台之問題討論;外掛問題,請到相關版面依發問格式發表!
(發表文章請按照公告格式發表,違者砍文)

版主: 版主管理群

版面規則
本區是討論關於 phpBB 2.0.X 架設安裝上的問題,只要有安裝任何外掛,請到外掛討論相關版面按照公告格式發表。
(發表文章請按照公告格式發表,違者砍文)
Yanzi
星球公民
星球公民
文章: 205
註冊時間: 2003-02-08 20:38
來自: Singapore
聯繫:

[問題]關於phpBB的多國語系問題

文章 Yanzi »

第一次在這貼問題,當然要照格式發言囉! :-D

●作業系統:Windows XP(不過還沒放到虛擬主機)。
●架站程式:Appserv 2.30。
●上網方式:ADSL 2M/128k
●您的 phpBB2 版本:phpBB 2.0.8a。

有兩個問題,不過第二個問題似乎與phpBB較無關係。 :mrgreen:

First:

我按照http://phpbb-tw.net/phpbb/viewtopic.php?t=25005內的MOD設定可在首頁直接更改語系,不需進入資料設定頁面。但安裝完後,就無法設定系統預設語系了。 :-o 個人預設語系也無法更改。


[php]<?php
##########################################################
## ##
## 沒有名字的外掛 by 包子 <sysop@onlyou.org> (04-04-23) ##
## ##
##########################################################
#
#-----[ OPEN ]------------------------------------------
#
./includes/functions.php

#
#-----[FIND]------------------------------------------
#
if ( !file_exists(@phpbb_realpath($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_main.'.$phpEx)) )

#
#-----[ADD BEFORE]------------------------------------------
#
//點子(標記用)
$board_config['default_lang'] = ($_COOKIE['lang']) ? $_COOKIE['lang'] : $board_config['default_lang'];
$board_config['default_lang'] = ($_GET['lang']) ? $_GET['lang'] : $board_config['default_lang'];
$board_config['default_lang'] = ($_POST['lang']) ? $_POST['lang'] : $board_config['default_lang'];
setcookie("lang",$board_config['default_lang']);
//點子(標記用)

#
#-----[FIND]------------------------------------------
#
if ( $theme = setup_style($userdata['user_style']) )
{
return;
}

#
#-----[ADD BEFORE]------------------------------------------
#
//點子(標記用)
$userdata['user_style'] = ($_COOKIE['style']) ? $_COOKIE['style'] : $userdata['user_style'];
$userdata['user_style'] = ($_GET['style']) ? $_GET['style'] : $userdata['user_style'];
$userdata['user_style'] = ($_POST['style']) ? $_POST['style'] : $userdata['user_style'];
setcookie("style",$userdata['user_style']);
//點子(標記用)

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

//
// Mozilla navigation bar
// Default items that should be valid on all pages.
// Defined here to correctly assign the Language Variables
// and be able to change the variables within code.
//

#
#-----[ADD BEFORE]------------------------------------------
#
//點子(標記用)
$board_config['default_style'] = ($_COOKIE['style']) ? $_COOKIE['style'] : $board_config['default_style'];
$board_config['default_style'] = ($_GET['style']) ? $_GET['style'] : $board_config['default_style'];
$board_config['default_style'] = ($_POST['style']) ? $_POST['style'] : $board_config['default_style'];
setcookie("style",$board_config['default_style']);
//點子(標記用)

#
#-----[ OPEN ]------------------------------------------
#
./includes/page_header.php

#
#-----[FIND]------------------------------------------
#
$template->assign_vars(array(
'SITENAME' => $board_config['sitename'],

#
#-----[ADD BEFORE]------------------------------------------
#

//點子(標記用)
//LANG
$get_lang = array();

$dir=opendir('./language');

while ( $file = readdir($dir) ){
if (preg_match('#^lang_#i', $file) && !is_file(@phpbb_realpath('./language/' . $file)) && !is_link(@phpbb_realpath('./language/' . $file)))
{
$filename = trim(str_replace("lang_", "", $file));
$displayname = preg_replace("/^(.*?)_(.*)$/", "\\\1 [ \\\2 ]", $filename);
$displayname = preg_replace("/\[(.*?)_(.*)\]/", "[ \\\1 - \\\2 ]", $displayname);
$get_lang[$displayname] = $filename;
}
}
closedir($dir);

@asort($lang);
@reset($lang);

$lang_select = '<form name="idea_lang" method="POST" action="'.$_SERVER["REQUEST_URI"].'"><select name="lang" onchange="document.idea_lang.submit();">';
while ( list($displayname, $filename) = @each($get_lang) ){
$selected = ( strtolower($board_config['default_lang']) == strtolower($filename) ) ? ' selected="selected"' : '';
$lang_select .= '<option value="' . $filename . '"' . $selected . '>' . ucwords($displayname) . '</option>';
}
$lang_select .= '</select></form>';

//STYLE
$chk_style = ($userdata['user_style'])? $userdata['user_style'] : $board_config['default_style'];
$chk_style = ($_COOKIE['style']) ? $_COOKIE['style'] : $chk_style;
$chk_style = ($_GET['style']) ? $_GET['style'] : $chk_style;
$chk_style = ($_POST['style']) ? $_POST['style'] : $chk_style;
$sql = "SELECT themes_id, style_name FROM " . THEMES_TABLE . " ORDER BY template_name, themes_id";
if ( !($result = $db->sql_query($sql)) ){message_die(GENERAL_ERROR, "Couldn't query themes table", "", __LINE__, __FILE__, $sql);}

$style_select = '<form name="idea_style" method="POST" action="'.$_SERVER["REQUEST_URI"].'"><select name="style" onchange="document.idea_style.submit();">>';
while ( $row = $db->sql_fetchrow($result) ){
$selected = ( $row['themes_id'] == $chk_style ) ? ' selected="selected"' : '';
$style_select .= '<option value="' . $row['themes_id'] . '"' . $selected . '>' . $row['style_name'] . '</option>';
}

$style_select .= "</select></form>";
//點子(標記用)

#
#-----[FIND]------------------------------------------
#
'L_USERNAME' => $lang['Username'],
'L_PASSWORD' => $lang['Password'],

#
#-----[ADD BEFORE]------------------------------------------
#
//點子
'LANGUAGE_SELECT' => $lang_select,
'STYLE_SELECT' => $style_select,
//點子

#
#-----[ OPEN ]------------------------------------------
#
./templates/subSilver/overall_header.tpl

#
#-----[FIND]------------------------------------------
#
<td height="25" align="center" valign="top" nowrap="nowrap"><span class="mainmenu"> <a href="{U_PROFILE}" class="mainmenu"><img src="templates/subSilver/images/icon_mini_profile.gif" width="12" height="13" border="0" alt="{L_PROFILE}" hspace="3" />{L_PROFILE}</a> <a href="{U_PRIVATEMSGS}" class="mainmenu"><img src="templates/subSilver/images/icon_mini_message.gif" width="12" height="13" border="0" alt="{PRIVATE_MESSAGE_INFO}" hspace="3" />{PRIVATE_MESSAGE_INFO}</a> <a href="{U_LOGIN_LOGOUT}" class="mainmenu"><img src="templates/subSilver/images/icon_mini_login.gif" width="12" height="13" border="0" alt="{L_LOGIN_LOGOUT}" hspace="3" />{L_LOGIN_LOGOUT}</a> </span>

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

{LANGUAGE_SELECT}{STYLE_SELECT}


?>[/php]

Second:

如何讓HTML(或phpBB)網頁像Google一樣,可以自動連結到使用者使用的語系上?(例如我用英文Google就連結到英文網頁)
messagebox
竹貓忠實會員
竹貓忠實會員
文章: 981
註冊時間: 2003-02-24 23:34

文章 messagebox »

必須在 [php]<?php
$board_config['default_style'] = ($_COOKIE['style']) ? $_COOKIE['style'] : $board_config['default_style'];
$board_config['default_style'] = ($_GET['style']) ? $_GET['style'] : $board_config['default_style'];
$board_config['default_style'] = ($_POST['style']) ? $_POST['style'] : $board_config['default_style'];
?>[/php]
加入一行更改資料的判斷來推翻COOKIE的設定

>>如何讓HTML(或phpBB)網頁像Google一樣,可以自動連結到使用者使用的語系上?(例如我用英文Google就連結到英文網頁)

將[php]<?php
//點子(標記用)
$board_config['default_lang'] = ($_COOKIE['lang']) ? $_COOKIE['lang'] : $board_config['default_lang'];
$board_config['default_lang'] = ($_GET['lang']) ? $_GET['lang'] : $board_config['default_lang'];
$board_config['default_lang'] = ($_POST['lang']) ? $_POST['lang'] : $board_config['default_lang'];
setcookie("lang",$board_config['default_lang']);
//點子(標記用)

?>[/php]

修改為[php]<?php
$http_lang = explode(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
$http_lang = explode(";",$http_lang[0]);
$http_lang = $http_lang[0];
$phpbb_lang = array(
"en" => 'english',
"zh-tw" => 'chinese_traditional_taiwan',
"zh-cn" => 'japanese',
"ja" => 'chinese_simplified',
);//有其他的語系請自行修改\r

//點子(標記用)
$board_config['default_lang'] = ( isset($phpbb_lang[$http_lang]) ) ? $phpbb_lang[$http_lang] : $board_config['default_lang'];
$board_config['default_lang'] = ($_COOKIE['lang']) ? $_COOKIE['lang'] : $board_config['default_lang'];
$board_config['default_lang'] = ($_GET['lang']) ? $_GET['lang'] : $board_config['default_lang'];
$board_config['default_lang'] = ($_POST['lang']) ? $_POST['lang'] : $board_config['default_lang'];
setcookie("lang",$board_config['default_lang']);
//點子(標記用)
?>[/php]

注意~~這麼一來~~~個人資料的設定將無效~~~
也就是說~~~沒有更換語系前~~一切以瀏覽器的資料為準~~
如果PHPBB內不含使用者瀏覽器的語系~~將會以使用者個人資料的為準~~
訪客將以系統設定的為準~~~
最後由 messagebox 於 2004-05-01 13:10 編輯,總共編輯了 1 次。
吉川拓也
竹貓忠實會員
竹貓忠實會員
文章: 1215
註冊時間: 2003-02-09 18:24
來自: [ G.I.T ]
聯繫:

文章 吉川拓也 »

請問包子學長你研究的 htm 讀取 top5 的資料還在嗎 ?
剛連過去看了一下學長的實驗網 . 只會出現讀取中但是文章卻不會出現@_@
善用 搜尋 可以解決您 90% 的問題
頭腦清晰,選擇正確。 (╯▔︹▔)╯~╘═╛
messagebox
竹貓忠實會員
竹貓忠實會員
文章: 981
註冊時間: 2003-02-24 23:34

文章 messagebox »

吉川拓也 寫:請問包子學長你研究的 htm 讀取 top5 的資料還在嗎 ?
剛連過去看了一下學長的實驗網 . 只會出現讀取中但是文章卻不會出現@_@
資料砍掉了阿~
我壓根沒想到有人會有興趣~~

等等復原

另~因為我的網站資料已經修改為UTF-8語系~~

所以請手動更改語系~~我懶的改HTML了~
吉川拓也
竹貓忠實會員
竹貓忠實會員
文章: 1215
註冊時間: 2003-02-09 18:24
來自: [ G.I.T ]
聯繫:

文章 吉川拓也 »

資料砍掉了阿~
我壓根沒想到有人會有興趣~~

等等復原

另~因為我的網站資料已經修改為UTF-8語系~~

所以請手動更改語系~~我懶的改HTML了~
原來是砍掉了= =|| ..
語系部分我在自己作修改. 感謝包子學長 ^^
善用 搜尋 可以解決您 90% 的問題
頭腦清晰,選擇正確。 (╯▔︹▔)╯~╘═╛
messagebox
竹貓忠實會員
竹貓忠實會員
文章: 981
註冊時間: 2003-02-24 23:34

文章 messagebox »

重點是~~~這東西我好像沒釋出吧~~~

好像只是擺著讓大家看而已~~~

你要的話~~~我把原始檔案丟給你研究吧~
吉川拓也
竹貓忠實會員
竹貓忠實會員
文章: 1215
註冊時間: 2003-02-09 18:24
來自: [ G.I.T ]
聯繫:

文章 吉川拓也 »

messagebox 寫:重點是~~~這東西我好像沒釋出吧~~~

好像只是擺著讓大家看而已~~~

你要的話~~~我把原始檔案丟給你研究吧~
如果包子學長願意讓我研究檔案 :oops:
那我就先謝過包子學長了 ~~
善用 搜尋 可以解決您 90% 的問題
頭腦清晰,選擇正確。 (╯▔︹▔)╯~╘═╛
messagebox
竹貓忠實會員
竹貓忠實會員
文章: 981
註冊時間: 2003-02-24 23:34

文章 messagebox »

吉川拓也
竹貓忠實會員
竹貓忠實會員
文章: 1215
註冊時間: 2003-02-09 18:24
來自: [ G.I.T ]
聯繫:

文章 吉川拓也 »

messagebox 寫:idea_live_show.zip(3015bytes)(04/05/02)

自行取用吧~
感謝包子學長 !
研究中有問題在 po 上 !
善用 搜尋 可以解決您 90% 的問題
頭腦清晰,選擇正確。 (╯▔︹▔)╯~╘═╛
messagebox
竹貓忠實會員
竹貓忠實會員
文章: 981
註冊時間: 2003-02-24 23:34

文章 messagebox »

to:Yanzi
剛剛自己去測試一下~~~
個人資料還是可以修改阿~~~

只是修改了~~還是以COOKIE的資料為主~~
但是當下次使用者登入後~~
因為沒有COOKIE~~~就會以個人資料的為主~~

也就是說~只要有用下拉式選單更改過~~~
一律會以這邊的選擇為主~
Yanzi
星球公民
星球公民
文章: 205
註冊時間: 2003-02-08 20:38
來自: Singapore
聯繫:

文章 Yanzi »

messagebox 寫:>>如何讓HTML(或phpBB)網頁像Google一樣,可以自動連結到使用者使用的語系上?(例如我用英文Google就連結到英文網頁)

修改為[php]<?php
$http_lang = explode(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
$http_lang = explode(";",$http_lang[0]);
$http_lang = $http_lang[0];
$phpbb_lang = array(
"en" => 'english',
"zh-tw" => 'chinese_traditional_taiwan',
"zh-cn" => 'japanese',
"ja" => 'chinese_simplified',
);//有其他的語系請自行修改\r

//點子(標記用)
$board_config['default_lang'] = ( isset($phpbb_lang[$http_lang]) ) ? $phpbb_lang[$http_lang] : $board_config['default_lang'];
$board_config['default_lang'] = ($_COOKIE['lang']) ? $_COOKIE['lang'] : $board_config['default_lang'];
$board_config['default_lang'] = ($_GET['lang']) ? $_GET['lang'] : $board_config['default_lang'];
$board_config['default_lang'] = ($_POST['lang']) ? $_POST['lang'] : $board_config['default_lang'];
setcookie("lang",$board_config['default_lang']);
//點子(標記用)
?>[/php]

注意~~這麼一來~~~個人資料的設定將無效~~~
也就是說~~~沒有更換語系前~~一切以瀏覽器的資料為準~~
如果PHPBB內不含使用者瀏覽器的語系~~將會以使用者個人資料的為準~~
訪客將以系統設定的為準~~~
那自動偵測使用者語系的功能也適用於HTML上嗎?
messagebox
竹貓忠實會員
竹貓忠實會員
文章: 981
註冊時間: 2003-02-24 23:34

文章 messagebox »

$_SERVER["HTTP_ACCEPT_LANGUAGE"]
這變數是傳回使用者瀏覽器設定的語系先後順序~~~
是PHP所定義的變數~~~

理所當然~~HTML是不會有這種東西的~
Yanzi
星球公民
星球公民
文章: 205
註冊時間: 2003-02-08 20:38
來自: Singapore
聯繫:

文章 Yanzi »

那Google是怎麼做到的?
messagebox
竹貓忠實會員
竹貓忠實會員
文章: 981
註冊時間: 2003-02-24 23:34

文章 messagebox »

Google首頁檔頭 寫:HTTP/1.0 200 OK
Cache-control: private
Content-Type: text/html
Set-Cookie: PREF=ID=0359899549494928:LD=zh-TW:TM=1083666053:LM=1083666053:S=sk0E2aIorsGS_W9s; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com.tw
Server: GWS/2.1
Content-length: 2699
Date: Tue, 04 May 2004 10:20:53 GMT
Connection: Keep-Alive
Server: GWS/2.1
這是重點~~

它是自己寫的網頁伺服~~~
是由伺服器判斷使用者的語系~~來決定顯示什麼內容~~~
Yanzi
星球公民
星球公民
文章: 205
註冊時間: 2003-02-08 20:38
來自: Singapore
聯繫:

文章 Yanzi »

假設我的首頁是用php寫的,但不是phpBB,還是可以使用上述的方法嗎?還是另有奇招?
主題已鎖定

回到「phpBB 2 安裝與使用」