把django的这篇文档看了一遍,基本弄懂了,讲的也挺详细的 https://docs.djangoproject.com/en/1.6/topics/i18n/

首先是国际化和本地化概念:

1,国际化

这是程序员做的工作,在代码中,模板中,做好相应的准备

1.1代码中

使用,  ugettext或者ugettext_lazy

from django.utils.translation import ugettext  as _

在代码中对需要进行翻译的字符串,通常是英文,使用这个函数

result.error = _(u'Invalid Captcha')

然后这个字符串就会被翻译为我们需要的语言, 翻译后的结果还是一个普通的字符串,没什么区别

只是在这里, _(u'Invalid Captcha') 已经不是原来的字符串了,这个函数返回了一个对象.  Trans()类对象,具体去看django.utils.translation模块源代码吧

1.2模板中

要注意,代码中翻译的字符串,可能是用来填充模板的,也可能是比如Ajax接口的返回结果.

如果我们要直接翻译模板中的字符串,那么使用django template的这两个tags :  trans 和 blocktrans

比如

<title>{% trans 'This is the title' %}</title>

那blocktrans用于, 混合了字符串和变量的翻译.

[注意]在模板中使用了 trans 或 blocktrans时

要在开头加

{% load i18n %}

不然会报错

2,  本地化

本地化是翻译做的工作,把原语言的目标翻译写出来

那首先我们要使用一个工具,在app的根目录或整个工程的根目录,运行

django-admin.py  makemessages -l zh_CN

会生成如下的一个文件目录

locale/
├── zh_CN
│   └── LC_MESSAGES
│   ├── django.mo
│   └── django.po

zh_CN指简体中文, 每种语言都有自己的目录,在django中,每个语言都有自己的LANGUAGE_CODE

这时候打开django.po, 内容格式如下

#: views.py:169
msgid "Invalid CAPTCHA"
msgstr "" #: templates/login.html: 15
msgid "This is the title"
msgstr ""

把msgstr填上我们的翻译

然后运行另一个命令

django-admin.py  compilemessages

就生成了编译好的django.mo,是个二进制文件,然后就OK了,最终出现的页面就是我们要的中文了

如果我们在代码或模板中增加或删除了相关的国际化代码,需要从新运行

makemessages  和  compilemessages

如果只是改了django.po中的翻译,当然只需 compile 就行了.

重启服务

完成以上之后,需要重启一下django服务

和国际化有关的setting

1,USE_I18N = True/False

有关的代码是这样的,在django.utils.translation的__init__.py中

 class Trans(object);
def __getattr__(self, real_name):
from django.conf import settings
if settings.USE_I18N:
from django.utils.translation import trans_real as trans
else:
from django.utils.translation import trans_null as trans
setattr(self, real_name, getattr(trans, real_name))
return getattr(trans, real_name)

而trans_null其实就没做什么事

2,LANGUAGE_CODE

比如中文是

LANGUAGE_CODE = 'zh_cn'

.po 文件中的 fuzzy str translation

有时候, 用makemessages生成的.po文件中有些msgid会被标记为 fuzzy

比如

#: models.py:35
#, fuzzy
msgid "hdapp_leader"
msgstr "领队"

这是因为对于 "hdapp_leader",  msgmerge工具认为这个和之前的一个msgid很相似,这个翻译可能不靠谱,于是标记fuzzy; msgfmt就会把这个msgid给略过,也就是这个翻译不会生效,当然如果我们确认是对的, 就手动删掉那行fuzzy,重新compilemessages就好.

------------

下一篇

探讨ugettext和ugettext_lazy的区别

blocktrans

