共计 3145 个字符,预计需要花费 8 分钟才能阅读完成。
这篇文章将为大家详细讲解有关如何进行 openstack horizon 的国际化分析,文章内容质量较高,因此丸趣 TV 小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
概念
I18N 国际化,是”Internationalization”的缩写
G11N 全球化,是“Globalization”的缩写
L10N 本地化,是“Localization”的缩写
原理
Django 的翻译机制是使用 GNU gettext (http://www.gnu.org/software/gettext/),具体为 Python 标准模块 gettext。
通过 gettext –version 验证是否可用
开启国际化
openstack_dashboard\setting.py
MIDDLEWARE_CLASSES = (
django.contrib.sessions.middleware.SessionMiddleware ,
django.middleware.locale.LocaleMiddleware , # 需要放在 SessionMiddleware 之后
django.middleware.common.CommonMiddleware ,
)
TEMPLATE_CONTEXT_PROCESSORS = (
django.core.context_processors.i18n , # 启用 i18n
django.contrib.auth.context_processors.auth ,
)
LANGUAGES = ( ( en , English),
(zh-cn , Simplified Chinese)
)
LANGUAGE_CODE = zh-cn # 网站默认语言
LANGUAGE_COOKIE_NAME = horizon_language
USE_I18N = True # 开启 i18n
USE_L10N = True # 开启 l10n
LOCALE_PATHS = [
django_start/locale ,
]
步骤:
TEMPLATE_CONTEXT_PROCESSORS 加入 django.core.context_processors.i18n
MIDDLEWARE_CLASSES 中加入 django.middleware.locale.LocaleMiddleware,注意:
它要放在 SessionMiddleware 和 CacheMiddleware 的后面,其他中间件的前面
LANGUAGE_CODE 设置缺省的网站语言,如 en, zh-cn,it, de-at, es, pt-br
LANGUAGES 设置网站所支持的所有语言,如 ((en , u English),(zh-cn ,u 中文))
USE_I18N 设置为 True
html 中使用
{% load i18n %} # 启用 i18n
title Learning Center {% trans Welcome You %}--Learn Center /title
{% blocktrans %}This will have {{ value }} inside.{% endblocktrans %}
在 {% trans %} 中不允许使用模板中的变量,只能使用单引号或双引号中的字符串。如果翻译时需要用到变量(占位符),可以使用 {% blocktrans %}
py 中使用
from django.utils.translation import ugettext_lazy as _
CONSUMER_CHOICES = ( ( back-end , _( back-end)),
)
可参考:openstack_dashboard/api/cinder.py
js 中使用
urls.py 文件
urlpatterns = [ url(r ^admin/ , include(admin.site.urls)),
url(r ^jsi18n/(?P packages \S+?)/$ , django.views.i18n.javascript_catalog ), # 定义 js 上的 i18n
]
html 文件中
script type= text/javascript src= /jsi18n/django_start+django_i18n /script # 引入 js 文件,多个 app 用 + 分隔
js 文件中
var i18njs = gettext(Welcome # 直接使用全局的 gettext 即可
生成语言
在 django app 目录执行如下命令,将自动检索需要翻译的文件并生成对应的 po 文件
django-admin.py makemessages -l zh_CN #
django-admin.py makemessages -d djangojs -l zh_CN
django.po 和 djangojs.po 文件区别:
py、html 文件中的需要翻译的字符串运行上述命令会自动识别,并添加到 django.po 文件中
外部 js 文件中需要翻译的字符串需要手动创建 djangojs.po 文件,并将翻译字符串写进去
语言编译
语言翻译完成后,通过如下命令将 django.po 和 djangojs.po 编译为.mo 文件
cd horizon django-admin compilemessages
cd openstack_dashboard django-admin compilemessages
编译完成后需要重启项目才能使多语言生效。
语言切换
form action= {% url set_language %} method= post
{% csrf_token %}
input name= next type= hidden value= {{ redirect_to }} /
select name= language
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
option value= {{ language.code }} {% if language.code == LANGUAGE_CODE %} selected= selected {% endif %}
{{ language.name_local }} ({{ language.code }})
/option
{% endfor %}
/select
input type= submit value= Go /
/form
补充 session db
需要用数据库保存 session,在工程目录中执行如下命令产生 django_session。
python manage.py syncdb
确定语言步骤
LocaleMiddleware 按照如下算法确定用户的语言:
1、在当前用户的 session 的中查找 django_language 键;可以通过 LANGUAGE_COOKIE_NAME 改变,比如:LANGUAGE_COOKIE_NAME = horizon_language
2、它会找寻一个 cookie
3、还找不到的话,它会在 HTTP 请求头部里查找 Accept-Language,该头部是你的浏览器发送的,并且按优先顺序告诉服务器你的语言偏好。
Django 会尝试头部中的每一个语种直到它发现一个可用的翻译。
4、以上都失败了的话, 就使用全局的 LANGUAGE_CODE 设定值。
关于如何进行 openstack horizon 的国际化分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。