Visualizzazione risultati 1 fino 19 di 19

Discussione: Sito bilingue con un clic: come?

  1. #1
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito Sito bilingue con un clic: come?

    Ciao a tutti!!!

    Poiché a leggere tutto il post poi la domanda si perderebbe in mezzo alle divagazioni, la scrivo subito:

    Io avevo pensato il seguente metodo per farmi il sito bilingue, volevo sapere cosa ne dite e se conoscete un metodo migliore...

    METODO:
    In genere i siti bilingui presentano un index da cui si diramano due sezioni indipendenti italiano/inglese.

    Io invece volevo far sì che in ogni pagina sia possibile viaggiare con un clic dalla versione italiana a quella inglese della stessa.

    Avevo pensato di mettere una routine php all'inizio del codice dipendente dalla lingua con un piccolo form con menu a cascata: si seleziona la lingua e viene mostrata la pagina nella lingua voluta, ossia una cosa del tipo

    <<codice col form per selezionare la lingua>>
    if ($lingua==0){ <<pagina in italiano>>}
    else {<<pagina in inglese>>}

    Potrei anche nell'if includere la pagina, invece di scrivere il codice, ma preferisco avere una sola pagina per pagina (ovvero avere ciao.php, non ciao.php che include ciao_it.php e ciao_en.php... meno files ho meno mi incasino )

    Avevo pensato anche ad una soluzione drastica, del tipo caricare il codice nel database e richiamarlo dalla pagina, ma diventa una cosa inutilmente complicata.

    NOTA: le mie pagine php sono TUTTE fatte così:

    <?php include("relativepath/templates/top.inc);?>

    <<codice pagina>>
    <?php include("relativepath/templates/bottom.inc);?>

    In top ci sono gli headers e si da' inizio al <div class="content">, in bottom si chiude il content e si mettono il menu laterale e il footer. Il codice dipendente dalla lingua sarebbe dunque tutto tranne il top.inc
    Ultima modifica di pietrovischia : 06-12-2005 alle ore 18.08.27

  2. #2
    Guest

    Predefinito

    prova a guardare qui >> http://www.mrwebmaster.it/tutorial/php/tutorial283.htm
    cmq si possono cambiare anke delle cose tipo cambiare gli array con i define oppure si puo anke impostare un cookie alla visita salvandoci la lingua basta cambiare l'if cmq è molto personalizzabile la cosa...

    ciao ^__^

  3. #3
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Credo che ti basti questo:
    Codice PHP:
    <?php if ($lang == "it") { ?>
    <!-- qui tutto il codice (HTML) in italiano -->
    <?php } else if ($lang == "en") { ?>
    <!-- qui tutto il codice in inglese -->
    <?php } ?>
    Ricordati di aggiungere in ogni pagina le modalità per passare da una lingua all'altra (mettiamo siano due scritte...):
    Codice HTML:
    <A HREF="pagina.php?lang=it">Italiano</A>
    <A HREF="pagina.php?lang=en">English</A>
    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  4. #4
    Guest

    Predefinito

    è ma qua sorge un altro problema...
    xke quando uno passa da una pagina all'altra deve sempre passare la lingua in uso allora è meglio fare con un cookie ke contiene la lignua cosi da risolvere subito...

  5. #5
    Guest

    Predefinito

    oppure tutte le pagine italiane tutti i link sono pagina.php?lang=it&.. ecc...
    e in tutte le pagine inglesi i link sono pagina.php?lang=en&... ecc..


    EDIT: oppure contenere la lingua in una sessione (x ki nn ha abilitati i cookie)
    Ultima modifica di livecommunity : 06-12-2005 alle ore 21.01.19

  6. #6
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Io nel mio sito passo il parametro della lingua in tutti i link, però se viene omesso metto italiano come default. I link li faccio in questo modo:
    Codice PHP:
    echo "<a href=\"index.php?lingua=$lingua&sezione=pagina2\">Clicca qui</a>";
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  7. #7
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito

    mmm... Innanzitutto vi ringrazio per i consigli:

    Io vorrei evitare i cookies, li trovo uno strumento tendenzialmente invadente (ognuno ha le sue piccole manie... )

    D'altra parte, non mi va di appesantire i vari links con stringhe di query php...

    Che ne dite di usare un file temporaneo per immagazzinare l'informazione sulla lingua e ad ogni pagina caricata aprirlo e leggerlo? Dico file temporaneo perché, da quello che ho capito, se io nella pagina metto il codice $ciao = fopen etc, e poi lo chiudo e lo riapro nella pagina successiva, quello che viene creato è un file temporaneo per ogni "connessione" (ovvero due utenti contemporanei usano due files temporanei diversi). Però magari ho capito male

  8. #8
    L'avatar di SolitaryExplorer
    SolitaryExplorer non è connesso Utente storico
    Data registrazione
    10-08-2005
    Residenza
    Veneto
    Messaggi
    1,949

    Predefinito

    Alla fine hai bisogno di un Cookie.
    Puoi sempre dargli una scadenza breve, così non rimarrà "invadente" in eterno come dici te.
    Non offro assistenza privata. / Se vuoi anche tu una userbar come queste, basta chiedere.


  9. #9
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito usare un nome di sotto-dominio

    I file temporanei mi sembrano un po' un dramma da gestire sul server: sapere quando cancellarli, scegliere il nome univoco magari l'IP ok.. se poi hai parecchi visitatori la cosa s'incrementa a dismisura.. non so...

    Un altro approccio (non sperimentato):
    Non penso di averne già parlato, ma è un espediente che mi è frullato in testa già tempo fa ma ancora non ho implementato nella pratica:

    ovvero usare un nome di sotto-dominio per trasportare la lingua scelta

    nel link di cambio lingua non faccio altro che impostare l'url del mio sito ad un sottodominio diverso, tipo:
    <a href="http://en.heracleum.altervista.org">English</a>
    <a href="http://heracleum.altervista.org">Italiano</a>

    Poi, per scegliere quale linguaggio adottare nella pagina, all'inizio (in un include comune a tutte come è consuetudine) vado sempre a leggermi il nome del MIO HOST, con:
    $HTTP_SERVER_VARS["HTTP_HOST"]

    se inizia con il sotto-dominio
    en.
    allora qualcuno ha scelto la lingua inglese
    altrimenti scelgo italiano.

    Non si pone il problema di come trasportare la scelta della lingua visto che il nome di dominio scelto rimane automaticamente in tutti i link (essendo di solito RELATIVI).

    Che dite?
    potrebbe anche sfuggirmi qualcosa... ma in teoria mi sembra che possa funzionare
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  10. #10
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito

    Citazione Originalmente inviato da heracleum, tutto il post, ma in particolare
    nel link di cambio lingua non faccio altro che impostare l'url del mio sito ad un sottodominio diverso, tipo:
    <a href="http://en.heracleum.altervista.org">English</a>
    <a href="http://heracleum.altervista.org">Italiano</a>
    ... e quindi non avrei il problema del casino delle pagine, essendo l'inglese in una sottodirectory...

    E invece di mettere quei link, per far sì che si possa cambiar lingua sempre mi basterebbe mettere

    <?php
    list($dummy,$tenere)=split('//',$_SERVER['PHP_SELF'],2);
    list($dymm2,$mystuff)=split('/',$tenere,2);
    echo <a href="http://pietrovischia.altervista.org/$mystuff">Italiano</a><br><a href="http://en.pietrovischia.altervista.org/$mystuff">English</a>;

    ?>

    A meno di sistemare bene la sintassi dell'echo

    Ora pero' mi cerco qualcosa qui nel forum sui sottodomini, perché tutte le volte che ho provato ad impostarli (a quanto pare non fanno altro che creare delle linee di codice all'inizio di index.php) non hanno mai funzionato...


    Sembra essere un'idea abbastanza valida, che supplirebbe ad un problema che avevo riscontrato nel mettere il codice bilingue in una pagina sola (essendo costruita con includes php...)
    Ultima modifica di pietrovischia : 08-12-2005 alle ore 12.29.29

  11. #11
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Citazione Originalmente inviato da pietrovischia
    ... e quindi non avrei il problema del casino delle pagine, essendo l'inglese in una sottodirectory...

    E invece di mettere quei link, per far sì che si possa cambiar lingua sempre mi basterebbe mettere

    <?php
    list($dummy,$tenere)=split('//',$_SERVER['PHP_SELF'],2);
    list($dymm2,$mystuff)=split('/',$tenere,2);
    echo <a href="http://pietrovischia.altervista.org/$mystuff">Italiano</a><br><a href="http://en.pietrovischia.altervista.org/$mystuff">English</a>;

    ?>
    No no... aspetta...
    Niente sotto-directory!!!

    Sfruttiamo SOLO la possibilità di indicare sotto-domini illimitati, SENZA star lì a impostarli da pannello Altervista! Quello serve -anche se non l'ho mai usato sinceramente- solo per venire incontro a chi vuole associare -appunto- una sottocartella ad un sottodominio. Qui non serve nulla di tutto questo.

    E perché complicare quel codice prima dei link.. andavano bene così com'erano, servono solo per passare con un clic (come da topic) da un sottodominio all'altro e basta, non serve neanche codice php, solo semplici link HTML.

    POI, come dicevo su, cliccando su uno dei due link (anche di più volendo) di cambio sottodominio/lingua, qualsiasi pagina php del sito, se organizzata un minimo in modo da leggere la propria configurazione php in un include generico, eseguirà un codice comune che andrà semplicemente a controllare nell'hostname corrente:
    $HTTP_SERVER_VARS["HTTP_HOST"]
    se la stringa ritornata inizia per: "en." oppure no.
    Una cosa del genere per capirci meglio:

    Codice PHP:
    $subdom = substr($HTTP_SERVER_VARS["HTTP_HOST"], 0, 3);
    $lang = ($subdom == 'en.')? 1 : 0; //1 = inglese, 0 = italiano
    Poi fai come dicevi nel primo post, nella pagina basta mostrare testi diversi in base alla lingua indicata nella variabile $lang:

    Codice HTML:
    <div>
    <?= ($lang)? "G'day mate! How're ya doin'?" : "Ciao ciccio! Come butta?" ?>
    </div>
    la condizione ($lang) ovviamente sottintende $lang>0 poi ognuno usa quella che gli viene più comoda.

    Spero sia più chiaro
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  12. #12
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito

    Ma nel modo che dici tu, se io sono sulla pagina

    http://pietrovischia.altervista.org/articoli/pagina.php

    e ci sono arrivato con lingua italiano,

    se clicco su

    <a href="http://en.pietrovischia.altervista.org">English</a>

    torno alla homepage in inglese!

    Io invece volevo che fosse possibile passare direttamente alla pagina.php in inglese! Per questo pensavo di modificare la parte di codice relativa al link usando PHP_SELF in modo da ricaricare la pagina corrente con una diversa impostazione di lingua


    P.
    Ultima modifica di pietrovischia : 08-12-2005 alle ore 13.16.54

  13. #13
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Aaaah ok!
    sì certo, si può fare in parecchi modi..

    Pensavo riguardasse strettamente il malinteso su "sub-domain dunque sub-directory"
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  14. #14
    express non è connesso AlterVistiano
    Data registrazione
    08-08-2003
    Residenza
    Cagliari/Pisa
    Messaggi
    799

    Predefinito

    tempo fa ho risolto il problema del sito multi-language multi-content richiamando una sola pagina php che contiene tutto il codice per indovinare la lingua dal browser oppure sceglierla assieme alle varie (sotto-)sezioni del sito sempre passando variabili di tipo get e facendo pesante uso di "require_once". se vuoi puoi darci un occhio: qui e se ti serve il codice basta un mp. ah dimenticavo :grin: e che differenza c'è con le soluzioni proposte prima? beh che separi in modo netto la struttura del sito dai contenuti così che ti puoi concentrare sulla parte dei contenuti quando devi effettuare la traduzione senza stare a cercare dove sono all'interno delle tue pagine. Inoltre puoi cambiare agilmente la struttura senza dover toccare i contenuti. e gli svantaggi? vedi sotto

    in ogni caso sto "migrando" ad un nuovo metodo che in sostanza si basa sul precedente ma che generi pagine statiche (che piacciono molto di più ai motori di ricerca).
    Ultima modifica di express : 08-12-2005 alle ore 17.02.46
    http://express.altervista.org
    Dato un lavoro, si possono scegliere due sole delle seguenti caratteristiche: veloce, economico, di qualità.
    Così capita che se un lavoro è veloce ed economico non sarà di qualità; se è veloce e di qualità non sarà economico; se è economico e di qualità non sarà veloce.

  15. #15
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Appunto, evitare in tutti i link il parametro "lang=it" assieme ad altri aiuta proprio a far indicizzare meglio (e ottenere miglior ranking) dai motori di ricerca.

    Dunque un link come:
    http://riccardometere.altervista.org/php/main.php?lang=en&section=home&subsection=gallery
    verrà sicuramente IGNORATO dai searchbot (google primo fra tutti), mentre un link tipo:
    http://en.riccardometere.altervista.org/gallery/

    piacerà sicuramente cento volte di più.

    Poi certo si può alleviare e risolvere il problema dei parametri passati sfruttando il mod_rewrite disponibile su AV e la modifica appropriata nei file .htacces.


    Oh poi.. io parlo parlo.. ma nel mio caso sto ancora con uno pigrissimo parametro ?lng=1 iniziale per la lingua l'inglese per poi trasportarlo tramite sessioni, quindi..
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  16. #16
    express non è connesso AlterVistiano
    Data registrazione
    08-08-2003
    Residenza
    Cagliari/Pisa
    Messaggi
    799

    Predefinito

    [OT]è vero ma non mi risolve il problema del fatto che tutti i link vengono generati in automatico da php (era una struttura pensata per l'estensibilità e aggiungere un nuova sezione significa aggiungere una cartella e 1 riga in php). penso che quel problema sià pià grave dei fiotti di & nei link , cmq il metodo en.tizio.altervista.org/ è decisamente interessante [/OT]
    http://express.altervista.org
    Dato un lavoro, si possono scegliere due sole delle seguenti caratteristiche: veloce, economico, di qualità.
    Così capita che se un lavoro è veloce ed economico non sarà di qualità; se è veloce e di qualità non sarà economico; se è economico e di qualità non sarà veloce.

  17. #17
    Guest

    Predefinito

    Se vi può interessare, il php ha una funzione che non ricordo come si chiama (basta cercare su php.net), che automaticamente inserisce in ogni link dei parametri a vostra scelta. Potreste utilizzare questa funzione per registrare la variabile che indica la lingua e farla passare automaticamente di pagina in pagina, senza doverla aggiungere manualmente... poi quando serve la cambiate.

  18. #18
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito

    A titolo informativo, ho utilizzato il metodo di heracleum, integrandolo con il PHP_SELF:

    Ho eseguito un test e funziona a meraviglia, ora devo solo riempire i contenuti.

    Grassssie Heracleum!!!

    Codice HTML:
    <?php $me=$_SERVER['PHP_SELF'];
    
          echo '<a href="http://pietrovischia.altervista.org'.$me.'">Italiano</a>';
          echo '<a href="http://en.pietrovischia.altervista.org'.$me.'">Inglese</a>';
    
    $subdom = substr($HTTP_SERVER_VARS["HTTP_HOST"], 0, 3);
    $lang = ($subdom == 'en.')? 1 : 0;  //1 = inglese, 0 = italiano  
    
    ?>
    <?php if($lang==1) { ?>
    
    CODICE HTML IN INGLESE
    <?php }
    
    else { ?>
    
    CODICE HTML IN ITALIANO
    
    <?php } ?>

  19. #19
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Bene bene...
    Mi sa che tra un lavoretto alla sezione Sudoku e l'altro ricavo qualche oretta per implementare questo sistema bilingue anche sul mio sito

    Anzi ora che ci penso si potrebbe ulteriormente perfezionare,
    soprattutto nel caso in cui più in là si decida di utilizzare i sottodomini per altri scopi, o per chi li usa già. Se invece si pensa di non utilizzarli per altro (come stiamo facendo noi) va bene così com'è.

    Perfezionarlo significa rendere parametrica anche la componente 'host' dell'URL, oltre alla path (PHP_SELF) come hai fatto tu, cioè invece di:
    echo '<a href="http://en.pietrovischia.altervista.org'.$me.'">Inglese</a>';
    fare un :
    echo '<a href="http://en.'. $basehost . $me .'">Inglese</a>';

    dove $basehost è l'host corrente che include eventuali sottodomini tipo:
    news.utente.altervista.org
    stando attenti a togliergli un precedentemente aggiunto dominio (in questo caso) di 5' livello 'en.' altrimenti si crea un mostro (en.en.en.utente.altervista.org) nel caso si clicchi più volte, cosa comunque sciocca.

    Codice PHP:
    <?php
    $endom
    = 'en.';
    $enlen = strlen($endom);
    $basehost = $HTTP_SERVER_VARS['HTTP_HOST'];
    $subdom = substr($basehost, 0, $enlen);
    $lang = ($subdom == $endom)? 1 : 0; //1 = inglese, 0 = italiano
    if ($lang) //se c'e' subdomain en. escludilo da basehost
    $basehost = substr($basehost, $enlen);
    $me = $_SERVER['PHP_SELF'];
    echo
    '<a href="http://'. $basehost . $me .'">Italiano</a>';
    echo
    '<a href="http://en.'. $basehost . $me .'">Inglese</a>';
    ?>
    Ovviamente non l'ho testato, ma dovrebbe aver senso
    E' tutto più parametrico (niente ripetizioni, 'en.', 3 sparsi per il codice), e quindi funziona su qualsiasi sito senza doverci scrivere il nome del proprio sito -a differenza dello script di prima- e dovrebbe considerare anche subdomini di 4' livello per altri scopi.
    Anche se non hai sottodomini registrati da pannello puoi tranquillamente testarlo (se vuoi) scrivendo nella casella indirizzo del browser il tuo sito con un sottodominio a fantasia:
    http://ciccio.pietrovischia.altervista.org
    cliccando su inglese dovrebbe rispettarti il 'ciccio' spostandosi su http://en.ciccio.pietrovischia.altervista.org
    Ultima modifica di heracleum : 13-12-2005 alle ore 04.58.57
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

Regole di scrittura

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