Django国际化

不同的网站有可能被不同国家地区的人访问,为了让不同的国家或者地区的人有更好的客户体验,对web程序进行国际化设置就很有必要了。

1.Django进行国际化的机制

以下是我的目录树:

我这里创建了一个internationlization的项目,然后在项目下面创建了一个被称为translation的应用程序。我们要进行国际化,首先要通过django.utils.translation包里面的方法定义需要进行国际化的字符串,比如我用的是ugettext_lazy ,通过函数包装并返回可供国际化使用的字符。然后需要在translation目录下面增加一个locale目录,一定要手动创建这个目录不然后面的编译不能通过。

可以在models.py, view.py 甚至再模板处定义翻译字符串,以下是我的models.py的内容。(这里运用了as语句进行了别名定义)

然后在translation目录下运行命令

django-admin makemessages -l zh_CN

生成翻译字典(django.po文件),我上面一句话表示创建一个中文的语言库(zh_CN)。文件内容如下。我的model定义的国际化字符串有 "name" "my thing" "my things" "This is the help text"

现在查看django.po文件

只需要再msgstr中加入对应的翻译内容。保存即可。

最后回到translation目录,运行

django-admin compilemessages

就会在translation/locale/zh_CN/LC_MESSAGES/目录下生成一个*.mo文件,这个是已经编译好的文件,现在测试一下,我的浏览器语言默认为zh_CN的,所以当我进入admin界面后。

之前设置的‘name‘,  ‘This is a help text‘等都自动翻译成中文了。这就是国际化的基本流程。

通过用内置函数ugettext_lazy之类的函数定义需要进行国际化的字符串,几乎都在django.utils.translation包里,通过在程序所在的目录下新建locale目录,通过makemessage生成相应的数据字典文件(如django.py),最后通过compilemessage进行编译,生成*.mo文件,会根据浏览器不同的语言设定显示不同的语言,实现程序国际化。

2.模板定制

除了进行model.py view.py 等python源文件进行国际化定制之外还可以通过在模板上进行相应的设置进行国际化设置。比较基本的有两个标签。

从一开始的截图可以知道,我们一般会把模板放在项目根目录下创建的templates然后通过settings.py设置模板路径。进行模板搜索。这里不详细说,对于要进行国际化定制的模板,首先需要在模板最上方加入{% i18n %}表示要加入国际化定制的标签。

然后对需要进行定制的字符串采用{% trans "XXXXX" %} 进行最为基本的定制。另外还可以通过 {% blocktrans %}XXXXXX {% endblocktrans %}标签进行定制,两者之间的不同的地方是,后者可以在定义的字符串中引入变量,作为占位,显示的时候再引入变量的值。

接下来的做法跟前面一样,不过这次需要在项目的根目录下进行相应的操作,1.创建locale 目录,2.po文件生成3编译。

其实有了这一步,可以把之前的在translation目录里面的国际化操作给省去,我测试过,如果之前已经对应用程序进行国际化操作的话,这里生成的po文件将不会包含在之前在应用程序里面定义的字符串。其实可以把之前的locale目录删掉,在这里一步进行所有定制。不过如果考虑到分开维护要好一点,也可以分开进行字典的维护,个人喜好吧。

不过这里有一个问题:

进行了一系列操作之后,在根目录templates文件夹的国际化失败(无法翻译),对应的文件读不到。这个时候需要在settings.py中加入这么一句代码。

表示要加载locale目录然后。。。。。。就可以了。

下面是我根据IBM 的一个文档例子作为测试的结果 链接如下

http://www.ibm.com/developerworks/cn/web/1101_jinjh_djangoi18n/

根据下拉框选择的语言进行翻译。

完。。。

时间: 2024-10-27 01:02:42

Django国际化的相关文章

Django国际化注意事项

涉及两部分内容: py/html文件国际化.外部js文件国际化 步骤 1. settings.py 激活相应的配置 2. 针对py文件,需要注意被翻译代码的编写方式 3. 针对html文件,需要注意被翻译字符的编写方式 4. 外部脚本js,包含一些交互提示信息,国际化版本需要翻译这些信息.要实现web标准化,我们首先必须实现HTML页面结构.行为.样式的分离.如何不改变外部脚本的引入方式,同时实现外部脚本国际化的问题?django提供了针对外部脚本国际化的解决方案! 一.settings.py配

