• i18n support in template file
    • 模板文件中的i18n支持
      • 问题
      • 方案

    i18n support in template file

    模板文件中的i18n支持

    问题

    在web.py的模板文件中, 如何得到i18n的支持?

    方案

    项目目录结构:

    1. proj/
    2. |- code.py
    3. |- i18n/
    4. |- messages.po
    5. |- en_US/
    6. |- LC_MESSAGES/
    7. |- messages.po
    8. |- messages.mo
    9. |- templates/
    10. |- hello.html
    11.  

    文件: proj/code.py

    1. #!/usr/bin/env python
    2. # encoding: utf-8
    3.  
    4. import web
    5. import gettext
    6.  
    7. urls = (
    8. '/.*', 'hello',
    9. )
    10.  
    11. # File location directory.
    12. curdir = os.path.abspath(os.path.dirname(__file__))
    13.  
    14. # i18n directory.
    15. localedir = curdir + '/i18n'
    16.  
    17. gettext.install('messages', localedir, unicode=True)
    18. gettext.translation('messages', localedir, languages=['en_US']).install(True)
    19. render = web.template.render(curdir + '/templates/', globals={'_': _})
    20.  
    21. class hello:
    22. def GET(self):
    23. return render.hello()
    24.  
    25. # 使用内建的HTTP服务器来运行.
    26. app = web.application(urls, globals())
    27. if __name__ == "__main__":
    28. app.run()

    模板文件: proj/templates/hello.html.

    1. $_("Message")

    创建一个locale目录并使用python2.6内建的pygettext.py从python脚本和模板文件中导出翻译:

    1. shell> cd /path/to/proj/
    2. shell> mkdir -p i18n/en_US/LC_MESSAGES/
    3. shell> python /path/to/pygettext.py -a -v -d messages -o i18n/messages.po *.py templates/*.html
    4. Working on code.py
    5. Working on templates/hello.html

    你将会得到pot file: i18n/messages.po. 它的内容和下面的差不多(‘msgstr’包含了翻译后的信息):

    1. # 文件 code.py:40
    2. msgid "Message"
    3. msgstr "This is translated message in file: code.py."

    拷贝文件’i18n/messages.po’到目录’i18n/en_US/LC_MESSAGES/’下, 然后翻译它. 使用gettext包的msgfmt工具或者使用python2.6内建的’msgfmt.py’文件将一个pot文件编译称mo文件:

    1. shell> msgfmt -o i18n/en_US/LC_MESSAGES/messages.mo i18n/en_US/LC_MESSAGES/messages.po

    运行web.py的服务器:

    1. shell> cd /path/to/proj/
    2. shell> python code.py
    3. http://0.0.0.0:8000/

    打开你的浏览器, 比如说firefox, 然后访问地址: http://192.168.0.3:8000/, 你将会看过翻译过的信息.