續上篇django i18n 實戰,筆者作了一些小實驗,以方便中文翻譯的進行。
整段文章中文化
在前篇提到的使用django.po 來編修翻譯的方法,在此處便不太適用。
因為這類文字時常修修補補,非常不易維護。
目前使用的解決方法,使用不同locale目錄來放置不同語言版本template。
en | test.html test2.html |
zh-tw | test.html test2.html |
取得目錄及template名稱
from django.utils import translation def getLocaleResourcePathName(templateName): cur_language = None try: cur_language = translation.get_language() except: logger.exception('getLocaleResourcePath') if cur_language == 'zh-tw': return "%s/%s" % (cur_language, templateName) return “en/%s” % templateName |
在javascript中需翻譯的文字
解法1: 為將瀏灠器目前所使用的語系,存入cookie中,以便javascript實作中文化。
def setLangCookie(request): params = {} c = Context(params) t = loader.get_template(pageForJS) response = HttpResponse(t.render( c )) try: cur_language = translation.get_language() response.set_cookie('lang', cur_language) except: logger.exception('set_cookie') return response |
解法2: 同上一解法為將所需要翻譯文字集中至同一檔案,依瀏灠器目前所使用的語系,代換為i18n.js所在路徑。
簡易bash腳本檔案i18n.sh
續前篇,將相關命令包裝為腳本檔以方便使用。
如: sh i18n.sh u
(即更新django.po檔案,附加新增文字)
#!/bin/sh ACTION="$1" TARGET="$2" usage() { echo "syntax: } case $ACTION in initial) django-admin.py makemessages -l zh_TW "$TARGET" ret=$? ;; u*|update) django-admin.py makemessages -a ret=$? ;; c*|compile) django-admin.py compilemessages ret=$? ;; *) usage ret=1 ;; esac exit $ret |
備註:其中django-admin.py,如使用環境在Mac OS X 使用brew install gettext卻找不到xgettext 和 msgfmt相關檔案時,請使用下列命令產生正確連結:
brew link gettext
沒有留言:
張貼留言