Django 国际化和本地化

他分为models, views和模版(templates)三处的英文转化. 首先settings 增加一个locale的中间件 增加LANGUAGES 增加LOCALE_PATHS 并且手动创建locale文件夹 在模板中增加如下标签 执行 python manage.py makemessages -l en 会生成如下文件 修改django.po文件,增加翻译的文字 修改url ,此url文件必须是项目的根url那个文件. 重启服务器 访问 http://192.168.119.54:80

Django:之安全、国际化和session

Django 安全 以下是关于Django安全的一些特征,它包括如何使基于Django的网站的一些建议. 关于安全的官方文档:https://docs.djangoproject.com/en/dev/#security 官方文档包括以下几个方面: Security overview Disclosed security issues in Django Clickjacking protection Cross Site Request Forgery protection Cryptogra

Django分析之国际化处理

最近在公司终于开始做web开发了,本以为会是简单的首页之类的小规模项目,结果上来就是一个处理大数据分析的项目,一个关于油品分析的系统,不过我接到的第一个任务是做这个网站的国际化处理,虽然项目还没有上线,还差的很多,但是国际化这个东西使用的是Django自带的来处理的,所以在一边写项目的时候就要写好国际化的代码,所以我现在就开始处理我的国际化了. 大家可以在Django Doctment上看官方的说明,我在这里就不复制官方文档了,django框架带有完善的I18N和L10N支持,其实现是基于GNU

Django rest_framework 实用技巧

前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用法 1 #################################################################### 2 ########安装和简单使用 3 ###### 准备工作 4 pip install rest_framework # 安装 5 6 INSTALL

Vue ---- ajax cookies 插件安装 跨域问题 element-ui bootscript 导入

目录 补充: 流式布局样式 Django国际化配置 Django的TODO注释 Vue的ajax插件:axios 安装 配置 如何使用? Vue的cookies插件:cookies 安装: main.js配置 使用 跨域问题(同源策略) 后台处理跨域问题 element-ui插件安装 补充:bootscript导入 配置jQuery 配置BootSript 补充: 流式布局样式 .xxx{ width: 90vh; /* 屏幕宽度 */ height: 100vh; /* 屏幕高度 */ } D

Django的文本国际化

1.表示需要翻译的文本:在python原文件和HTML等模板文件中都可以标识需要翻译的文本,在python源文件通过_()或者ueettext()函数表达需要翻译的需求.在模板文件中,用{%trans %}标签表达翻译需求. 2.创建语言文件:语言文件是Django找那个用于保存翻译关系的文件,网站应该为每种支持的语言建立一个语言文件,建立语言文件的方法是在项目根目录中执行如下命令: django -admin makemessages -l zh_CN 该条命令会在当前目录及子目录的pytho

django 进行语言的国际化及在后台进行中英文切换

项目的部署地为: 中国大陆与美国东海岸, 两个地区的服务器数据不进行同步, 中国地区的服务器页面展示中文, 美国地区的服务器页面展示成英文, 项目后台使用python编程语言进行开发, 并结合django框架进行版本迭代. 这里对项目的国际化进行配置说明: 一.在配置文件settings.py中: 1) 开启国际化功能 # 语言, 先设置成中文 LANGUAGE_CODE = 'zh-hans' # 1.8版本之后的language code设置不同, 1.8之前是LANGUAGE_CODE =

Django1.9开发博客(12)- i18n国际化

国际化与本地化的目的为了能为各个不同的用户以他们最熟悉的语言和格式来显示网页. Django能完美支持文本翻译.日期时间和数字的格式化.时区. 另外,Django还有两点优势: 允许开发者和模板作者指定他们哪些app应该被翻译或被格式化为本地形式. 允许用户根据自己的偏好来实现本地化显示.翻译依据语言,格式化依据国家, 这些信息由浏览器中的Accept-Language头来决定.不过目前为止时区还未能实现. 参考官方文档:https://docs.djangoproject.com/en/1.9