Konqueror 瀏覽器的國家和語言設定在哪設?

有關於X 環境當中所遇到的問題

Moderator: Forums Team

Post Reply
Si
Posts: 333
Joined: Sun Apr 20, 2003 12:15 pm
Location: New Zealand

Konqueror 瀏覽器的國家和語言設定在哪設?

Post by Si »

我每次到那種會偵測語言的網頁都會把我的 Konqueror 誤判成簡體中文............
我找不到在哪可以設。瀏覽器的辨識加了語言也沒用........
paar
Posts: 1154
Joined: Thu Jan 30, 2003 10:53 am
Location: 打狗市
Contact:

Re: Konqueror 瀏覽器的國家和語言設定在哪設?

Post by paar »

Si wrote:我每次到那種會偵測語言的網頁都會把我的 Konqueror 誤判成簡體中文............
我找不到在哪可以設。瀏覽器的辨識加了語言也沒用........
設定->設定Konqueror->字型->預設編碼
謝謝收看.
叫我老帕好了!
Image
Si
Posts: 333
Joined: Sun Apr 20, 2003 12:15 pm
Location: New Zealand

Post by Si »

謝謝 paar!
可是沒有用耶........
還是判斷錯誤。
我正好幫朋友找 WinXP 開機片製作程式,到這網頁才發現了這問題,老是誤判成簡體中文。Mozilla 就沒這問題。
http://support.microsoft.com/?kbid=310994
scsi
Posts: 1326
Joined: Tue Oct 14, 2003 7:49 am
Contact:

Post by scsi »

Si wrote:謝謝 paar!
可是沒有用耶........
還是判斷錯誤。
我正好幫朋友找 WinXP 開機片製作程式,到這網頁才發現了這問題,老是誤判成簡體中文。Mozilla 就沒這問題。
http://support.microsoft.com/?kbid=310994
我剛剛也試了一下,果然是有問題的,我想問題應該是出在“瀏灠器識別吧”,我猜,我看mozilla是送出zh-tw,但是Konqueror 是送出 zh_TW, zh_TW.Big5, zh的樣子
世界再大,不過是妳我之間的事
:111.gif: 欲使用GOT的ebuild請看Gentoo 台灣中文 Ebuild 使用指南
Image  我的部落格
Si
Posts: 333
Joined: Sun Apr 20, 2003 12:15 pm
Location: New Zealand

Post by Si »

我試了一下用 wget 加 User-agent。怎麼弄都是英文網頁.......
真不曉得那網站是以什麼來判段語言......
Si
Posts: 333
Joined: Sun Apr 20, 2003 12:15 pm
Location: New Zealand

Post by Si »

今天不知怎麼一看到 Konqueror 開的網頁又誤判為簡體中文就火大,於是我開始對 KDE 程式研究。現在對這問題的結論是 KLocale 這個 class 的關係。不過我先來說說整個問題的來龍去脈。

假設我要連 www.google.com,當 Konqueror 對 google 發出 http 請求的時候會有這一段:
Accept-language: zh, en

這是問題的開始,Google 看到 zh 時會認為 Konqueror 在請求簡體中文的網頁。相反的用 Firefox:
Accept-language: zh-tw, en

那為何 Konqueror 不用 zh-tw 呢?經過一段時間的研究,我發現在 kio_http 這個 kio slave 在 http 封包裡加上語言,而語言是由 KLocale 這個 class 告訴 kio_http,但 KLocale 給的是 zh 而不是 zh-tw。

再繼續找下去找問題的根源,KLocale 裡有一個 splitLocale() function。這個 function 會把 locale 拆成「語言」、「地區」、「編碼」。例如 zh_TW.UTF-8 就會被拆成:
語言=zh
地區=TW
編碼=UTF-8
當 kio_http 拿到語言時就成了 zh。

解決辦法有二:
1. 修改 kde-i18n-zh_tw 的檔案,所有檔案名稱和目錄只要是 zh_TW 就要改成 zh-tw_TW
2. 修改 kdelibs/kdecore/klocale.cpp

Code: Select all

