LANGUAGE_CODE[1]

LANGUAGE_CODE 是 language code 的字符串。格式与 Accept-Language HTTP header 相同,不区分大小写,比如:zh, es, zh-hans。所有的 language codes 见 http://www.i18nguy.com/unicode/language-identifiers.html

Django LANGUAGE_CODE 有两个作用:

  • 如果没有设置 locale 中间件,那么这个用于给所有用户提供翻译。适用于只需要一种翻译的情况
  • 如果设置了 locale 中间件,那么作为翻译的后备物品,用于没有匹配到语言的情况

LocaleMiddleware 决定用户语言的算法,顺序为 URL 语言前缀、session、cookie、Accept-Language HTTP 头部,最后是 LANGUAGE_CODE[2]。

注意:Django 的 LANGUAGE_CODE 是不区分大小的,但第三方 APP 就不一定了,比如 django-ckeditor 只有在 LANGUAGE_CODE 为 zh-hans 时翻译才会生效,所以它是区分大小写的。

寻找翻译的算法

在运行时,Django 会构建一个在内存中的、统一的文字翻译目录。依次在以下路径中加载信息文件(.mo)以及对同一字符串的翻译优先级如果对统一字符串存在多个翻译:

  • LOCALE_PATHS 有最高优先级,在 LOCALE_PATHS 中出现在前面的优先级更高。
  • 然后查看 INSTALLED_APPS 中各个 APP 目录下的 locale/,也是在前面的 APP 优先级高
  • 最后,django/conf/locale 作为后备

存放翻译文件的目录名为 locale name。在我看来就是将对应的 language code 的 - 替换为 _。比如 language code zh-Hans 的 locale name 为 zh_Hans。这点可以在 Django 自己的翻译中得到验证,比如 env/lib/python3.6/site-packages/django/conf/locale/zh_Hans

替换虚拟环境中第三方 APP 的翻译

我将第三方 APP 的替代翻译放在 LOCALE_PATHS 中,但只有在 env/ 在和 manage.py 同目录的情况下才能生效。不清楚这样的原因,因为按照上面的算法,LOCALE_PATHS 的优先级是最高的。

目前采用的办法是,fork 该第三方 APP,然后将翻译直接放到第三方 APP 的 locale 中,然后使用 submodule 安装 fork 后的第三方库。

参考

  1. https://docs.djangoproject.com/en/2.0/ref/settings/#std:setting-LANGUAGE_CODE
  2. https://docs.djangoproject.com/en/2.0/topics/i18n/translation/#how-django-discovers-language-preference

Django 翻译与 LANGUAGE_CODE的更多相关文章

  1. 《Django By Example》第九章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag 注:哈哈哈,第九章终于来啦 ...

  2. [python][django学习篇][4]django完成数据库代码翻译:迁移数据库(migration)

    上一篇我们已经完成数据库的设计,但是仅仅是python语言,并没有真正创建了数据库表.翻译成数据库语言,真正创建数据库表由django manage.py来实现,这一过程专业术语:迁移数据库 切换到m ...

  3. 让django完成翻译,迁移数据库模型

    声明:此Django分类下的教程是追梦人物所有,地址http://www.jianshu.com/u/f0c09f959299,本人写在此只是为了巩固复习使用 上篇我们完成了数据库模型的代码,但是还只 ...

  4. Python攻关之Django(一)

    课程简介: Django流程介绍 Django url Django view Django models Django template Django form Django admin (后台数据 ...

  5. python 学习笔记十六 django深入学习一 路由系统,模板,admin,数据库操作

    django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ ...

  6. Django 基础(一)

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...

  7. django中的filter详解

    filter (数据过滤) 我们很少会一次性从数据库中取出所有的数据:通常都只针对一部分数据进行操作. 在Django API中,我们可以使用`` filter()`` 方法对数据进行过滤: > ...

  8. Python之路,Day14 - It's time for Django

    Python之路,Day14 - It's time for Django   本节内容 Django流程介绍 Django url Django view Django models Django ...

  9. django模型——数据库(二)

    模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...

随机推荐

  1. 虚拟机下安装centos7方法,修改系统语言为简体中文的方法

    说明 自己装系统时一般都可以自定义选择系统语言.可是云端服务器一般都是安装好的镜像,默认系统语言为英文,对于初学者可能还会有搞不懂的计算机词汇.这里简单说一下centos7怎么修改系统语言为中文. 虚 ...

  2. 0062 Spring MVC的文件上传与下载--MultipartFile--ResponseEntity

    文件上传功能在网页中见的太多了,比如上传照片作为头像.上传Excel文档导入数据等 先写个上传文件的html <!DOCTYPE html> <html> <head&g ...

  3. Windows 8.1下安装Mac OS X 10.8虚拟机

    转载自http://blog.csdn.net/jordanxinwang/article/details/43637799 1.准备 宿主操作系统:Windows 8.1 64位.特别地,需要CPU ...

  4. LinkQ 组合查询与分页

    1.以开头查 public List<Car> Select1(string a){ return con.Car.Where(r => r.Name.StartsWith(a)). ...

  5. OpenERP 7 picking order 继承需要注意的地方

    stock.picking.out  和 stock.picking.in 都是继承自stock.picking 新添加columns时需要注意,在stock.picking.out和stock.pi ...

  6. [Application]Ctrl+C终止程序代码

    代码如下: #include <stdio.h> #include <stdlib.h> #include <iostream> #include <sign ...

  7. Mac下修改应用程序的菜单快捷键!

    点击左上角苹果按钮,系统偏好设置 > 键盘 > 快捷键 > 应用快捷键 点击右下角添加按钮,选择chrome程序,输入菜单中文名以及快捷键 1.如何用F5刷新 鼠标悬停在左上角的刷新 ...

  8. HDFS Federation客户端(viewfs)配置攻略

    转自:http://dongxicheng.org/hadoop-hdfs/hdfs-federation-viewfs/ 1. HDFS Federation产生背景 在Hadoop 1.0中,HD ...

  9. /sys/kernel/debug/gpio

    在使用GPIO的时候,有时候不知道GPIO的状态,也不知道在内核中GPIO是否申请成功. 可以通过/sys/kernel/debug/gpio这个文件来查看.这个文件显示了申请成功的GPIO的输入输出 ...

  10. C++之拷贝构造函数、深拷贝、浅拷贝

     C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...