Am un site static multilingv.
Site-ul este structurat astfel încât întregul conținut să fie implicit în limba engleză, astfel încât conținutul implicit să fie sub /. De exemplu:
Cale: Conținut:
/ Acasă
/contact.html Pagina de contact
/services.html Servicii
/about.html Despre noi
Și apoi există un subdosar pentru fiecare limbă acceptată.
De exemplu, „de” pentru germană, „da” pentru daneză etc. Tot conținutul localizat se va redimensiona apoi în subdosarul pentru limba corespunzătoare.
Deci, conținutul danez va fi structurat astfel:
Cale: Conținut:
/da/ Acasă
/da/contact.html Pagina de contact
/da/services.html Servicii
/da/about.html Despre noi
Și la fel și pentru alte limbi.
Deoarece acesta este un site complet static, nu pot folosi un limbaj de scripting precum PHP pentru a detecta localitatea utilizatorului și a le redirecționa pe baza acestuia.
Așa că cred că va trebui să-l las pe apache să facă această parte.
Folosesc Apache 2.4.
Întrebarea mea este, atunci, cum configurez gazda virtuală Apache astfel încât utilizatorii care solicită / vor fi redirecționați către /da/ dacă limba lor preferată este daneză, către /de/ dacă limba lor preferată este germana și să primească doar / ca implicit dacă engleza sau orice altă limbă este limba preferată?
De asemenea, dacă un utilizator solicită /foo.html, acesta va fi redirecționat către /$LANG/foo.html, unde $LANG este limba preferată (este limba este pe lista de limbi acceptate).
Localizarea/preferința de limbă a utilizatorului va fi detectată folosind antetul Accept-Language al clientului.
Acum, acest antet va sprijini clientul specificând mai multe limbi într-o ordine prioritizată. Deci, vom folosi doar ceea ce este preferat.
De asemenea, cred că va trebui să stocăm limba într-un fel de cookie. Pentru că dacă utilizatorul a specificat limba germană ca limbă preferată, dar apoi solicită în mod explicit versiunea daneză sau engleză, atunci nu ar trebui să le redirecționăm în continuare.
Așa că am încercat asta. Acest lucru nu setează un cookie, ci se declanșează doar pe pagina principală (/).
Verifică doar dacă daneză este în Accept-Language. Dar nu dacă se preferă sau nu daneza.
De asemenea, nu acceptă foarte bine mai multe limbi.
De exemplu, să presupunem că avem un utilizator care preferă limba germană, dar are daneza ca a doua limbă. Ar primi aici daneza, nu germana.
RewriteEngine activat
RewriteCond %{HTTP:Accept-Language} (da) [NC]
RewriteCond %{REQUEST_URI} „^/$”
RewriteRule ^(.*)$ https://%{SERVER_NAME}/da [R=303,NC,L]