Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Gestione delle lingue

  1. #1

    Gestione delle lingue

    Ciao,

    devo impostare un sito multilingue. L'idea è quella di caricare file diversi in base alla lingua richiesta:

    italian.php
    Codice PHP:
    $text = array();
    $text[0] = 'ciao';
    $text[1] = 'buongiorno'
    english.php
    Codice PHP:
    $text = array();
    $text[0] = 'hello';
    $text[1] = 'good morning'
    La domanda è: per richiamare il $text all'interno delle funzioni è una buona idea usare il global??

    Codice PHP:
    function prova()
    {
       global 
    $text;
       echo 
    $text[0];

    oppure

    Codice PHP:
    function prova($text)
    {
       echo 
    $text[0];

    oppure altro???

  2. #2
    Sarebbe molto meglio usare gettext() piuttosto che delle variabili globali.

  3. #3
    francamente non so nemmeno cosa sia, ma mi pare di aver capito googlando qua e là che si tratta di un traduttore.

    Il mio è un sito dinamico, ci sono poche cose scritte da me, ne vale la pena?

    Per quanto riguarda il mio primo post, come agiresti?

  4. #4
    personalmente non mi piace molto gettext perché un conto è gestire i testi multilingua di un applicativo un conto quelli di un sito web

    se ad esempio le news vanno postate multilingua si dovrà, in ogni caso, implementare una completa gestione della multilingua oltre a quella basata su gettext

    personalmente, quando mi sono ritrovato in queste situazioni, ho sempre preferito utilizzare il database che benché più lento di un normale file di testo è più veloce di un parsing di un "grosso" file contenente codice php soprattutto perché mentre è facile che la cache per le query sia abilitata è più difficile che siano installati estensioni come apc, eaccelerator, zend optimizer e via dicendo

    meglio una tabella contenente tutte le voci della lingua suddivise per categorie cosi da estrarre tutte le voci di una data categoria e metterle in memoria e poi leggerle da li (riducendo cosi il numero di query, sfruttando al massimo la cache delle query, il tutto senza dover estrarre per forza troppi dati che alla fine si vanno a rivelare inutili). lo stesso sistema può contenere anche i dati per il multilingua.

    Inoltre la tabella contenente i dati per il multilingua non deve necessariamente contenere testo da visualizzare, ma anche percorsi a immagini (ad esempio se un'immagine deve variare in base alla lingua) o ancora percorsi a file (se si deve fare scaricare un dato file in inglese piuttosto che in italiano o in francese)

  5. #5
    grazie per l'aiuto.
    Però mi sembrano soluzioni adatte a siti tipo questo, dove ci sono molti contenuti testuali scritti dall'amministrazione. Ad esempio per i quotidiani online potrebbero essere ottime idee.
    Nel mio caso si tratta di un sito dinamico, i contenuti li fanno gli utenti e non vanno tradotti. Va tradotto il titolo del form, oppure l'etichetta dell'input (tanto per intenderci)...
    In questa situzione quindi, usare global in tutte le funzioni che gestiscono gli html potrebbe essere una buona idea, no?? (invece di stare a passare in ogni funzione il $text...)

  6. #6
    usare global non è mai una buona idea

  7. #7
    Originariamente inviato da daniele_dll
    usare global non è mai una buona idea
    ...mentre invece sarebbe una buona idea???

    Passare l'array in ogni funzione per l'html della singola pagina?

  8. #8
    creati una funzione, ad es chiamata _T che si occupa di richiamare una classe (usando ad es una variabile come $GLOBALS['__i18n']) che richiama i metodi necessari per la traduzione

    un esempio di _T

    codice:
    function _T($Text)
    {
      // Acquisisce gli argomenti e rimuove il messaggio dal primo
      $arguments = func_get_args();
      array_unshift($arguments);
      
      // Richiama il metodo per acquisire il messaggio tradotto
      $translatedText = $GLOBALS['__i18n']->GetText($Text);
      
      // Restituisce il testo tradotto andando a sostituire i parametri
      return vsprintf($translatedText, $arguments);
    }
    la classe I18N che ti vai a scrivere si occuperà di caricare i file della lingua necessari o richiesti, si occuperà di sfruttare la cache (ad es tramite i comandi per la cache di apc, memcache, xcache, eaccelerator, sharedance e via dicendo) e di restituire i messaggi tradotti

    l'uso di $GLOBALS, anche se meno problematico della keyword global, è comunque da evitare il più possibile quindi a parte l'utilizzo in questa funzione per il resto passati la classe come variabile avanti ed indietro

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