2011-04-04 10 views
9

Moje obecne podejście było użyć do funkcji dostarczanych przez CodeIgniter aby uzyskać segmentu URI w celu _remap aby sprawdzić, czy język jest „en” lub „NP”Najlepszy sposób na stworzenie wielojęzycznej witryny z codeigniter?

Oto przykład:

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); 
} 

Używam tej techniki na każdym kontrolerze. Co nie jest zbyt skuteczne.

Chciałem zapytać, czy używanie sesji do przechowywania kodów językowych byłoby lepsze, czy moja obecna technika jest wystarczająco dobra?

Czy są inne sposoby na zrobienie tego wielojęzycznego programu?

Oczywiście moja baza danych jest obecnie ukształtowana na 2 języki i mam oddzielone pola. np .: - title_en, title_np. są one echo zgodnie z używanym polem językowym.

Odpowiedz

7

Wiele części.

  1. Twój adres URL naprawdę nie musi być/en/i/fr /, chyba że chcesz, aby był używany w Google Analytics. Spidering nie robi dużej różnicy. Nagłówki Accept-Language mogą być równie niezawodne.

  2. Globalnie przeanalizuj ten segment adresu URL. Możesz użyć this method lub Accept-Language, ale w obu przypadkach potrzebujesz haka, MY_Controller lub rozszerzenia klasy Lang.

  3. Zastanów się, czy chcesz, aby różne języki były całkowicie oddzielne. Na przykład, jeśli mam stronę w języku angielskim nie przetłumaczoną na francuski, a strona francuska nie istnieje, czy powinna zawierać stronę w języku angielskim lub 404? Możesz zapisać lang = fr w bazie danych i pobrać wartość ze stałego zestawu w hook/MY_Controller/etc.

    GDZIE lang = CURRENT_LANGUAGE

  4. Struktura Twój DB. title_en title_fr jest jedną z metod, ale wkrótce, ponieważ nie można jej używać z wieloma językami. Mieć tabelę "strony" i "page_content", tak aby wszystkie ogólne informacje były w jednej tabeli, a następnie wszystkie specyficzne języki (tytuł, treść, meta itp.) Znajdują się w tabeli page_conten, która ma pole języka.

Istnieje milion sposobów na zrobienie tego wszystkiego, ale jest o wiele więcej do przemyślenia niż tylko adres URL. Moje ulubione

1

Jeśli masz 500 wiadomości i 2 języki, zmiana przedrostka adresu URL w katalogu głównym daje 1000 linków, powiedzmy "/ en/hello-world" i "/ np/hello-world" będą miały identyczną treść i prawdopodobnie ten sam tytuł, który może być zły z punktu widzenia SEO. Do przechowywania preferencji używałbym sesji lub plików cookie, aby zachować sok z łącza.

4

Używam this internationalization library do pisania kodu i uważam, że odpowiada moim potrzebom całkiem dobrze.

Rozszerza klasę Lang, a następnie w konstruktorze analizuje identyfikator URI, aby dowiedzieć się, jakiego języka użyć. Tak więc jest on ładowany przed użyciem jakichkolwiek plików językowych. Nie musisz dodawać żadnego kodu do kontrolerów. Po prostu zmienia ustawienie w obiekcie języka. W ten sposób możesz odzyskać bieżący język tak, jak zwykle:

$this->lang->lang(); 
Powiązane problemy