2011-04-04 33 views
9

cách tiếp cận hiện tại của tôi đã được sử dụng để _remap chức năng được cung cấp bởi codeigniter để có được những phân khúc URI để kiểm tra xem ngôn ngữ là "en" hay "np"Cách tốt nhất để xây dựng trang web đa ngôn ngữ với trình viết mã là gì?

Đây là một mẫu:

function _remap($url_title){ 

    $this->_identify_language($this->uri->segment(1)); 

    $data ['sub_categories'] = $this->category_model->get_category_list_by_url($url_title)->result_array(); 
    $data ['news'] = $this->news_model->get_news_list_by_url($url_title)->result_array(); 
    $data ['url_title'] = $url_title; 

    $this->_render_front_view('main',$data); 
} 

Tôi đang sử dụng kỹ thuật này trên mọi bộ điều khiển. Mà cũng không phải là rất hiệu quả.

Tôi muốn hỏi liệu việc sử dụng phiên để lưu trữ mã ngôn ngữ sẽ tốt hơn hay kỹ thuật hiện tại của tôi đủ tốt?

Có cách nào khác để tôi có thể thực hiện việc đa ngôn ngữ này không?

Tất nhiên cơ sở dữ liệu của tôi hiện được định hình cho 2 lanaguages ​​và tôi đã tách riêng các trường. ví dụ: - title_en, title_np. chúng được lặp lại theo trường ngôn ngữ được sử dụng.

Trả lời

7

Rất nhiều phần cho điều này.

  1. URL của bạn không thực sự cần/en/và/fr/trừ khi bạn muốn URL đó không được sử dụng cho Google Analytics. Spidering không tạo ra nhiều khác biệt. Tiêu đề chấp nhận ngôn ngữ có thể đáng tin cậy.

  2. Phân tích toàn cầu phân đoạn URL này. Bạn có thể sử dụng this method hoặc Accept-Language, nhưng cả hai cách bạn cần móc, MY_Controller hoặc mở rộng lớp Lang.

  3. Hãy nghĩ xem bạn có muốn hoàn toàn tách biệt các ngôn ngữ khác nhau không. Ví dụ: nếu tôi có trang tiếng Anh không được dịch sang tiếng Pháp và trang tiếng Pháp không tồn tại, trang đó có hiển thị trang tiếng Anh hoặc 404 không? Bạn có thể lưu trữ lang = fr trong cơ sở dữ liệu và lấy giá trị từ một tập hợp hằng số trong móc/MY_Controller/etc.

    WHERE lang = CURRENT_LANGUAGE

  4. Cấu trúc DB của bạn. title_en title_fr là một phương pháp, nhưng nó sớm vì không thể quản lý được với nhiều ngôn ngữ. Có bảng "trang" và "page_content" để tất cả thông tin chung trong một bảng thì tất cả ngôn ngữ cụ thể (tiêu đề, nội dung, meta, v.v.) đều nằm trong bảng page_conten, trong đó có một trường lang.

Có hàng triệu cách để thực hiện tất cả điều này, nhưng có nhiều điều cần suy nghĩ hơn là chỉ URL. My yêu thích

1

Nếu bạn có 500 tin tức và 2 ngôn ngữ, thay đổi tiền tố url trong thư mục gốc sẽ cung cấp cho bạn 1000 liên kết, cho phép nói "/ en/hello-world" và "/ np/hello-world" sẽ có nội dung giống nhau và có thể cùng một tiêu đề, có thể xấu từ khía cạnh SEO. Tôi sẽ sử dụng phiên hoặc cookie để lưu trữ các tùy chọn, để giữ liên kết nước trái cây.

4

Tôi đã sử dụng this internationalization library cho người viết mã và tôi thấy nó phù hợp với nhu cầu của tôi khá tốt.

Nó mở rộng lớp Lang và sau đó trong hàm tạo, nó phân tích URI để tìm ra ngôn ngữ để sử dụng. Vì vậy, nó chỉ được nạp trước khi bạn sử dụng bất kỳ tập tin ngôn ngữ. Bạn không cần thêm bất kỳ mã nào vào bộ điều khiển của mình. Nó chỉ đơn giản là thay đổi các thiết lập trong đối tượng ngôn ngữ. Vì vậy, bạn có thể truy xuất ngôn ngữ hiện tại giống như bạn thường làm:

$this->lang->lang(); 
Các vấn đề liên quan