如何进行openstack horizon的国际化分析

92次阅读
没有评论

共计 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 的国际化分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3145字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)