Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    Multilingua: sito/lingua/pagina. Come fare?

    Ho server linux e database.
    Il sito è fatto per doppia lingua ma vorrei capire come fare a selezionare la lingua dalla url come se fosse in una cartella.
    In due parole:
    http://www.miosito.com/it/nomepagina
    http://www.miosito.com/en/nomepagina
    http://www.miosito.com/fr/nomepagina

    Come posso fare con htaccess a selezionare la lingua e agire di conseguenza nell'estrazione dei dati dal database?

    Niente sottodomini o cookie/sessioni per la selezione.
    Così viene ben indicizzato e separato a modo, oltre a non avere limiti nella selezione delle lingue.
    Ho usato questo metodo:
    codice:
    RewriteRule ^([a-z]{2}(-[A-Z]{2})?)/(.*) $3?lang=$1&%{QUERY_STRING} [L,QSA]
    In questo modo creo la variabile lang e gli assegno la lingua. Se però volessi passare altri valori non posso e inoltre se aggiungo una cartella con dentro altri file mi da errori strani.

    Suggerimenti? Grazie
    Ce l'ho fatta! - ItalianPixel -

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    e però volessi passare altri valori non posso
    in che senso? non dovresti appendere i parametri nella regola, c'è già l'opzione "Q" tra parentesi quadre che appende le variabili

    aggiungo una cartella
    dove? puoi spiegare meglio?

  3. #3
    Aggiungo una cartella nell'url.
    /it/ o /en/ intese come cartelle.
    Ho scoperto che l'istruzione
    codice:
    RewriteRule ^(.*)\.html$ $1.php [QSA]
    da un sacco di problemi. Quando vado ad aggiungere una cartella qualsiasi e provo ad accederci mi da problemi! Molto strano.
    In effetti la Q dovrebbe risolvere il problema...
    Ce l'ho fatta! - ItalianPixel -

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    forse sbagli nel senso che devi anche mettere una condizione corretta prima della regola di riscrittura... se crei delle cartelle fisiche "/it" o simili magari vuoi escluderle dalla regola:

    codice:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    prima della tua regola

  5. #5
    In questo modo cosa si verifica?
    Ce l'ho fatta! - ItalianPixel -

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    che la regola di riscrittura non si applichi nel caso siano presenti cartelle fisiche... altrimenti spiega meglio cosa vorresti fare (come mai crei delle cartelle "fisiche", se poi usi invece una chiamata con il parametro "lang"?)

  7. #7
    Mi sa allora che non mi sono spiegato, sorry... le cartelle erano nell'url, non fisiche.
    Le ho chiamate erroneamente cartelle perché si trova sempre qualcuno che fa i siti multilingua con copie di file per ogni lingua.

    Quello che vorrei fare è come ho scritto nel primo post: dopo il dominio base miosito.com vorrei aggiungere due lettere indicative della lingua selezionata (en/fr/ru/de...) arrivando ad avere miosito.com/lingua/nomepagina con le rispettive variabili inviate dopo nomepagina.

    Il sistema che ho usato:
    codice:
    RewriteRule ^([a-z]{2}(-[A-Z]{2})?)/(.*) $3?lang=$1&%{QUERY_STRING} [QSA]
    potrebbe essere buono poiché estraggo la lingua tramite variabile lang.
    Quello che vorrei è far si che quasi non esistessero per il sistema, ovvero fare tutte quelle azioni che solitamente si fanno come invio dati tramite url, modifica nomi pagina, senza badare alla lingua o al fatto che esista questa "cosa".

    Forse sono stato più chiaro? Scusami ma ho una tosse incessante e mi vanno insieme i pensieri e le parole...
    Ce l'ho fatta! - ItalianPixel -

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    sì, ho capito, cmq dovrebbe andar bene... la regexp della trascrizione non l'ho verificata sinceramente, ma se ti chiama correttamente il file che vuoi con la variabile lang allora sei a posto... puoi fare due/tre esempi di url complete e di come vorresti fossero interpretate se ancora non ti funziona?

    es.: (ma non so se sono così):
    http://www.miosito.com/fr/nomepagina -> http://www.miosito.com/nomepagina.php?lang=fr
    etc.

  9. #9
    Si, esattamente così.
    Una cosa simil-funzionante la troviQUI dove senza lingua è italiano, cambiando lingua dalla bandiera diventa inglese.
    Se provi a modificalo in it torna italiano ma se provi a mettere fr o altro che non è nel sistema viene l'italiano.
    C'è un controllo sulla lingua e se non esiste o non è settata viene considerato italiano.
    Non so se è corretto così. In quel caso accodando al nome della pagina:
    codice:
    miosito.com/it/benvenuti?id=1
    viene settata sia la lingua che l'id? Cioè è valida come struttura?
    Perché al posto di metterlo così lo riscrivo con htaccess e metto che benvenuti è la pagina index.php?id=1 e dovrebbe venire accodata la lang=it, è corretto come ragionamento?
    Perché se quella regola funziona, quella che ho scritto prima, sono a posto.
    Dici di mettere il controllo sull'esistenza fisica della cartella?
    p.s. me le potresti spiegare le due righe? Solamente la f e la d a cosa si riferiscono, grazie
    Ce l'ho fatta! - ItalianPixel -

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    "-f" e "-d" stanno per file e directory, ma probabilmente non ti servono (vuol dire che se sul server esiste una cartella fisica - esempio "/it" - la regola di riscrittura NON va applicata)...

    ...per la traduzione puoi fare regole tipo:

    codice:
    RewriteRule ^en/(.*)?$ page.php?lang=en [L,QSA]
    RewriteRule ^fr/(.*)?$ page.php?lang=fr [L,QSA]
    
    RewriteRule ^(.*)?$ page.php?lang=it [L,QSA]
    ...lingua per lingua usando l'ultima come "default" oppure usando una regexp per catturare la lingua e metterla come parametro per lang:
    codice:
    RewriteRule ^(..)/(.*)?$ $2?lang=$1 [L,QSA]
    Puoi mettere nelle regole l'opzione "R" che effettua un redirect "in chiaro", così da vedere l'url che cambia nel browser e capire dove punta effettivamente... non capisco bene il senso di usare il path (infatti suppongo che le pagine siano tipo "/it/benvenuto" o "/en/welcome") io suggerirei una cosa come:

    codice:
    RewriteRule ^(..)/(.*)?$ page.php?lang=$1&path=$2 [L,QSA]
    e dentro page.php in base al valore di lang e path fai un include della pagina che serve

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.