博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openstack horizon国际化分析
阅读量:5950 次
发布时间:2019-06-19

本文共 2959 字,大约阅读时间需要 9 分钟。

hot3.png

参考

官网国际化介绍:

Django模板(网页多语种支持/国际化):
中文翻译 :

概念

I18N 国际化,是”Internationalization” 的缩写

G11N 全球化,是“Globalization” 的缩写
L10N 本地化,是“Localization” 的缩写

原理

Django的翻译机制是使用 GNU 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',    ]

步骤:

  1. TEMPLATE_CONTEXT_PROCESSORS 加入django.core.context_processors.i18n
  2. MIDDLEWARE_CLASSES中加入django.middleware.locale.LocaleMiddleware,注意:
    它要放在SessionMiddleware和CacheMiddleware的后面,其他中间件的前面
  3. LANGUAGE_CODE 设置缺省的网站语言,如 en, zh-cn,it, de-at, es, pt-br
  4. LANGUAGES设置网站所支持的所有语言,如(('en', u'English'),('zh-cn',u'中文'))
  5. USE_I18N 设置为True

html中使用

{% load i18n %} #启用i18n Learning Center {% trans "Welcome You" %}--Learn Center{% 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
\S+?)/$', 'django.views.i18n.javascript_catalog'), #定义js上的i18n]

html文件中

  #引入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文件区别:

  1. py、html文件中的需要翻译的字符串运行上述命令会自动识别,并添加到django.po文件中
  2. 外部js文件中需要翻译的字符串需要手动创建djangojs.po文件,并将翻译字符串写进去

语言编译

语言翻译完成后 , 通过如下命令将django.po和djangojs.po编译为.mo文件

cd horizon && django-admin compilemessagescd openstack_dashboard && django-admin compilemessages

编译完成后需要重启项目才能使多语言生效。

语言切换

{% csrf_token %}

补充

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 设定值。

转载于:https://my.oschina.net/sannychan/blog/903330

你可能感兴趣的文章
细说JavaScript对象(2):原型对象
查看>>
Sql server在另一台服务器,在Visual Studio 中没问题,IIS中 提示“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。。。。”...
查看>>
Wordpress 所有hoor列表
查看>>
搭建windows的solr6服务器
查看>>
Linux命令(20)linux服务器之间复制文件和目录
查看>>
你知道C#中的Lambda表达式的演化过程吗?
查看>>
聊一聊PV和并发
查看>>
ASCII码表
查看>>
Maven的作用总结
查看>>
設置Linux保留物理內存並使用 (1)
查看>>
Android画一条横线
查看>>
CLOSE_WAIT?项目上线之际遇到这样的烦心事
查看>>
[LeetCode] Nth Digit 第N位
查看>>
通过request读取所有参数
查看>>
JQuery------Select标签的各种使用方法
查看>>
微信开发第7章 通过accesstoken获取用户黑名单列表
查看>>
Vue.2.0.5-Class 与 Style 绑定
查看>>
Java多线程 5 多线程其他知识简要介绍
查看>>
【 Gym - 101138K 】 The World of Trains (DP)
查看>>
kibana显示报错
查看>>