• User Newbie

    Sito multilingua

    salve a tutti

    premetto che ho già cercato nel forum ma non sono stato in grado di risolvere il mio problema:

    devo costruire un sito e mi serve la gestione multilingua
    vorrei creare file unici che poi si traducono a seconda della lingua scelta (questo lo so fare)
    devo riuscire a inserire il riferimento alla lingua nell'url senza però compromettere il percorso fisico di file e cartelle (esempio: "www .. dominio .. ext/cartella/con/contenuto" diventa "www .. dominio .. ext/it/cartella/con/contenuto" nel caso seleziono la lingua italiana)

    quello che mi serve è il codice HTACCESS per far si che nel percorso "fisico" delle varie cartelle venga inserita l'indicazione della lingua da poter poi estrarre in php per le operazioni di settaggio della lingua.

    alcuni esempi:

    [digitando] ---> [diventa]

    www .. dominio .. ext ---> www .. dominio .. ext/it/home
    www .. dominio .. ext/it ---> www .. dominio .. ext/it/home
    www .. dominio .. ext/en ---> www .. dominio .. ext/en/home
    www .. dominio .. ext/demo ---> www .. dominio .. ext/it/demo

    www .. dominio .. ext/queste/sono/diverse/cartelle ---> www .. dominio .. ext/it/queste/sono/diverse/cartelle

    mi sapete aiutare?

    online trovo solo script che si fermano a una cartella superiore o puntano a un file specifico oppure sono limitate in altri modi o richiedono sempre un livello minimo di livelli.

    grazie mille a tutti!!!


  • User Attivo

    Ciao,

    non so cosa usi (framework, cms, php puro) però queste cose andrebbero gestite tramite un routing, ossia un sistema che gestisce le richieste in base all'URL.

    Nell'htaccess va messo il codice per dirottare tutte le richieste ad un unico file (il front controller) di solito index.php

    Il file index.php gestisce tutte le richieste e tramite la variabile globale $_SERVER['REQUEST_URI'] recuperi l'URL

    Quindi se visiti ad esempio sito.it/it/pagina, dentro $_SERVER['REQUEST_URI'] avrai il valore "/it/pagina" che successivamente potrai esplodere con la funzione explode() (rimuovendo il primo /) ottenendo così un array. Nel primo elemento dell'array hai il campo lingua (it nel nostro esempio).

    Ti lascio questa risorsa per approfondire https://www.taniarascia.com/the-simplest-php-router/ oppure googla "routing php" o "router php".

    Ti sconsiglio di creare fisicamente i file sul server, sarai costretto a duplicare codice inutilmente, insomma non è una buona pratica 🙂

    Do per scontato che recuperi il contenuto delle pagine da un database.


  • User Newbie

    grazie mille per l'aiuto e il suggerimento!
    si, il sito sarà tutto su database e ora grazie ai tuoi consigli sto vedendo di procedere con un unico file index.php che vada poi a richiamare le varie funzioni che mi servono!

    per chi avesse bisogno lascio il codice che ho usato (recuperato online):

    [PHP]<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(it|en)/?([^/])/?([^/])/?([^/])/?([^/])/? index.php?a=$1&b=$2&c=$3&d=$4&e=$5 [L,QSA]
    </ifModule>[/PHP]

    grazie ancora!