我開發了一個網站www.tenxian.com。如何通過IP地址檢測用戶的語言
它有三種語言版本,英文,日文和中文。如何編寫一個有效的PHP程序,可以根據訪問者的IP地址自動選擇語言版本?
如果我使用「if-else」,代碼會非常複雜;如果我使用switch-case,如何編寫它,因爲應該處理的數據是IP範圍,而不是特定的數字。此外,我不知道這些IP範圍
最簡單的方法是什麼?
我開發了一個網站www.tenxian.com。如何通過IP地址檢測用戶的語言
它有三種語言版本,英文,日文和中文。如何編寫一個有效的PHP程序,可以根據訪問者的IP地址自動選擇語言版本?
如果我使用「if-else」,代碼會非常複雜;如果我使用switch-case,如何編寫它,因爲應該處理的數據是IP範圍,而不是特定的數字。此外,我不知道這些IP範圍
最簡單的方法是什麼?
請,請不要犯那種認爲IP ==語言的錯誤。首先查看瀏覽器接受語言標題,然後查看可能包含操作系統語言的瀏覽器標識字符串,然後才考慮IP。在所有情況下,幾乎100%的瀏覽器接受語言頭文件將呈現並且足夠。
並且總是讓用戶選擇切換到另一種語言。
除了外國人在國外的簡單情況外,您如何確定比利時的語言,他們會說法語,荷蘭語和德語? (也許這不適用於你的情況,但只是哲學:)。)。
退房GeoPlugin:
或許這將幫助:www.countryipblocks.net
看看對PHP(http://www.maxmind.com/app/php)中的MaxMind GeoIP的模塊,爲您的數據結構也許是關鍵apache_note("GEOIP_COUNTRY_CODE");
返回的ISO-3166-1國家代碼。
國家代碼是不夠的:像比利時和瑞士這樣的國家有不止一種官方語言。 – bart 2010-02-23 09:23:40
你可能想要使用某種形式的IP地理編碼數據庫(example)。
假設您可以將IP範圍轉換爲您的語言選擇之一,您可以執行此操作(上面的所有回覆):將應用程序中的所有消息存儲在此表單的關聯數組中。
$MESSAGES[$USER_LANGUAGE][$msgId]
其中$USER_LANGUAGE
可以是中國,日本,或英語(或任何其它等效枚舉)。 $msgId
可以是諸如「login.successful」,「login.fail」之類的東西。如果您向用戶顯示消息時不顯示硬編碼字符串,請使用$msgId
對變量進行引用。
您可以將其作爲全局變量進行訪問,或者您可以創建一個函數,它將$ msgId作爲參數並返回消息,$USER_LANGUAGE
也可以是全局變量(這是用戶第一次進入在)。
是的,請不要這樣做...谷歌做到這一點,並討厭惱人..我總是從我的瀏覽器得到泰語版本,而不是英文版本。
使用瀏覽器的http頭。
谷歌在這方面是可怕的。即使您設法將界面切換爲其他語言,當點擊其他服務(如Google主頁 - >地圖)時,它也會恢復到您的IP語言環境。 – deceze 2010-02-23 05:56:23
<?php
$ln = split(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
print_r($ln[0]);
?>
對於剛剛來到這裏的人(像我一樣),'split()'現在已被棄用(PHP 5.3.0)。 'explode()'可以正常工作。 – 2012-09-27 16:32:56
我相信你問了兩件事 - 如何將IP分配給你的一種語言(或哪個國家是用戶)?以及如何以正確的語言在應用中顯示所有消息?這是正確的嗎? – Aishwar 2010-02-23 05:35:55
只有三種語言,英文,中文和日文。如果我知道訪問者來自日本,我會將其重定向到日文版;如果訪問者來自大中華區,我會將其重定向到中文版;否則我會將其重定向到英文版本。 – Steven 2010-02-23 05:43:24
這是非常明顯的,你想要最簡單的方式來做到這一點..沒有任何意義的問題。 – 2010-02-23 05:44:01