Traducere site în mai multe limbi

php

(Gab) #1

Bună, vreau sa traduc un website în mai multe limbi. Atunci când cineva intră din altă țară, de exemplu Spania, să-l redirecționeze pe domeniu.ro/es. Am reușit sa fac fișierele de traducere și așa mai departe dar nu știu cum pot face din htaccess sau ceva să nu fiu nevoită să fac câte un folder pentru fiecare țară. Nu stiu dacă m-am exprimat ok, sper să înțelegeți ce vreau…


(Cosmin) #2

Poti sa folosesti GeoIP pentru aflarea tarii utilizatorului si apoi faci redirect pe domeniul corespunzator.


(Gab) #3

Da, asta știu. Vreau ca atunci când detectează, să-l redirecționeze cam așa
domeniu.ro/es/file
domeniu.ro/es
domeniu.ro/es/categorie/jucarii etc…

și nu știu cum aș putea face asta în htaccess


(Ionut Dinu) #4

Cred ca pentru a gasi o solutie ar ajuta sa vedem si cam in ce stadiu esti cu problema.
Folosesti un framework, sau e ceva custom?
Gestionezi deja limbile in cod si doar vrei sa faci rewrite la URL-uri? Adica daca pui in URL ?language=es si afiseaza deja continutul in spaniola, sau inca nu e implementata nici partea aceasta?
Daca folosesti un framework cunoscut aproape sigur e deja o solutie disponibila (de exemplu cum sunt WPML, qTranslate, TranslatePress pentru WordPress).


(Cosmin) #5

Daca tii neaparat sa faci lucrul acesta din .htaccess, atunci uite un exemplu aici.

Ai incercat deja solutia asta si nu a mers?


(Gab) #6

Este custom. Am găsit asta pe internet:

  // Start a Session, You might start this somewhere else already.
  session_start();

  // What languages do we support
  $available_langs = array('en','ro');

  // Set our default language session
  $_SESSION['lang'] = 'en';   

  if(isset($_GET['lang']) && $_GET['lang'] != ''){ 
    // check if the language is one we support
    if(in_array($_GET['lang'], $available_langs))
    {       
      $_SESSION['lang'] = $_GET['lang']; // Set session
    }
  }
  // Include active language
  include('inc/lang/'.$_SESSION['lang'].'.php');

și am făcut câteva fișiere cu traducere în câteva limbi, mai trebuie să fac chestia aia cu redirect sau ceva, nu știu cât de bun este codul de mai sus dar pe ăsta l-am găsit


#7

De ce insisti sa redirectionezi utilizatorul spre alt url? Este continutul diferit sau doar limba se schimba?


(Gab) #8

Doar limba se schimbă, conținutul rămâne același


#9

Pai atunci nu ar fi mai bine sa setezi ca default limba cand acceseaza userul prima oara website-ul si sa stochezi asta undeva ca apoi sa poata schimba limba in functie de preferinte? Se poate sa fie cineva in Spania dar sa vorbeasca alta limba gen engleza, romana etc.


(Ionut Dinu) #10

De acord. Ideal ar fi sa faci redirectul din cod, nu din .htaccess.
Verifici daca exista cookie cu limba preferata ca sa-l redirectezi, iar daca nu exista faci redirect pe baza locatiei si sa salvezi limba in cookie. In frontend pui un language switcher care te redirecteaza catre alta limba si updateaza cookie-ul, ca sa poata schimba userul daca prefera altceva decat ai detectat automat.
In .htaccess faci doar rewrite la linkuri ca sa arate frumos (/es/ in loc de ?lang=es) dar nu e solutia completa.
Daca ai posibilitatea aplici si filtru pe toate linkurile interne si adaugi direct limba in href (gen /es/), astfel incat sa eviti sa faci cate un redirect la fiecare request.
Dpdv SEO s-ar putea sa vrei sa setezi si canonical URL ca meta in head, cu versiunea linkului fara /es/.
Un framework ar fi facut toate astea automat, ca tot existau discutii pe tema daca-s bune sau nu…