Django国际化

  • 什么是国际化

    ​ i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件等)无需做大的改变就能够适应不同的语言和地区的需要。对程序来说,在不修改内部代码的情况下,能根据不同语言及地区显示相应的界面。 在全球化的时代,国际化尤为重要,因为产品的潜在用户可能来自世界的各个角落。通常与i18n相关的还有L10n(“本地化”的简称)

  • 怎么使用国际化?

    • 打开配置文件 settings.py

      USE_I18N = True
      
    • 添加locale中间件,一般按照以下方式安装

      MIDDLEWARE = [
          'django.contrib.sessions.middleware.SessionMiddleware',
          'django.middleware.locale.LocaleMiddleware',
          'django.middleware.common.CommonMiddleware',
      ]
      
    • 语言

      LANGUAGES = (
          ('en-us', ('英文')),
          ('zh-hans', (u"中文")),
      )
      
    • 配置国际化文件的路径

      LOCALE_PATHS = (
          os.path.join(BASE_DIR, 'locale'),
      )
      
    • 在模版上下文配置

      TEMPLATES = [
          {
              'BACKEND': 'django.template.backends.django.DjangoTemplates',
              'DIRS': [os.path.join(BASE_DIR, 'templates')]
              ,
              'APP_DIRS': True,
              'OPTIONS': {
                  'context_processors': [
                      'django.template.context_processors.debug',
                      'django.template.context_processors.request',
                      'django.contrib.auth.context_processors.auth',
                      'django.contrib.messages.context_processors.messages',
                        # 添加i18n 
                        'django.template.context_processors.i18n',
                  ],
              },
          },
      ]
      
    • 开始国际化

      1. 在需要国际化的地方导入一个包
          from django.utils.translation import gettext_lazy as _  
      2. 在需要国际化的地方使用   _()进行国际化
          例如  _(u"登录")
      3. 如果网页中也有中文, 前端/网页需要配置网页前面加载一个i18n
          {% load i18n %}
      修改中文的部分为
      <h1>{{ _('欢迎登录') }}</h1> 或  <h1>{% trans '欢迎登录' %}</h1>   两个写法等价
      
    • 生成国际化文件(注意:如果语言中是横线,要改为下划线)

       #生成英文
      python manage.py makemessages -l en_us
       #生成中文
      python manage.py makemessages -l zh_hans
      
    • 翻译完毕以后对po文件进行编译,否则没法国际化

      python manage.py compilemessages
      

results matching ""

    No results matching ""