2012-08-02 29 views
11

Khan Academy'nin dil lokalizasyonu üzerinde çalışıyorum, kaynak 8051'i Google Code numaralı telefondan indirdim. Anket bilgileri ve çevrimiçi kodu görüntüledikten sonra, proje şablon dili olarak jinja2 kullanılarak yapılır. Çalışmamı gerçekleştirmek için babel kullanabilirim. Aşağıdaki çalışmaylaKhan Academy'nin Dil Yerelleştirmesi

, sonunda etkinleştirebilirsiniz {%trans%} ve şu değişiklikler şablon motoru tarafından {%endtrans%} etiketi ayrıştırma-muktedir: webapp2_extra içinde

/jinja2.py: config_jinja2.py içinde

from django.utils import translation 
    env.install_gettext_translations(translation) 

-- put following line 
"extensions": ['jinja2.ext.i18n'] 

Ancak *.mo ve *.po (fr benim tercüme şablon om pybabel) etiketi, hedef içindeki değeri doğru dilde çevirmez. Babel entegrasyonunun webapp2_extra.i18n.py adresinden gelmesi gerektiğini düşünüyorum, ancak bunu nasıl etkinleştireceğimi bilmiyorum. Google

olarak birkaç mesaj Aşağıdaki kod işe yarayabilecek belirtti: o {%trans%} etiketi tanımadığından

from webapp2_extras import i18n 
    env.install_gettext_translations(i18n) 

Ancak başarısız olur. Peki herkes aynı sorun üzerinde çalışan deneyime sahip mi yoksa jinja2 i18n sorununa yönelik herhangi bir öneri var mı?

Herhangi bir öneriniz için teşekkür ederiz.

+0

main.py sen .mo ve po recompiling Are. gettext yardımcı programları ile dosyaları? Django'ya benzer bir sisteme sahip olduklarını söyleyen Django'nun belgelerini de kontrol edebilirsiniz. – Lorenzo

+0

Khan Academy'de mi çalışıyorsunuz? –

+0

Hayır, sadece Khan Academy'yi Çince'ye çevirmek için gönüllü oldum. HTML'yi değiştirmek yerine daha akıllı bir yol bulmaya çalışıyorum. –

cevap

1

İşte benim için çalışan bir modül (bir jinja2 şablonunun içinde {% trans %} işaretini çevirir).

import webapp2 
from webapp2_extras import i18n 
from jinja2 import FileSystemLoader, Environment 

env = Environment(loader=FileSystemLoader('/path/to/my/templates'), 
     extensions=['jinja2.ext.i18n']) 
env.install_gettext_translations(i18n) 

class HelloWorld(webapp2.RequestHandler): 

    def _find_locale(self): 
     #needs customization 
     lang = self.request.accept_language.best_match(('en-us', 'fr')) 
     if ('fr' in lang): 
      return 'fr_FR' 
     return 'en_US' 

    def get(self): 
     i18n.get_i18n().set_locale(self._find_locale()) 
     template = env.get_template('hello.html') 
     self.response.write(template.render()) 

config = {'webapp2_extras.i18n': {'translations_path': './i18n'}} 

app = webapp2.WSGIApplication([ 
    ('/', HelloWorld), 
], config=config, debug=True) 

def main(): 
    from paste import httpserver 
    httpserver.serve(app, host='127.0.0.1', port='8080') 

if __name__ == '__main__': 
    main()