<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Django 實戰:I18N 國際化與本地化配置、翻譯與切換一步到位

      一、國際化與本地化介紹

      定義

      國際化和本地化的目標,是允許一個單一的 Web 應用程序以適合受眾的語言和格式提供其內容。 Django 提供了完整的國際化(i18n)和本地化(l10n)支持。

      • 國際化(i18n) :是指在軟件開發過程中,將軟件設計為可以支持多種語言和文化環境的過程。國際化為本地化準備軟件。通常由開發者完成。
      • 本地化(l10n) :是指將軟件根據特定語言和文化環境進行定制的過程。本地化編寫翻譯和本地格式化。通常由翻譯者完成。

      相關概念

      • 消息文件:消息文件(message file)是一個純文本文件,代表一種語言,它包含所有可用的翻譯字段以及如何以給定語言表示。消息文件擴展名是 .po 文件。

      • 惰性翻譯:gettext_lazy會延遲翻譯計算,直到實際渲染時才會根據當前請求語言動態加載,而 gettext 在模塊加載時即固定翻譯結果

      參考資料:Django 國際化和本地化

      二、安裝配置

      安裝 gettext

      下載地址,下載64位 share 安裝包。雙擊安裝,默認下一步。安裝后檢查是否可識別:

      msguniq --version
      # 上述命令如果在VSCode的終端無法識別,可以在CMD中運行
      

      配置 settings.py

      在 Django 項目的 settings.py 文件中進行如下配置:

      ### I18N 配置
      USE_I18N = True
      LOCALE_PATHS = [BASE_DIR / "locale"]
      LANGUAGES = (
          ("zh-hans", "簡體中文"),
          ("en", "English"),
      )
      
      MIDDLEWARE = [
          # ...
          "django.contrib.sessions.middleware.SessionMiddleware",
          "django.middleware.locale.LocaleMiddleware", # I18N多語言支持,注意放置順序
          "django.middleware.common.CommonMiddleware",
          # ...
      ]
      

      點擊查看完整代碼

      三、使用國際化

      視圖中使用

      視圖中使用:使用函數 gettext() 來指定翻譯字符串。按照慣例,將其作為下劃線( _ )導入,以保存輸入。

      from django.utils.translation import gettext as _
      
      # ...
              # 檢查用戶名與密碼是否正確
              if not user:
                  # 登錄失敗,記錄登錄日志
                  log_data["result"] = LoginResultEnum.BAD_CREDENTIALS.value
                  login_log_task.delay(log_data)
                  return CommonResponse.error(code=111201, msg=_("賬號或密碼錯誤"))
      

      序列化器和模型中使用

      序列化器和模型中使用:使用惰性翻譯函數 gettext_lazy() 來指定翻譯字符串。

      • 序列化器的 error_messages 中直接使用 _() 函數時,Django 會在啟動時立即計算翻譯值(基于默認語言),而非根據請求動態切換。需改用 ugettext_lazy 實現惰性翻譯,使翻譯在運行時根據請求語言動態加載。
      # 示例:序列化器中
      from django.utils.translation import gettext_lazy as _
      
              error_messages={
                  "required": "密碼不能為空",
                  "min_length": _("密碼長度至少為8位"),
                  "max_length": "密碼長度不能超過16位",
              },
          
          
      # 示例:模型
      from django.db import models
      from django.utils.translation import gettext_lazy as t
      
      class MyThing(models.Model):
          name = models.CharField(help_text=t("This is the help text"))
      

      四、本地化操作

      創建或更新消息文件

      下面命令會遍歷項目源代碼,并抽出所有要被翻譯的字符串。默認情況下,腳本檢查具有 .html、.txt 或 .py 文件擴展名的每個文件。可通過-e選項指定。

      # 進入Django 項目的根目錄(就是包含 manage.py 的那個目錄),或進入Django app的根目錄
      django-admin makemessages -l zh_Hans
      django-admin makemessages -l en
      
      # 只檢查 *.py 文件(可選)
      django-admin makemessages -l zh_Hans -e py
      
      # 以后使用下面命令,重新檢查并更新所有語言的消息文件
      django-admin makemessages -a
      

      生成對應的消息文件*.po

      locale
      ├── en
      │   └── LC_MESSAGES
      │       ├── django.mo
      │       └── django.po  # 消息文件
      └── zh_Hans
          └── LC_MESSAGES
              ├── django.mo
              └── django.po  # 消息文件
      

      消息文件說明

      *.po的是消息文件,必須使用 UTF-8 編碼

      • msgid :顯示在源代碼中需要翻譯的字符串。不要改動它。
      • msgstr :翻譯后的字符串。
      # mysite\locale\en\LC_MESSAGES\django.po
      msgid "賬號或密碼錯誤"
      msgstr "Account or password error"
      
      # mysite\locale\zh_Hans\LC_MESSAGES\django.po
      msgid "賬號或密碼錯誤"
      msgstr "賬號或密碼錯誤"
      

      編譯消息文件

      下面命令會根據 .po 文件內容,編譯并創建對應的 .mo 文件。

      django-admin compilemessages
      # 如果更新了消息文件,需要重新編譯
      

      生成的翻譯文件應位于以下路徑。需要重啟一下Django項目,才生效。

      locale
      ├── en
      │   └── LC_MESSAGES
      │       ├── django.mo  # 編譯后的翻譯文件
      │       └── django.po  # 消息文件
      └── zh_Hans
          └── LC_MESSAGES
              ├── django.mo  # 編譯后的翻譯文件
              └── django.po  # 消息文件
      

      五、項目實戰

      用戶登錄功能,按上述步驟配置國際化與本地化

      image-20250718100411771

      用戶登錄界面默認為中文,給出中文提示

      image-20250718100752565

      修改瀏覽器語言偏好:設置 → 語言 → 添加"英語(美國)" → 拖到頂部作為首選語言

      image-20250718102228462

      此時,給出英文提示

      image-20250718101722706

      點擊查看完成代碼


      您正在閱讀的是《Django從入門到實戰》專欄!關注不迷路~

      posted @ 2025-07-18 11:27  小王子1024  閱讀(325)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 免费人成视频在线观看网站| 97国产揄拍国产精品人妻| 日韩有码av中文字幕| 无码一区二区三区免费| 国产玖玖视频| 一区二区三区四区五区黄色| 漂亮人妻被修理工侵犯 | 国产地址二永久伊甸园| 亚洲天堂领先自拍视频网| 久久国产精品精品国产色| 亚洲午夜爱爱香蕉片| 精品综合一区二区三区四区 | 欧美成本人视频免费播放| 精品 无码 国产观看| 国产亚洲无日韩乱码| 久久中文字幕一区二区| 国产太嫩了在线观看| 国产av一区二区麻豆熟女| 久久久精品94久久精品| 图片区 小说区 区 亚洲五月| 麻豆成人传媒一区二区| 亚洲日本欧美日韩中文字幕| 色8久久人人97超碰香蕉987| 激情综合网激情五月伊人| 另类图片亚洲人妻中文无码| 99久久精品费精品国产一区二| 日韩精品视频一二三四区| 国产成人人综合亚洲欧美丁香花 | 大香伊蕉在人线国产最新2005| 大田县| 天堂va蜜桃一区二区三区| 韩国午夜福利片在线观看| 中文字幕国产精品日韩| 国产不卡av一区二区| 色伦专区97中文字幕| 国产精品人妻中文字幕| 午夜dv内射一区二区| 人妻教师痴汉电车波多野结衣 | 少妇又爽又刺激视频| 亚洲 自拍 另类小说综合图区| 日韩av一区二区精品不卡|