2009-12-22 8 views
12

Vorrei fornire il mio sito Web Python GAE nella lingua dell'utente, utilizzando solo gli strumenti disponibili direttamente in App Engine. Per questo, mi piacerebbe usare i file GNU gettext (file .po e .mo).Come creare un'applicazione di Google App Engine internazionalizzata

Qualcuno ha unito con successo Python Google App Engine e gettext file? Se sì, potresti fornire i passaggi che hai usato?

Avevo iniziato a discussion in GAE's Google group, ma non sono stato in grado di estrarre da esso come mi piacerebbe farlo: non voglio aggiungere dipendenze esterne, come Babel (suggerito nella discussione). Voglio utilizzare Google Apps Engine, quindi nessun aggiornamento manuale di Django o questo tipo di cose.

Inizialmente, inizierò a utilizzare la lingua inviata dal browser, quindi non è necessario forzare manualmente la lingua utilizzando i cookie, ecc. Tuttavia, dopo l'internazionalizzazione di base, è possibile aggiungere una funzionalità di modifica della lingua.

Come una nota di fondo per darvi maggiori dettagli su ciò che sto cercando di fare, vorrei internazionalizzare il numero Issue Tracker Tracker, un'applicazione open source che ho ospitato su Launchpad. Ho intenzione di utilizzare la piattaforma di traduzione di Launchpad (spiegando perché mi piacerebbe usare i file .mo). Puoi dare un'occhiata al codice sorgente nel suo ramo Bazaar (mi spiace nessun link a causa del limite di prevenzione dello spamming di stackoverflow per i nuovi utenti ...)

Grazie per avermi aiutato a fare progressi in questo progetto!

risposta

4

È possibile utilizzare lo strumento di internazionalizzazione di Django, come spiegato here.

Dicono anche che non esiste un modo semplice per farlo.

Mi auguro che aiuta voi :)

+2

Grazie per il collegamento, avevo già provato a utilizzarlo nel mio precedente tentativo, ma non riuscivo a farlo funzionare. Ho provato di nuovo la scorsa notte, e mentre sono riuscito a sbarazzarmi di qualsiasi eccezione, non c'è ancora nulla di tradotto ... Continuerò a provare a farlo funzionare, perché a quanto pare deve funzionare, in quanto esiste un'app di esempio !Ti terrò informato se ci riuscirò. – Emilien

+1

Sono finalmente riuscito a internazionalizzare la mia applicazione! Ho provato a seguire le spiegazioni sul link che hai inviato, ma qualcosa non funzionava, quindi ho letto l'esempio di codice che è collegato all'articolo, e copia/incolla dal codice reale, ha funzionato! Grazie ancora per il link! Nel caso in cui qualcuno fosse interessato, puoi dare un'occhiata alle modifiche effettive apportate alla mia app: http://bazaar.launchpad.net/~itt-devs/issuetrackertracker/main/revision/130 – Emilien

+0

Questa non è una soluzione a meno che stai usando Django. – rbanffy

6

Come i miei bisogni erano semplici, ho usato un semplice trucco, invece di gettext (non disponibile). Ho creato un file con traduzioni di stringhe, translate.py. Circa in questo modo:

en={} 
ru={} 

en['default_site_title']=u"Site title in English" 
ru['default_site_title']=u"Название сайта по-русски" 

Poi nel codice principale che ho definito una funzione che restituisce un dizionario con traduzioni nella lingua più adatta dalla lista (la prima ad avere una traduzione viene utilizzato o in inglese):

import translate 

def get_messages(languages=[]): 
    msgs=translate.en 
    for lang in languages: 
     if hasattr(translate,lang): 
      msgs=getattr(translate,lang) 
      break 
    return msgs 

Usage:

msgs = get_messages(["it","ru","en"]) 
hi = msgs['hello_message'] % 'yourname' 

ho definito anche una funzione di supporto che estrae un elenco di lingue da Accept-Language intestazione.

Non è la soluzione più flessibile, ma non ha dipendenze esterne e funziona per me (in un progetto giocattolo). Penso che translate.py possa essere generato automaticamente dai file gettext.

Nel caso in cui si desidera vedere di più, la mia fonte effettiva è here.

+0

Grazie per la spiegazione dettagliata. Avevo pensato di utilizzare questo tipo di approccio, ma mi piacerebbe davvero essere in grado di sfruttare la potenza di tutti i traduttori attivi in ​​Launchpad, quindi avrei bisogno di usare gettext standard. Userei questo tipo di soluzione solo come ultima risorsa, ma grazie comunque! – Emilien

+0

Penso che sarebbe bello scrivere un "compilatore" dai file gettext a tale codice python. – sastanin

+2

errato - App Engine può accedere ai file 'normali', purché siano stati caricati con l'app. In quale altro modo caricherà i modelli? –