--- klocale.cpp.orig	2007-05-14 19:33:10.000000000 +1200
+++ klocale.cpp	2007-05-14 19:36:09.000000000 +1200
@@ -533,6 +533,9 @@
     }
 
   language = str;
+  if (language == QString::fromLatin1("zh") &&
+      country == QString::fromLatin1("TW"))
+    language += QString::fromLatin1("-tw");
 }
 
 QString KLocale::language() const
我準備向 KDE 的開發人員反應這問題,看他們認為應該要如何解決。
scsi
Posts: 1326
Joined: Tue Oct 14, 2003 7:49 am
Contact:

Post by scsi »

讚!
我之前用Konqueror上google也是這樣讓我很吐血
希望等你版應後,就能澈底的解決了
世界再大,不過是妳我之間的事
:111.gif: 欲使用GOT的ebuild請看Gentoo 台灣中文 Ebuild 使用指南
Image  我的部落格
Si
Posts: 333
Joined: Sun Apr 20, 2003 12:15 pm
Location: New Zealand

Post by Si »

Victor
Posts: 75
Joined: Thu Jan 04, 2007 12:31 pm

Post by Victor »

關於這個問題,我昨天試了一下這邊有的三臺機器,
三臺環境都差不多,但是沒有自動轉簡體中文的問題耶..Orz
我是在進KDE前在.xinitrc下export LC_ALL=zh_TW.UTF-8
Si
Posts: 333
Joined: Sun Apr 20, 2003 12:15 pm
Location: New Zealand

Post by Si »

試試將 Konqueror cookies 清掉,然後輸入 http://www.google.com/ (用 Konqueror Google search bar 不準) 或 http://www.emule-project.org/。這兩個網站在我這都會誤判
Victor
Posts: 75
Joined: Thu Jan 04, 2007 12:31 pm

Post by Victor »

我剛把cookie跟cache、history清掉,關掉重開,
然後在URL line打上www.google.com,會自動轉至繁中
www.emule-project.org則會顯示英文

btw, 我有裝FireFox 2.0.0.3,這兩個都沒有裝google search bar
我只安裝kdebase,版本為3.5.5-r4
Si
Posts: 333
Joined: Sun Apr 20, 2003 12:15 pm
Location: New Zealand

Post by Si »

你有裝 KDE I18N TW 嗎?只有用了這個才會有問題。
Victor
Posts: 75
Joined: Thu Jan 04, 2007 12:31 pm

Post by Victor »

呃..我確實是沒有裝..對不起..
我是來亂的(跑)
Si
Posts: 333
Joined: Sun Apr 20, 2003 12:15 pm
Location: New Zealand

Post by Si »

真抱歉,解決方案 2 是錯的... :oops:
那段程式是針對環境變數處理,我加那三行並沒用。又研究了好久,實在是不知道到底是哪裡把 zh_TW 變成 zh :(

另外在這看到的解決方法本來試了一下沒用,但後來再試不知為何又有用了。應該只要 Languages=zh-tw, en 這一行就夠了。不過這不是解決問題的根本。應該是只要用了 zh_TW 語言就應該自動設 zh-tw。

不過目前看來好像就只有 kio_http 受影響,而我一時又看不出哪裡把 zh_TW 變成 zh,所以就先修改了 kio_http。我試了一下,沒問題,有興趣的朋友可以試試這個 patch:

Code: Select all

--- kioslave/http/http.cc.orig	2007-06-02 23:10:47.000000000 +1200
+++ kioslave/http/http.cc	2007-06-02 23:07:43.000000000 +1200
@@ -356,6 +356,13 @@
           m_request.charsets += DEFAULT_PARTIAL_CHARSET_HEADER;
 
       m_request.languages = config()->readEntry( "Languages", DEFAULT_LANGUAGE_HEADER );
+
+      int f = m_request.languages.find(QString::fromLatin1("zh"));
+      if ( f >=0 )
+      {
+          if ( KGlobal::locale()->country() == QString::fromLatin1("tw") )
+              m_request.languages.insert(f + 2, QString::fromLatin1("-tw"));
+      }
   }
   else
   {
Post Reply