2010-02-23 21 views
5

Tôi đã phát triển một trang web www.tenxian.com.Cách phát hiện ngôn ngữ của người dùng thông qua Địa chỉ IP của họ

Nó có ba phiên bản ngôn ngữ, tiếng Anh, tiếng Nhật và tiếng Trung. Làm thế nào tôi có thể viết một chương trình PHP hiệu quả có thể tự động chọn một phiên bản ngôn ngữ dựa trên địa chỉ IP của khách truy cập?

Nếu tôi sử dụng "if-else", mã sẽ phức tạp hơn nhiều; Nếu tôi sử dụng chuyển đổi trường hợp, làm thế nào để viết nó vì dữ liệu cần được xử lý là phạm vi IP, không phải số cụ thể. Ngoài ra, tôi không biết các dải IP này

Cách dễ nhất để làm điều đó là gì?

+0

Tôi tin rằng bạn đang hỏi hai điều - cách gán IP cho một trong các ngôn ngữ của bạn (hoặc quốc gia nào là người dùng)?Và cách hiển thị tất cả tin nhắn trong ứng dụng bằng ngôn ngữ chính xác đó? Thê nay đung không? – Aishwar

+0

Chỉ có ba ngôn ngữ, tiếng Anh, tiếng Trung và tiếng Nhật. Nếu tôi biết khách truy cập đến từ Nhật Bản, tôi sẽ chuyển hướng đến phiên bản tiếng Nhật, nếu khách truy cập đến từ Trung Quốc Đại Lục, tôi sẽ chuyển hướng nó đến phiên bản tiếng Trung; nếu không tôi sẽ chuyển hướng nó sang phiên bản tiếng Anh. – Steven

+0

nó là rất rõ ràng bạn muốn cách dễ nhất để làm điều đó .. không có điểm trong việc thêm nó vào câu hỏi. –

Trả lời

21

Xin vui lòng, XIN, đừng mắc sai lầm khi nghĩ rằng ngôn ngữ IP ==. Trước tiên hãy xem tiêu đề ngôn ngữ chấp nhận của trình duyệt, sau đó là chuỗi nhận dạng trình duyệt có thể chứa ngôn ngữ hệ điều hành và chỉ sau đó đưa IP vào tài khoản. Trong hầu hết 100% trường hợp, tiêu đề ngôn ngữ chấp nhận của trình duyệt sẽ có mặt và đầy đủ.

Và luôn cung cấp cho người dùng lựa chọn chuyển sang ngôn ngữ khác.

Ngoài trường hợp đơn giản của người nước ngoài ra nước ngoài, làm thế nào để bạn xác định ngôn ngữ cho Bỉ, nơi họ nói tiếng Pháp, tiếng Hà Lan và tiếng Đức? (Có lẽ điều đó không áp dụng cho trường hợp của bạn, nhưng chỉ là triết học. :)).

+0

+1 để luôn cung cấp cho người dùng lựa chọn chuyển sang ngôn ngữ khác ... đây là cách tốt nhất .. :) – RameshVel

+0

Tương tự ở Thụy Sĩ (tiếng Đức, tiếng Pháp, tiếng Ý) – Benjol

+0

Điều gì xảy ra nếu tôi thực sự muốn tìm ngôn ngữ được nói trong một khu vực dựa trên địa chỉ IP? Cho phép nói rằng tôi có yêu cầu như vậy. –

0

hãy nhìn vào các mô-đun MaxMind geoip cho PHP (http://www.maxmind.com/app/php), như đối với cấu trúc dữ liệu của bạn có lẽ chính nó để mã quốc gia ISO-3166-1 có trả lại là apache_note("GEOIP_COUNTRY_CODE");.

+0

Mã quốc gia không đủ: các quốc gia như Bỉ và Thụy Sĩ có nhiều ngôn ngữ chính thức. – bart

0

Có thể bạn muốn sử dụng một số hình thức cơ sở dữ liệu mã hóa địa lý IP (example).

0

Giả sử bạn có thể chuyển đổi dải IP thành một trong các lựa chọn ngôn ngữ, bạn có thể thực hiện việc này (tất cả trả lời ở trên): có tất cả thư của bạn trong các ứng dụng được lưu trữ trong một mảng kết hợp của biểu mẫu này.

$MESSAGES[$USER_LANGUAGE][$msgId]

nơi $USER_LANGUAGE có thể Trung Quốc, Nhật, hoặc tiếng Anh (hoặc bất kỳ enum tương đương khác). $msgId có thể là những thứ như "login.successful", "login.fail" vv Khi nào bạn hiển thị thông báo cho người dùng không hiển thị các chuỗi được mã hóa cứng, hãy tham chiếu đến biến bằng cách sử dụng $msgId.

Bạn có thể truy cập nó dưới dạng biến toàn cục HOẶC bạn có thể tạo hàm nhận trong $ msgId dưới dạng tham số và trả về thư, $USER_LANGUAGE cũng có thể là biến toàn cục (được đặt lần đầu tiên người dùng đến trong).

2

Có xin vui lòng không làm điều đó ... Google thực hiện điều này và dreaking gây phiền nhiễu .. Tôi luôn luôn có được phiên bản Thái thay vì một tiếng Anh từ trình duyệt của tôi.

Sử dụng tiêu đề http từ trình duyệt.

+0

Google là khủng khiếp trong lĩnh vực này. Ngay cả khi bạn quản lý chuyển giao diện sang ngôn ngữ khác, nó sẽ hoàn nguyên về miền địa phương IP của bạn khi nhấp qua một dịch vụ khác (như trang chủ Google -> Bản đồ). – deceze

2
<?php 
$ln = split(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]); 
print_r($ln[0]); 
?> 
+2

Đối với những người đã đến đây ngay bây giờ (như tôi), 'split()' hiện không được chấp nhận (PHP 5.3.0). 'explode()' hoạt động tốt. –