Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Sito multilingua come tradurre i dati provenienti dal db

    Salve per realizzare il mio sito multilingua ho creato una pagina con tutte costanti per ogni lingua quando richiamo le pagine ho una variabile di sessione che a seconda dalla pagina dalla quale proviene trasforma le costanti in parole nella lingua corretta .

    Il problema ce l'ho con i dati salvati nel db come posso trattare i dati nel db come costanti e non come variabili ?

  2. #2
    Per rispondere in modo secco alla tua domanda, devi usare la funzione `constant()`.

    Per rispondere in modo completo, le costanti non sono il miglior modo e soprattutto, come mi pare di aver capito, il miglior modo non è tradurre parola per parola bensì frase per frase.

    Inoltre non dovresti usare le costanti, bensì semplici stringhe.

    Le stringhe dovrebbe essere "linguisticamente agnostiche", nel senso che dovresti avere qualcosa del tipo "home_page.welcome" che viene poi tradotto come "Benvenuto sul mio sito web" per l'italiano, oppure "Welcome on my website" per l'inglese.

    In questo modo puoi tradurre ciò che vuoi.

    Per sostituire le stringhe con la corrispondente traduzione, invece, puoi usare la funzione str_replace().

    Questo è già un primo importante passo avanti.

    Se poi vuoi fare proprio le cose per bene, allora potresti considerare di usare una liberira esterna come l'ottimo componente Translation di Symfony.

    Però, davvero, le costanti sono una pessima scelta! Ripensaci
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  3. #3
    Quote Originariamente inviata da mircov Visualizza il messaggio
    Per rispondere in modo secco alla tua domanda, devi usare la funzione `constant()`.

    Per rispondere in modo completo, le costanti non sono il miglior modo e soprattutto, come mi pare di aver capito, il miglior modo non è tradurre parola per parola bensì frase per frase.

    Inoltre non dovresti usare le costanti, bensì semplici stringhe.

    Le stringhe dovrebbe essere "linguisticamente agnostiche", nel senso che dovresti avere qualcosa del tipo "home_page.welcome" che viene poi tradotto come "Benvenuto sul mio sito web" per l'italiano, oppure "Welcome on my website" per l'inglese.

    In questo modo puoi tradurre ciò che vuoi.

    Per sostituire le stringhe con la corrispondente traduzione, invece, puoi usare la funzione str_replace().

    Questo è già un primo importante passo avanti.

    Se poi vuoi fare proprio le cose per bene, allora potresti considerare di usare una liberira esterna come l'ottimo componente Translation di Symfony.

    Però, davvero, le costanti sono una pessima scelta! Ripensaci
    Il mio metodo è questo :

    translation_it
    define('NAME', 'Nome');

    translation_en
    define('NAME', 'Name');

    io faccio un bel echo NAME e a seconda se importo una delle due traduzioni ho Nome o Name

    con str_replace() come fai ?

  4. #4
    No, aspetta, io con `str_replace()` non faccio, uso Symfony come framework e JMSTranslationBundle per gestire le traduzioni, quindi il procedimento è completamente diverso.

    Però, nel tuo caso, il metodo migliore è usare [del]`str_replace()`[/del] gli array.

    Dunque, hai un file PHP del tipo

    codice:
    // it.php
    $translations = [
    'home_page.welcome' => 'Benvenuto nel mio sito web'
    ];
    Nella tua pagina, invece, hai qualcosa del tipo:

    codice:
    ...
    <h1><?php echo $translations['home_page.welcome']</h1>
    ...
    Usare un array ti permette di preparare la tua pagina ad accettare qualunque tipo di sorgente.

    Per esempio, in questo momento scrivi il file a mano, ma domani potresti voler gestire tutto da pannello di controllo. Usare gli array ti permette di avere la pagina pronta: anzichè importare il file delle traduzioni, semplicemente esegui una query sul database e lo passi alla pagina. E non le interessa se la sorgente dell'array è un file o il database: le interessa solo che ci sia un array che si chiama `$translations` che contiene la chiave `home_page.welcome`.

    Con `str_replace()`, invece, fai in questo modo:

    codice:
    $str = '<h1>home_page.welcome</h1>';
    
    foreach ($translations as $transKey => $trans) {
    $str = str_replace($transKey, $trans, $str);
    }
    echo $str;
    Molto dipende da come hai strutturato la pagina e il codice.

    Poi puoi anche migliorare l'uso di str_replace eliminando il foreach, ma il concetto è questo.
    Ultima modifica di mircov; 07-01-2017 a 01:32
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.