此前遇到过XBlock中translation相关的问题,解决得很是敷衍,上周末@MT兄也提到这个问题,于是认真解决了下

#需求场景 我们可能在两类场景中需要考虑translation相关的问题:

  • 使用国外的开发者的XBlock,需要考虑汉化
  • 自己做的XBlock,想贡献给社区

对于第一个问题,直接看下边的解决方案就行。对于第二个问题,需要我们在代码和模板里标注翻译字符串

1
2
3
4
5
6
:::text
#在代码里
from django.utils.translation import ugettext as _
_("hello world")
#在模板里,首先将 {% load i18n %} 放在模板最前面
<title>{% trans "hello world" %}</title>

#解决方案

###使用mako模板 此前在群里同@Datochen兄讨论过这个话题,他当时的解决方案是使用mako模板,mako模板支持unicode,所以可以直接写中文。这个方案无法解决以上的两个问题,它能做的是允许你在自己开发的XBlock里写中文字符串

具体的做法可以参考@Datochen兄的博客

###使用django的国际化机制 为了解决以上两个问题,我决定采用django的国际化机制

思路是将XBlock伪装成django app

具体步骤如下:

  • 将XBlock软链接到django app目录下
  • 进入XBlock,mkdir locale
  • 收集翻译字符串,生成.po文件:django-admin.py makemessages -l zh_CN
  • 翻译po文件
  • 在XBlock里编译:django-admin.py compilemessages

此外,我觉得软链接那一步应该可有可无,只要进入到virtualenv环境里,不过还没做测试

#参考 Internationalization