Visualizzazione risultati 1 fino 17 di 17

Discussione: Script PHP cambio Lingua in base alla lingua del SO

  1. #1
    Guest

    Predefinito Script PHP cambio Lingua in base alla lingua del SO

    Come da titolo, è possibile fare in modo che se io ho la lingua IT impostata nel mio SO vengo indirizzato a miosito.altervista.org/it/ mentre se ho quella EN oppure diversa (spagnolo o qualsiasi altra lignua) vengo indirizzato a miosito.altervista.org/en/?

    Chiedo questo per evitare di fare quelle pagine inutili con solo Entra (IT) ed/oppure Enter (EN) perchè non servono proprio a niente!
    Ultima modifica di jcdesign : 03-06-2008 alle ore 00.26.30

  2. #2
    Guest

    Predefinito

    Codice PHP:
    $lingua = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    header("Location: ".$lingua."/");
    dovrebbe funzionare
    ---
    $_SERVER['HTTP_ACCEPT_LANGUAGE'] contiene la stringa inviata al server dal browser che contiene i linguaggi accettati; le prime due lettere, ricavate con substr, costituiscono appunto l'identificativo del linguaggio principale (ad esempio "it", "en", "de", etc...); infine si reindirizza alla pagina appropriata con un header PHP.
    Ultima modifica di Zorinik : 03-06-2008 alle ore 13.45.59

  3. #3
    Guest

    Predefinito

    Grazie mille, ma devo utilizzare quella variabile e basta oppure devo utilizzare switch oppure if / else?

  4. #4
    Guest

    Predefinito

    Tu tieni conto che con quel codice la variabile $lingua contiene l'identificativo della lingua, poi con quelle due lettere puoi farne quel che vuoi a seconda delle tue necessità

  5. #5
    Guest

    Predefinito

    Allora non ho capito io come funziona

    Codice PHP:
    $lingua = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    0 e 2 a cosa corrispondono precisamente?

    Codice PHP:
    header("Location: ".$lingua."/");
    Con questa linea viene reindirizzato l'utente alla cartella in base alla lingua.


    Scusa ma come vedi osno un bel po duretto

  6. #6
    Guest

    Predefinito

    $lingua conterrà nel tuo caso la stringa "it", nel caso di un anglosassone "en", un francese "fr", ecc.

    In questo modo hai ottenuto l'informazione che volevi, ora puoi farci quello che vuoi (redirect automatici o meno, link, ecc)


    ciao!

  7. #7
    Guest

    Predefinito

    Quindi scrivendo così:

    Codice PHP:
    $lingua = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    header("Location: ".$lingua."/");
    Io che ho la lingua IT vengo automaticamente reindirizzato a /it/? Mentre se imposto EN vengoo reindrizzato a /en/? Quello che non capisco è dove specifico le cartelle in base alla lingua

    Lo devo inserire nell' header?

  8. #8
    Guest

    Predefinito

    Ovviamente le cartelle 'it/', 'en/' ecc devono esistere.
    Non ho capito bene la tua domanda.
    Quel codice lo devi mettere all'inizio del/i file, prima di ogni altro output html.


    ciao!

  9. #9
    Guest

    Predefinito

    Ok per dove devo scrivere il codice, prima di tutto, quindi nel mio caso lo scrivo appena apro
    Codice PHP:
    <?php
    Ora leggendo questo codic:
    Codice PHP:
    $lingua = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    header("Location: ".$lingua."/");
    e in base a 0 o 2 dovrei essere reindirizzato /0/ (0 della variabile $lingua) oppure a /2/ (2 della variabile $lingua) giusto?

    Se si, 0 che lingua risulta? 2 che lingua risulta??
    Ultima modifica di jcdesign : 03-06-2008 alle ore 14.28.16

  10. #10
    Guest

    Predefinito

    No no, quella funzione substr estrae le lettere che corrispondono alla lingua del SO, non te ne curare!


    ciao!

  11. #11
    Guest

    Predefinito

    Allora, in parole povere:

    La sola variabile $_SERVER['HTTP_ACCEPT_LANGUAGE'] contiene una stringa più o meno lunga; le prime due lettere di questa variabile sono le due lettere che cerchi.

    La funzione substr con i due famosi numeri 0 e 2 serve appunto ad estrarre queste due lettere (praticamente dice al PHP "estrai 2 lettere partendo dalla posizione 0"). Capito quindi a che servono quei numeri?

    Poi una volta avendo le due lettere costituenti la lingua predefinita, puoi farci quel che vuoi, come già detto prima. Io ad esempio ti ho postato il modo per far ciò che hai chiesto a inizio topic, ovvero il reindirizzamento in base alla lingua impostata nell'utente.
    Ultima modifica di Zorinik : 03-06-2008 alle ore 15.15.02

  12. #12
    Guest

    Predefinito

    Codice PHP:
    echo substr('abcdef', 0, 2); // prende "ab"
    Quindi con $_SERVER['HTTP_ACCEPT_LANGUAGE'] ti da "en" oppure "it" o "de" ecc... e con substr prendi esattamente le prime due lettere ;-)

    Edit:
    preceduto =.=

  13. #13
    Guest

    Post

    Citazione Originalmente inviato da jcdesign Visualizza messaggio
    Quindi scrivendo così:

    Codice PHP:
    $lingua = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    header("Location: ".$lingua."/");
    Io che ho la lingua IT vengo automaticamente reindirizzato a /it/? Mentre se imposto EN vengoo reindrizzato a /en/? Quello che non capisco è dove specifico le cartelle in base alla lingua

    Lo devo inserire nell' header?
    Beh..se tu vuoi cambiare cartella potresti usare uno switch...
    ossia:
    Codice PHP:
    if($lingua == "it") {
    header("Location: ciao/");
    }
    // it = ciao/
    elseif($lingua == "fr") {
    header("Location: francese/")
    }
    // fr = francese/
    else {
    header("Location: nolingua/")
    }
    // lingua non indicata = nolingua/
    Ciao! ^^

  14. #14
    Guest

    Predefinito

    Citazione Originalmente inviato da sIM Visualizza messaggio
    Beh..se tu vuoi cambiare cartella potresti usare uno switch...
    ossia:
    Codice PHP:
    if($lingua == "it") {
    header("Location: ciao/");
    }
    // it = ciao/
    elseif($lingua == "fr") {
    header("Location: francese/")
    }
    // fr = francese/
    else {
    header("Location: nolingua/")
    }
    // lingua non indicata = nolingua/
    Piccolo appunto: quello nn è proprio uno switch ^^

    uno switch che funziona in modo identico al tuo codice sarebbe:

    Codice PHP:
    switch($lingua){
    case
    'it':
    header("Location: ciao/");
    break;
    case
    'fr':
    header("Location: francese/");
    break;
    default:
    header("Location: nolingua/")
    break;
    }
    ;P
    Ultima modifica di Zorinik : 03-06-2008 alle ore 18.02.32

  15. #15
    Guest

    Predefinito

    Grazie mille a tutti, ho appena imparato una cosa nuova

    Ho un ultima domanda, avendo questo codice:

    Codice PHP:
    <?php

    switch ($_GET['nome']){
    case
    "1":
    include(
    '***');
    break;

    case
    "2":
    include(
    '***');
    break;

    case
    "3":
    include(
    '***');
    break;

    case
    "4":
    include(
    '***');
    break;

    case
    "5":
    include(
    '***');
    break;

    case
    "6":
    include(
    '***');
    break;

    case
    "7":
    include(
    '***');
    break;

    case
    "8":
    include(
    '***');
    break;

    case
    "9":
    include(
    '***');
    break;

    case
    "10":
    include(
    '***');
    break;

    case
    "11":
    include(
    '***');
    break;

    case
    "12":
    include(
    '***');
    break;

    case
    "13":
    include(
    '***');
    break;

    case
    "14":
    include(
    '***');
    break;

    case
    "15":
    include(
    '***');
    break;

    case
    "16":
    include(
    '***');
    break;

    case
    "17":
    include(
    '***');
    break;

    case
    "18":
    include(
    '***');
    break;

    case
    "19":
    include(
    '***');
    break;

    default:
    print
    "[...] mio codice HTML [...]";
    break;
    }
    ?>
    non dovrebbe succedere niente se scrivo così vero?

    Codice PHP:
    <?php

    $lingua
    = $_SERVER['HTTP_ACCEPT_LANGUAGE'];

    switch(
    $lingua){
    default:
    header("Location: it/");
    break;
    case
    'en':
    header("Location: en/");
    break;
    }

    switch (
    $_GET['nome']){
    case
    "1":
    include(
    '***');
    break;

    case
    "2":
    include(
    '***');
    break;

    case
    "3":
    include(
    '***');
    break;

    case
    "4":
    include(
    '***');
    break;

    case
    "5":
    include(
    '***');
    break;

    case
    "6":
    include(
    '***');
    break;

    case
    "7":
    include(
    '***');
    break;

    case
    "8":
    include(
    '***');
    break;

    case
    "9":
    include(
    '***');
    break;

    case
    "10":
    include(
    '***');
    break;

    case
    "11":
    include(
    '***');
    break;

    case
    "12":
    include(
    '***');
    break;

    case
    "13":
    include(
    '***');
    break;

    case
    "14":
    include(
    '***');
    break;

    case
    "15":
    include(
    '***');
    break;

    case
    "16":
    include(
    '***');
    break;

    case
    "17":
    include(
    '***');
    break;

    case
    "18":
    include(
    '***');
    break;

    case
    "19":
    include(
    '***');
    break;

    default:
    print
    "[...] mio codice HTML [...]";
    break;
    }
    ?>
    Scusate ma sono da poco che faccio pratica e studio PHP, siate clementi

  16. #16
    Guest

    Predefinito

    Sì che succede qualcosa, perché se nn l'hai ancora capito, quell' header("Location: etc... serve a reindirizzare, quindi tutto il codice che c'è dopo logicamente non verrà eseguito, perché reindirizzando ad un'altra pagina, beh, si cambia pagina

  17. #17
    Guest

    Predefinito

    Citazione Originalmente inviato da Zorinik Visualizza messaggio
    Sì che succede qualcosa, perché se nn l'hai ancora capito, quell' header("Location: etc... serve a reindirizzare, quindi tutto il codice che c'è dopo logicamente non verrà eseguito, perché reindirizzando ad un'altra pagina, beh, si cambia pagina
    Quando sarà reindirizzato è ovvio che ci sarà lo switch per le pagine XD Intendevo, non è che magari entrino on contrasto o che ne so

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •