【django 学习笔记】18-国际化

Django 的国际化挂接是默认 开启的, 这可能会给Django 的运行增加一点点开销。 如果您不需要国际化支

, 那么您可以在您的设置文件中 设置 USE_I18N = False 。 如果 USE_I18N 被设为 False , 那么Django

进行一些优化, 而不加载国际化支 持机制。

对你的Django 应用进行国际 化的三个步骤:

1. 第一步: 在你的Python 代码和模板中嵌入待翻译的字符串。

2. 第二步: 把那些字符串翻译成你要支持的语言。

3. 第三步: 在你的Django settings 文件中激活本地中间 件。

如何指定待翻译字符串

标准 翻译

在下面这个例子中, 文本 “Welcome to my site” 被标 记为待翻译字符串:

from django.utils.translation import ugettext as _

def my_view(request):

output = _(“Welcome to my site.”)

return HttpResponse(output)

显然, 你也可以不使用别名来编 码。 下面这个例子和前面两个例子相同:

from django.utils.translation import ugettext

def my_view(request):

output = ugettext(“Welcome to my site.”)

return HttpResponse(output)

标 记字 符串为不 操作

使用 django.utils.translation.gettext_lazy() 函数, 使得其中的值只 有在访问时才会被翻译, 而不是在gettext_lazy() 被调用时翻译。

惰 性 翻译

使用 django.utils.translation.gettext_lazy() 函数, 使得其中的值只 有在访问时才会被翻译, 而不是在gettext_lazy() 被调用时翻译。

复数的处理

使用django.utils.translation.ungettext() 来 指定以复数形式表示的消息。

模板代码

为了使得模板访问到标签, 需要将{% load i18n %} 放在模板最前 面。

这个{% trans %} 模板 标记翻译一个常量字符串 ( 括以单或双 引号) 或 可变内容:

<title>{% trans “This is the title.” %}</title>

<title>{% trans myvar %}</title>

与惰性翻译对象一道工作

拼接字符串: string_concat()

allow_lazy() 修 饰符

创建语言文件

信息文件是包含了某一语言翻译字符串和对这些字符串的翻译的一个文本文件。 信息文件以 .po 为后缀名。

django-admin.py makemessages -l de

这段脚本应该在三处之一运行:

  • Django 项目根目录。
  • Django 应用的根目录。
  • django 根目录( 不是Subversion 检出目录, 而是通过 $PYTHONPATH 链接或位于该路径的某处) 。这仅和你为Django 自己创建一个翻译时有关。

作为默认, django-admin.py makemessages 检测每一个有 .html 扩展名的文件。 以备你要重载缺省值, 使用 –extension -e 选项指定文件扩展名来检测。

django-admin.py makemessages -l de -e txt

用逗号和() 使用-e–extension 来分隔多项扩展名:

django-admin.py makemessages -l de -e html,txt -e xml

当创建JavaScript 翻译 目录时, 你需要使用特殊的Django:not -e js

.po 文件格式很直观。 每个 .po 文件包含一小部分的元数据, 比如翻译维护人员的联系信息, 而文件的大部分内容是简单的翻译字符串和对应语言 翻译结果的映射关系的列表。

若要对新创建的翻译字符串校验所有的源代码和模板, 并 且更新所有语言的信息文件, 可以运行以 下命令:

django-admin.py makemessages -a

编译信息文件

这个工具作用于所有有效的 .po 文 件, 创建优化过的二进制 .mo 文件供 gettext 使用。在你可以运行django-admin.py makemessages 的 目录下, 运行django-admin.py compilemessages:

django-admin.py compilemessages

就是这样了。 你的翻译成果已经可以使用了。

Django 如何处理 语言偏好

如果要让每一个使用者各自指定语言偏好, 就 需要使用 LocaleMiddleware LocaleMiddleware 使 得Django 基于请求的数据进行语 言选择, 从而为每一位用户定制内容。 它为每一个用户定制内容。使用 LocaleMiddleware 需要在 MIDDLEWARE_CLASSES 设置中增加‘django.middleware.locale.LocaleMiddleware’ 。 中间件的顺序是有影响的, 最 好按照依照以下要求:

  • 保证它是第一批安装的中间件类。
  • 因为 LocalMiddleware 要 用到session 数据, 所以需要放在 SessionMiddleware 之后。
  • 如果你使用CacheMiddleware,LocaleMiddleware 放在它后面。

LocaleMiddleware 按 照如下算法确定用户的语言:

  1. 首先, 在当前用户的 session 的中查找django_language;
  2. 如未找到, 它会找寻一个cookie
  3. 还找不到的话, 它会在 HTTP 请求头部里查找Accept-Language , 该头部是你 的浏览器发送的, 并且按优
  4. 先顺序告诉服务器你的语言偏好。 Django 会 尝试头部中的每一个语种直到它发现一个可用的翻译。
  5. 以上都失败了的话, 就使用全 局的 LANGUAGE_CODE 设 定值。

在你自己的项目中使用翻译

set_language 重 定向视图

方便起见,Django 自带了一 个 django.views.i18n.set_language 视图, 作用是设置用户 语言偏好并重定向返回到前一页面。

URLconf 中加入下面这行 代码来激活这个视图:

(r’^i18n/’, include(‘django.conf.urls.i18n’)),

翻译与JavaScript

使用JavaScript 翻 译目录

创建JavaScript 翻 译目录

django-admin.py makemessages -d djangojs -l de

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习Django时,使用PyCharm作为开发工具可以提高效率。PyCharm是一款功能强大的Python集成开发环境,它提供了丰富的功能和工具,可以帮助开发者更好地编写和调试Django应用程序。 在学习Django的过程中,可以使用PyCharm创建Django项目,并使用其内置的Django支持功能来简化开发过程。PyCharm可以自动识别Django项目的结构,并提供代码补全、语法检查、调试等功能,帮助开发者更快地编写和调试代码。 此外,PyCharm还提供了集成的版本控制系统,如Git,可以方便地管理和追踪代码的变化。它还支持自动化测试和部署,可以帮助开发者更好地进行项目管理和发布。 总之,使用PyCharm作为开发工具可以提高Django学习的效率和便利性。它的强大功能和友好的用户界面使得开发者可以更专注于代码的编写和项目的开发。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* *3* [PyCharm平台下初学Django框架](https://blog.csdn.net/howard2005/article/details/93491364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [pycharm平台下的Django教程](https://blog.csdn.net/Sunshine_ZCC/article/details/73918408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值