2012-10-19 11 views
9

ho la mia lingua php gettext predefinita in inglese diciamoeffettuare traduzioni in diverse lingue

Vorrei in uno dei miei controllore, di tradurre alcune parole in altre 2 lingue e metterli tutti in un array.

idealmente ho potuto fare

$word_sv = gettext($word, 'sv_SV'); 
$word_fi = gettext($word, 'fi_FI'); 

ma non esiste.

È l'unico modo per modificare l'intero gettext settings ogni volta?

function setLang($lang){ 
    putenv("LC_ALL=$lang"); 
    setlocale(LC_ALL, $lang); 
    bindtextdomain("myPHPApp", "./locale"); 
    textdomain("myPHPApp"); 
} 

setLang('sv_SV'); 
$word_sv = gettext($word); 
setLang('fi_FI'); 
$word_fi = gettext($word); 

correlato: visto su Google dopo: i18n with gettext but without the locale hassle?


Modifica

ecco le soluzioni risposto proposte:

+0

Solo una nota, è possibile utilizzare la ricerca superiore di Google per cercare siti specifici utilizzando una stringa di query come: 'site: stackoverflow.com php translate'. Cercherà solo SO per 'php translate'. – Josh

+0

Hai visto http://www.php.net/manual/en/function.dcgettext.php? Potrebbe essere di aiuto. – hakre

+1

Gettext non è chiaramente progettato per tale caso d'uso. L'idea è di impostare la lingua una volta e ottenere tutti i messaggi tradotti chiamando la funzione gettext. Qual è il caso d'uso qui? –

risposta

1

Conosco i dolori dell'uso di gettext, ma le sue prestazioni sono ciò che mi tiene con sé!

Nel tuo caso, potresti voler guardare questo piccolo progetto? sono abbastanza sicuro che questo potrebbe aiutarti!

questo semplicemente utilizza i file .ini con le traduzioni, è possibile passare liberamente da un file all'altro e ripetere le lingue diverse per la stessa parola.

https://github.com/Philipp15b/php-i18n

+1

thx proverà (troppo male php non può farlo in modo nativo) –

+0

Vero, sono stato sul punto di scrivere il mio sistema di traduzione, ma qualunque cosa scriva non può essere paragonata a quanto è veloce gettext, quindi sono legato per il momento, ma questo perché il mio gioco su Facebook serve migliaia di visualizzazioni simultanee, quindi le prestazioni sono molto importanti per me, a seconda del caso, il progetto che ho postato potrebbe essere utile :) buona fortuna e ha ck il gibson! ;) –

0

immagino una risposta ovvia è quello di rotolare il proprio funzione globale:

function getLocalText($string, $lang) 
{ 
    putenv("LC_ALL=$lang"); 
    setlocale(LC_ALL, $lang); 
    bindtextdomain("myPHPApp", "./locale"); 
    textdomain("myPHPApp"); 

    return gettext($string); 
} 

$word_fi = getLocalText($word, 'fi_FI'); 
+2

sì se non dimentico di riportarlo alla versione iniziale alla fine, c'è un'altra opzione per gettext? –

+1

altrimenti la tua risposta non aiuta davvero me –

1

Se si sono tenuti a gettext qui, lasciare che il computer fare il lavoro per voi.

Hai una lista di parole che vuoi controllare in tutte le lingue, prima fai il wordlist per ogni lingua. Ciò ti risparmia un po 'di overhead per chiamare la funzione setlanguage tra ogni parola e lingua.

Se si vuole andare ogni lingua, ogni parola, scrivere le funzioni in questo modo:

function gettext_by_lang($lang, $word) { 
    putenv("LC_ALL=$lang"); 
    setlocale(LC_ALL, $lang); 
    bindtextdomain("myPHPApp", "./locale"); 
    textdomain("myPHPApp"); 
    return gettext($word); 
} 

$word_sv = gettext_by_lang('sv_SV', $word); 
$word_fi = gettext_by_lang('fi_FI', $word); 

Ciò almeno rendere il codice più compatto. Un'altra idea che viene in mente è l'utilizzo di un parser per i file PO e MO in modo da poter controllare i dati.

In PHP una delle che è trasporto con Wordpress/Glotpress:

Forse questo aiuta. Quella libreria viene mantenuta.