Django国际化和本地化的更多相关文章

  1. Django 国际化和本地化

    所谓的国际化,是指使用不同语言的用户在访问同一个网站页面时能够看到符合其自身语言的文本页面. 国际化的基本原理是: 浏览器通过LANGUAGE_CODE在HTTP请求头中告诉网站后台服务器用户所需要的 ...

  2. django框架项目 国际化和本地化的实现方法

    转自 https://blog.csdn.net/scissors0707/article/details/79042458 Django国际化 所谓的国际化,是指使用不同语言的用户在访问同一个网站页 ...

  3. 第六章:Django 综合篇 - 18:国际化和本地化

    所谓的国际化,是指使用不同语言的用户在访问同一个网站页面时能够看到符合其自身语言的文本页面. 国际化的基本原理是: 浏览器通过LANGUAGE_CODE在HTTP请求头中告诉网站后台服务器用户所需要的 ...

  4. Orchard 源码探索(Localization)之国际化与本地化

    本地化与国际化 基本上相关代码都在在Orchard.Framework.Localization中. T("english")是如何调用到WebViewPage.cs中的Local ...

  5. .NET:国际化和本地化

    .NET:国际化和本地化 背景 国际化(i18n)和本地化(l10n)是高端程序的必备技术,可惜从业五年从没有尝试过,下一步准备做一个多用户的博客系统,想支持多语言,今天就学习了一下,写出来,希望大家 ...

  6. IOS软件国际化(本地化Localizable)

    IOS软件国际化(本地化Localizable) iPhone是支持语言最多的手机,它支持各国语言及中国少数名族如蒙古等语言,这也是好多少数名族都用苹果的原因.在这一点上我们自主品牌还是要多学习学习. ...

  7. Spring MVC 的国际化和本地化

    国际化: i18n 本地化: l10n java.util.Locale 类表示一个语言区域.一个 Locale 对象包含 3 个主要元件:language.country.variant java. ...

  8. iOS: 设置App的国际化和本地化

    原文链接:http://www.cocoachina.com/appstore/20160310/15632.html 前言 App的名字设置方式有很多种,如果在App打包上线时不做修改,最终App的 ...

  9. 【转】iOS 设置APP的名称(浅述APP版本国际化与本地化)

    原文网址:http://www.jianshu.com/p/a3a70f0398c4 前言 App的名字设置方式有很多种,如果在App打包上线时不做修改,最终App的名字就是Xcode在建立工程时的名 ...

随机推荐

  1. Kettle 4.2源码分析第二讲--Kettle插件结构体系简介

    1.  插件体系结构 1.1. 插件技术原理 1.1.1.    插件概念说明 插件是一种遵循统一的预定义接口规范编写出来的程序,应用程序在运行时通过接口规范对插件进行调用,以扩展应用程序的功能.在英 ...

  2. bzip2 zip 压缩后体积比 0.8:1

    1. 对.bz2 后缀文件 跳过不处理 2.逐行同字段的json文件,压缩后大小为原文件的12.81% 测试文件近似认为为逐行json文本数据,没有进行多文件重复测试,没有统计时间: {"u ...

  3. Java GUI程序设计

    在实际应用中,我们见到的许多应用界面都属于GUI图形型用户界面.如:我们点击QQ图标,就会弹出一个QQ登陆界面的对话框.这个QQ图标就可以被称作图形化的用户界面. 其实,用户界面的类型分为两类:Com ...

  4. mysql python pymysql模块 增删改查 查询 fetchone

    import pymysql mysql_host = '192.168.0.106' port = 3306 mysql_user = 'root' mysql_pwd = ' encoding = ...

  5. mysql 权限管理 针对库 授权 db.*

    需求 只放行user表 db1库的select权限 mysql> grant select on db1.* to 'mike'@'localhost'; Query OK, rows affe ...

  6. APICloud-端JS库功能API文档(1)

    框架简介: 框架基于APICloud官网端API进行扩展和封装,框架完全采用面向对象编程形式,里面包含APP所使用的常用js功能:js类的自定义(类,构造方法,静态方法,继承...),常用工具函数(验 ...

  7. 简单的应用可以用storyBoard

    可是问题,你不知道你的项目有多复杂,storyBoard跳转控制有代码这么灵活吗? 1. 假是是根据推送来推出页面呢? 2. 假如我要根据不同情况不停地推出不同的页面呢?storyBoard怎么确定关 ...

  8. SQL中常见语句

    SQL中常见语句笔记: --替换字段中的回车符和换行符 ) ), '') --删除表命令 DROP TABLE [dbo].[MGoods_Test] --删除表中数据命令 DELETE FROM [ ...

  9. NLP总览

    一.自然语言处理概述 1)自然语言处理:利用计算机为工具,对书面实行或者口头形式进行各种各样的处理和加工的技术,是研究人与人交际中以及人与计算机交际中的演员问题的一门学科,是人工智能的主要内容. 2) ...

  10. 将Mongo装为Windows的服务

    PHP的mongo扩展: 首先 下载一个PHP的mongo扩展, 地址:http://download.csdn.net/detail/qq_36387589/9819259 然后修改php.ini. ...