Ecommerce的汉化

      当前ecommerce默认的组件为英文,看到“ecommerce/conf/locale/zh_CN/LC_MESSAGES”目录中有中文的翻译文件,但是翻译的内容比较少,估计还要做大量的工作。本工作在ginkgo.2版本上进行。
一、基础性配置
      由于对ecommerce翻译所需要执行的命令和修改的配置文件不清楚,因此先从configuration的playbook文件内容入手。如下为configuration文件的部分内容:

 #playbooks/roles/ecommerce/tasks/main.yml
– name: compile sass
  shell: “{{ ecommerce_venv_dir }}/bin/python manage.py {{ item }}”
  args:
    chdir: “{{ ecommerce_code_dir }}”
  become_user: “{{ ecommerce_user }}”
  environment: “{{ ecommerce_environment }}”
  with_items:
    – “update_assets –skip-collect”             #可能时执行翻译的关键代码
  when: not devstack
  tags:
    – assets
    – assets:gather
– name: Run r.js optimizer
  shell: “. {{ ecommerce_nodeenv_bin }}/activate && {{ ecommerce_node_bin }}/r.js -o build.js”
  args:
    chdir: “{{ ecommerce_code_dir }}”
  become_user: “{{ ecommerce_user }}”
  when: not devstack
  tags:
    – assets
    – assets:gather
– name: Run collectstatic
  shell: “{{ ecommerce_venv_dir }}/bin/python manage.py {{ item }}”
  args:
    chdir: “{{ ecommerce_code_dir }}”
  become_user: “{{ ecommerce_user }}”
  environment: “{{ ecommerce_environment }}”
  with_items:
    – “collectstatic –noinput”
    – “compress”
  when: not devstack
  tags:
    – assets
    – assets:gather
       后来发现这些命令暂时用不到,只在重新汉化的时候采用得到(编译po文件时)。
      同时对edx的ecommerce的相关文档进行阅读,文档网址为“http://edx.readthedocs.io/projects/edx-installing-configuring-and-running/en/latest/ecommerce/internationalization.html”,文档中说明了修改的地方,同时参考ecommerce的配置文件。内容如下
#/edx/etc/ecommerce.yml
….
LANGUAGE_CODE: zh_CN                                  #这个起到了比较核心的作用,将值从en修改为zh_CN即可
LANGUAGE_COOKIE_NAME: openedx-language-preference     #这个是一个cookie,可以根据这个变量的值来显示相应的语言
#将时区一并进行修改
TIME_ZONE:Asia/Shanghai      #原始值为UTC
#/edx/app/ecommerce/ecommerce/ecommerce/settings/base.py
LANGUAGES = (
    (‘zh_CN’, _(‘Chinese’)),                              #原本没有这一行,加上这一行,并将其他行屏蔽掉
#    (‘en’, _(‘English’)),
#    (‘es’, _(‘Spanish’)),
#    (‘es-419’, _(‘Spanish (Latin American)’)),
)
       上述两个文件修改完成后,在supervisor中重启ecommerce服务,界面的部分已经出现中文。
       整个流程梳理如下,ecommerce的配置文件放在几个文件中,权重从高到低分分别为下述这几个文件,这几个文件中都有关于语言的配置部分,因此在修改时先就优先级高的文件修改,然后再是低一些的。
/edx/etc/ecommerce.yml
/edx/app/ecommerce/ecommerce/ecommerce/settings/production.py
/edx/app/ecommerce/ecommerce/ecommerce/settings/base.py
      在base.py中,有一个元组,定义了ecommerce支持的语言类型,一般为多个,为了支持中文将”(‘zh_CN’, _(‘Chinese’))”,加入其中。这时ecommerce具备了根据cookie中”openedx-language-preference“的数值来显示相应语言的功能。由于ecommerce的面通常是用户从lms转跳过来的,如果lms没有做相应的设置,”openedx-language-preference“一般都为英文。为了简化修改,作者不给该变量发挥作用的余地,直接将支持的语言修改为一种,即在”LANGUAGES”元组的中将其他语言支持屏蔽掉。
       通过上述设置,页面的部分内容已经显示中文,这是“ecommerce/conf/locale/zh_CN/LC_MESSAGES”内的文件发挥了作用。但该目录内以”po“后缀结束的文件为汉化文件,但汉化的比例较少,下一步要加大汉化的程度。
source venvs/ecommerce/bin/activate
source ecommerce_env
#下面这条命令将执行语言文件的编译
python manage.py compilemessages –settings=ecommerce.settings.production
      当要对增加翻译(汉化)时,修改相应的po文件。对于汉化的过程就是修改”ecommerce/conf/locale/zh_CN/LC_MESSAGES/django.po”文件内部的内容,修改后还需要运行上述的命令,将扩展名为po的文件翻译为扩展名为mo的文件,然后重启相应的服务。
二、对新增代码的汉化和本地化
1、对代码内容的汉化
       如果需要汉化的内容涉及到了新的代码,则需要引入翻译类:
from django.utils.translation import ugettext as _
       例如作者在对Ecommerce扩展支付宝功能时,发现需要将’alipay’翻译为’支付宝’,这个显示问题在类似于如下URL时会遇到:
      并在具体的代码处使用类似如下的内容(样例):
#ecommerce/extensions/checkout/views.py
        context.update({
            ‘payment_method’: _(self.get_payment_method(order)),     #进行翻译的部分
            ‘display_credit_messaging’: self.order_contains_credit_seat(order),
        })
#self.get_payment_method(order)实际返回的的时支付处理模块的字段,实际内容为’alipay’。加上_( )这个函数用来完成实际的翻译
2、时间显示的本地化
      对于默认的模板,很多日期的显示都采用国外通用的模式,格式为月日年。对于2018年10月5日,实际显示的为“October 05, 2018″。对代码浏览后发现,Django在系统内使用了同一种时间格式,只是在显示的时候使用了”过滤器(filter)”将相应的显示方式进行了转换。在”收据”页面中,就有类似的问题,修改方式也很简单,将过滤器的格式调整下即可完成。
#ecommerce/templates/edx/checkout/receipt.html
              <dt>{% trans “Order Date:” %}</dt>
              <dd>{{ order.date_placed|date:”E d, Y” }}</dd>                    #将其改为data:”Y-m-d”,关于Y、E等字符的定义可查看django文档
            </dl>
#修改为这种方式就会显示为2018-01-02的方式,更容易阅读

发表评论

电子邮件地址不会被公开。 必填项已用*标注