2012-08-02 47 views
11

Tôi hiện đang làm việc về bản địa hóa ngôn ngữ của Khan Academy, tôi đã tải xuống nguồn 8051 từ Google Code. Sau khi khảo sát thông tin và xem mã trực tuyến, dự án được thực hiện bằng cách sử dụng jinja2 làm ngôn ngữ templating. Tôi có thể sử dụng babel để hoàn thành công việc của mình.Ngôn ngữ bản địa hóa của Khan Academy

Với các công việc sau đây, tôi cuối cùng đã có thể kích hoạt {%trans%}{%endtrans%} thẻ parse-thể của mẫu động cơ với sửa đổi như sau:

trong webapp2_extra/jinja2.py:

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

trong config_jinja2.py

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

Tuy nhiên, bản dịch đã dịch của *.mo*.po (fr om pybabel) không dịch đúng thẻ trong giá trị sang ngôn ngữ đích. Tôi nghĩ rằng sự tích hợp babel nên đến từ webapp2_extra.i18n.py, nhưng tôi không biết làm thế nào để kích hoạt nó.

Như vài bài viết nào trong Google nói rằng đoạn mã sau có thể làm việc:

from webapp2_extras import i18n 
    env.install_gettext_translations(i18n) 

Tuy nhiên, nó không thành công vì nó không nhận ra {%trans%} thẻ. Vì vậy, có ai có kinh nghiệm làm việc trên cùng một vấn đề hoặc có bất cứ đề nghị để jinja2 i18n vấn đề?

Đánh giá cao bất kỳ đề xuất nào.

+0

Bạn biên dịch lại .mo và po. tập tin với các tiện ích gettext? Âm thanh anyway rằng họ có một hệ thống tương tự như Django cho bản dịch vì vậy bạn cũng có thể kiểm tra tài liệu của Django – Lorenzo

+0

Bạn có làm việc trong Khan Academy? –

+0

Không, tôi chỉ là một tình nguyện viên dịch Khan Academy sang tiếng Trung. Cố gắng tìm ra một cách thông minh hơn là thay đổi HTML. –

Trả lời

1

Đây là mô-đun phù hợp với tôi (dịch {% trans %} đánh dấu bên trong mẫu jinja2).

main.py

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() 
Các vấn đề liên quan