2011-09-26 7 views
12

Prima di tutto - So che c'è un sacco di risposte circa la funzionalità multi-lingua, non ho trovato la risposta per quello che voglioIl modo migliore per implementare multi-linguaggio PHP

ho pensato circa 3 modi con cui posso lavorare, ho bisogno di creare i file di lingua usando PHP ogni volta che aggiungo un nuovo valore all'interfaccia di un modulo web

I primi 2 sono simili - utilizzano matrici o definiscono in un file di linguaggio specifico e includilo all'inizio della corsa, Ma in questo caso potrei caricare migliaia di definizioni o matrici solo per usarne poche in ciascuna pagina.

Il terzo modo è quello di creare la funzione che ha chiamato ogni volta che la parola o la frase completa e con IF -s o switch scegliere il giusto termine (o di ritorno la chiave chiamata se nessuna corrispondenza

Qual è il miglior modo per farlo


Edit:? ho deciso di fare un po 'di test, ho provato 3 modi diversi e misurato il tempo e la memoria ha preso per esso:

  1. ho definito un array (22 valori) con e travolto da 1 a 1.000.000 - controllato per chiamare valore - 1 di tre utilizzando l'operatore % scegliere cosa usare e solo porla su una variabile

    • Tempo preso: ,476591110229 secondo
    • di memoria: 6536 bytes
  2. ho usato lo stesso array (22 valori) e lo ha chiamato utilizzando la funzione - return $arr[$string]; (solo per modo conveniente per lavoro e la capacità di cambiare da diffondere affittare modo se avrò bisogno)

    • Tempo preso: 0,960635185242 secondo
    • di memoria: 6704 bytes
  3. ho creato una funzione con lista di stringhe e utilizzare switch ->case ho scelto la stringa di ritorno

    • Il tempo impiegato: 1.46953487396 seconda
    • Memoria: 848 byte

Bene, ora la domanda è: qual è la scelta giusta - tempo preferendo o preferendo la memoria, E nel caso che i siti sono grandi e sarebbe preso un sacco della memoria - non ho potuto cambiare perché costruito con gli array - Se funziona con la funzione posso sempre cambiare

io apprezzo molto il vostro aiuto,

Grazie

012.351.
+2

Eventuali duplicati: http://stackoverflow.com/ domande/2790952/php-localization-best-practice-gettext –

+3

possibile duplicato di [Come creare un sito Web multilingua in php e Mysql] (http://stackoverflow.com/questions/2487171/how-to-make-a- multilanguage-website-in-php-and-mysql) – JJJ

+0

http://php.net/manual/en/function.gettext.php –

risposta

1

Raggruppa le stringhe in categorie, una globale e l'altra, corrispondenti alle viste visualizzate nel sito Web (ad esempio lang_global, lang_profile, lang_something_else) Includi il file globale e il file corrispondente alla vista corrente. In questo modo non caricherete l'intera traduzione, ma solo un sottoinsieme di essa. Ed è più maneggevole, e puoi fornire un contesto, con traduzioni diverse sulla stessa stringa.

+0

Ne ho bisogno per un CMS - è una specie di problema per dividerlo in più parti - il sistema può cambiare su ogni sito e le stringhe della lingua possono essere chiamate da qualsiasi luogo .. è troppo complicato confondere la posizione di ogni stringa nelle funzioni/file ogni volta che voglio chiamarli –

+1

hanno ancora entità nel CMS. E le entità possono avere file di lingua separati.E ogni modulo/plugin può avere anche un file di lingua. –

+0

È ancora complicato lavorare con .. il sistema è solo la base e necessario per cambiare su ogni sito web, cercando di definire ogni volta dove posizionare la stringa corrente non è così semplice modo di lavorare –

5

In termini di codice, qualcosa di simile sarà perfetto per te. Deve basarsi sulla scelta dell'utente (scelta di una lingua da un pulsante o menu) o sulla lingua di navigazione (non è l'aprouch migliore).

index.php

<?php 

// verify the user's choice 
if ($_POST[lang] == "en") 
{ 
    include_once("en_language.php"); 
} 

if ($_POST[lang] == "pt") 
{ 
    include_once("pt_language.php"); 
} 

// calling a lable in your page 
echo LABEL_MENU; 


// the rest of your file 
... 
?> 

en_language.php

<?php 
// ENGISH Language file 
define('LABEL_MENU','Main Menu'); 

// the whole file with the labels of your system 

?> 

pt_language.php

<?php 
// PORTUGUESE Language file 
define('LABEL_MENU','Menu Principal'); 

// the whole file with the labels of your system 

?> 

integrando

Se si desidera utilizzare tipo array di valori costanti con define(), ma non sono sicuro di quello che è più veloce di ..

$arrays = array("MAIN_MENU" => "Main Menu", "LEFT_MENU" => "Left Menu"); 
echo $arrays["MAIN_MENU"]; 
+0

Come ho detto - ci ho pensato (o usando gli array), ma ancora - posso definire un sacco di stringhe che non userò affatto e quando un sito sta ottenendo molte visite è diventato un po 'pesante (credo) –

+0

@Joe Polico - Ottimo, è il modo semplice. – B4NZ41

+0

Ma sto cercando entrambi - il modo più semplice e il modo più veloce (per il server) con cui lavorare. E veramente, per il modo semplice è meglio usare una funzione per gestire tutte le stringhe della lingua –