zoukankan      html  css  js  c++  java
  • django 国际化

    参考文档:

    配置 settings

    MIDDLEWARE = [
       'django.contrib.sessions.middleware.SessionMiddleware',
       'django.middleware.locale.LocaleMiddleware',  # LocaleMiddleware 中间件需要放在 sessions 中间件之后和 common 中间件之前
       'django.middleware.common.CommonMiddleware',
    ]
    
    TEMPLATES = [
        {
            # BACKEND 要使用的模板后端。还有一个 'django.template.backends.jinja2.Jinja2'
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            # DIRS 包含搜索顺序的序列,搜索引擎会按照这个顺序查找 template 资源文件
            'DIRS': [
                os.path.join(BASE_DIR, 'templates').replace('\', '/'),  # 设置项目根目录模板路径
            ]
            ,
            'APP_DIRS': True,  # Templates 引擎是否应该在已安装的 app 中查找 Template 源文件
            'OPTIONS': {
                'context_processors': [
                    "django.template.context_processors.i18n",  # 模板国际化
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.template.context_processors.media',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    # LANGUAGE_CODE = 'en-us'
    LANGUAGE_CODE = 'zh-hans'
    
    # UTC 世界统一时间
    # TIME_ZONE = 'UTC'
    TIME_ZONE = 'Asia/Shanghai'
    
    USE_I18N = True  # 启用国际化
    
    USE_L10N = True
    
    
    # 国际化语言种类
    from django.utils.translation import gettext_lazy as _
    
    LANGUAGES = [
        ('en', _('English')),
        ('zh-Hans', _('中文简体')),
    ]
    
    # 国际化翻译文件目录
    LOCALE_PATHS = [
        os.path.join(BASE_DIR, 'locale'),  # 翻译文件所在目录,请手动创建目录
    ]
    

      

    安装 gettext

    Django 框架具有很好的 I18N 和 L10N 的支持,其实现是基于 GNU 的 gettext, 所以要想在 Django 中使用 I18N 还需要先安装配置 gettext。

    windows gettext 下载地址:

    https://mlocati.github.io/articles/gettext-iconv-windows.html

    exe 包安装时会默认加入到环境变量(提醒:已打开的 cmd 或 控制台,后加入的环境变量不会生效,需要重启咯),如图:

     Mac 安装 gettext 使用 brew 安装:(CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 意思是提示需要安装 gettext)(注:Mac 解决 Homebrew 一直卡在 update

    brew install gettext
    
    brew link gettext --force
    

      

    生成需要翻译的文件

    python manage.py makemessages -l zh_Hans
    
    python manage.py makemessages -l zh_Hans 
    # 结果
    processing locale zh_Hans
    

    运行成功后会生成一个 django.po 文件( LOCALE_PATHS 对应语言目录下 - 具体看下图,这个里面就是我们手动写翻译的地方)

    django.po 文件:

    如果执行命令:python manage.py makemessages -l zh_Hans(第二个 H 大写)

    msgid: 需要翻译的文案

    msgstr: 翻译后的文案

    在代码中看到:_("这种就是国际化的标志,我们只需要翻译下就 OK")

     

    最后一步就是 编译

    编译成功后会在 django.po 的对应目录生成 django.mo 文件

    python manage.py compilemessages
    

      

    实践效果图

    其他用途

    • 把三方库某些显示的文案翻译成本地语言,而不用修改源代码。
  • 相关阅读:
    Linux下如何从mysql数据库里导出导入数据
    安装好Pycharm后如何配置Python解释器简易教程
    Windows离线安装Python第三方库的方法
    时间输入框的测试方法
    doc转html
    pdf转png图片
    html转pdf
    html转pdf
    复习 注解反射
    Mybatis实现插入数据的时候将主键赋值给对象的两种方法
  • 原文地址:https://www.cnblogs.com/lanheader/p/13615689.html
Copyright © 2011-2022 走看看