关于Open edX平台个性化定制的梳理

最近一直在研究开源项目Open edX,在同事和各种谷歌度娘的帮助下总算是将平台搭建起来了-_- 但是我们的团队是准备将这个平台用于我们的生产环境的,直接使用原生的平台是肯定不行的,于是接下来不可避免的工作就是对此平台做我们自己的个性化定制。经过一个礼拜左右的摸索,在此对网络上的各种指南以及自己的一些见解做个简单的梳理和总结。

  • 汉化

原生的Open edX平台是英文的,因此我们首先要对平台进行本地化,对目标用户只有中国的产品来说只需要对其进行汉化就行了。

  1. 本地化机制

首先我们需要了解Open edX平台是如何提供汉化支持的。Open edX使用了一个叫做“Transifex”的开源翻译平台,通过它将edX软件翻译成各种语言,你可以在https://www.trasifex.com/ 注册一个账户并加入 edx-platform 项目来为官方补充未完成的中文翻译。

详细介绍参考:http://edx.readthedocs.org/projects/edx-developer-guide/en/latest/internationalization/i18n_translators_guide.html

存在本地的多语言文件包:

进入到如下目录:/edx/app/edxapp/edx-platform/conf/locale查看当前目录下的内容,会发现以各种语言id命名的文件夹,以简体中文为例,进入zh_CN/LC_MESSAGES目录,可以看到很多的.mo和.po文件,其中.mo文件是由.po文件编译生成的。其中django.po内容是由其他.po文件在编译时生成的,包含了它们的全部内容,最终系统运行时用到的就是django.mo。

以mako.po文件为例,打开此文件,会发现文件内容是由很多键值对组成的,例如:

#: lms/templates/index.html lms/templates/courseware/courses.html

msgid “Search for a course”

msgstr “查找课程”

其中msgid就是你在原生英文系统页面中看到的内容,msgstr是对应语言的翻译内容。从msgid上面的注释内容中可以轻松找出改id出现在了哪些文件中。我们再打开其中一个文件lms/templates/index.html

截取部分内容如下:

<%!

from django.utils.translation import ugettext as _

from django.core.urlresolvers import reverse

from microsite_configuration import microsite

%>

……

<form method=”get” action=”/courses”>

<input class=”search-input” name=”search_query” type=”text” placeholder=”${_(“Search for a course”)}“></input>

<button class=”search-button” type=”submit”>

<i class=”icon fa fa-search” aria-hidden=”true”></i>

</button>

</form>

从加粗的代码中可以发现,代码使用了django的翻译库,其中’_’代表了ugettext方法(根据django.mo),它能够获得相应msgid的翻译内容。关于django对国际化的支持请参考:https://docs.djangoproject.com/en/dev/topics/i18n/translation/

这些基本就是Open edX获取本地化支持的机制。要让系统使用我们的中文翻译包,首先需要修改配置文件,方式如下。

2. i18n汉化

▪ 切换至 edxapp 账户,并加载对应环境变量
sudo -u edxapp bash

source /edx/app/edxapp/edxapp_env

cd /edx/app/edxapp/

▪ 修改 (*)ms.env.json(即cms 和 lms)
“LANGUAGE_CODE”: “zh-cn”,

▪ 手动更新assets
sudo /edx/bin/edxapp-update-assets-lms

sudo /edx/bin/edxapp-update-assets-cms

▪ 然后重启 edxapp:
sudo /edx/bin/supervisorctl restart edxapp:

详细信息参见:http://wiki.edustack.org/doku.php?id=edx:ova配置指南#i18n_汉化。在这里只调用了官方release的翻译包,目前官方提供的中文翻译做了约90%,我们用于生产环境需要对其进行完全的汉化,这就需要采用下面的方法。

3. 手动补全汉化

要获得官方最新的翻译,我们就要从transifex.com获取最新的翻译文件。

  • 切换到 edxapp环境

sudo -H -u edxapp bash

source /edx/app/edxapp/edxapp_env

cd /edx/app/edxapp/edx-platform

 

  • 配置~/.transifexrc 文件

[https://www.transifex.com]

hostname = https://www.transifex.com

username = your_username

password = your_password

token =

以下命令都在~/edx-platform目录下执行。

  • 拉取你需要的语言的翻译(这里只用中文)

tx pull -l zh_CN

如果提示没有tx命令,会提示安装相应软件,安装即可。

  • 手动拆分可分解字串

paver i18n_extract

这个命令会将可以翻译但还没有翻译的字串拆分成几个.po文件,这些文件都存放在~/edx-platform/conf/locale/en/LC_MESSAGES目录下。在这些文件中找出你想翻译的字串的msgid,将它们合并到~/edx-platform/conf/locale/zh_CN/LC_MESSAGES目录下的相应的.po文件中去。

  • 重新编译

paver i18n_fastgenerate

可以检查编译后的django.po文件是否已包含你新添加的键值对来确认添加已经成功。

  • 退出edxapp,重启edxapp

sudo /edx/bin/supervisorctl restart edxapp:

详情参见:https://github.com/edx/edx-platform/wiki/Internationalization-and-localization

  • 图片定制

在/edx/app/edxapp/edx-platform/lms/static/images目录下存放的是lms系统使用到的静态图片;在/edx/app/edxapp/edx-platform/cms/static/images目录下存放的是cms系统使用到的静态图片。使用这些图片的页面就在/edx/app/edxapp/edx-platform/lms/templates下。

1.更换logo文件

  • 将新logo文件考入本地服务器(方法有很多,笔者使用SVN来进行更新);
  • 进入logo图标所在目录替换掉旧的logo图片;
  • 更新assets;

sudo -H -u edxapp bash

source /edx/app/edxapp/edxapp_env

cd /edx/app/edxapp/edx-platform

paver update_assets lms –settings=aws

 

  • 退出edxapp账户并重启edxapp.

exit

sudo /edx/bin/supervisorctl restart edxapp:

2.添加更换lms首页背景图

  • 将背景图片放在:/edx/app/edxapp/edx-platform/lms/static/images/default-theme下面
  • 修改/edx/app/edxapp/edx-platform/lms/templates/index.html

找到<header>,修改为<header style=“background:url(‘/static/images/default-theme/background.jpg’);background-size:cover”>

  • 更新assets;
  • 退出edxapp账户并重启edxapp.

其他更多配置请参考:http://community.edustack.org/t/cypress-ova/133/4

  • 主题定制

关于主题定制这块,我参考了http://wiki.edustack.org/doku.php?id=edx:ova配置指南一文中所述的方法,但未能成功,后续还会继续跟进。

关于个性化定制方面暂时分享到这里,后续更新会再跟大家分享!

此条目发表在 Open edX 分类目录。将固定链接加入收藏夹。

1 则回应给 “关于Open edX平台个性化定制的梳理”

  1. weisong 说道:

    —————
    在这些文件中找出你想翻译的字串的msgid,将它们合并到~/edx-platform/conf/locale/zh_CN/LC_MESSAGES目录下的相应的.po文件中去。
    —————-

    这里指的是直接复制过去吗?

发表评论

要发表评论,您必须先登录