国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Django 多語言教程的實現(xiàn)(i18n)

2020-02-15 22:13:33
字體:
供稿:網(wǎng)友

最近公司準(zhǔn)備擴張海外業(yè)務(wù),所以要給 Django 系統(tǒng)添加 國際化與本土化 支持。國際化一般簡稱 i18n ,代表 Internationalization 中 i 和 n 有 18 個字母;本地化簡稱 L10n ,表示 Localization 中 l 和 n 中有 10 個字母。有趣的一點是,一般會用小寫的 i 和大寫的 L 防止混淆。

簡單來說:i18n 是為國際化搭建框架,L10n 是針對不同地區(qū)的適配。舉個簡單的例子:

i18n:

datetime.now().strftime('%Y/%m/%d') # before i18ndatetime.now().strftime(timeformat) # after i18n

L10n:

timeformat = { 'cn': '%Y/%m/%d', 'us': '%m/%d/%Y', 'fr': '%d/%m/%Y', ...}

更加具體的定義可以看https://www.w3.org/International/questions/qa-i18n的解釋。

i18n 的范圍非常廣,包括多語言、時區(qū)、貨幣單位、單復(fù)數(shù)、字符編碼甚至是文字閱讀順序(RTL)等等。這篇文章只關(guān)注 i18n 的多語言 方面。

↑ 阿拉伯語的 windows 系統(tǒng),文字甚至界面的方向都與中文版的相反

基本步驟

Django 作為一個大而全的框架,已經(jīng)提供了一套多語言的解決方案,我稍微對比了一下,并沒能找到在 Django 體系下比官方方案還好用的庫。Django 的方案可以簡單分為四步:

    一些必要的配置 在代碼中標(biāo)記需要翻譯的文本 使用 makemessages 命令生成 po 文件 編譯 compilemessages 命令編譯 mo 文件

下面我們詳細(xì)來看看

第一步:配置

首先在 settings.py 中加入這幾個內(nèi)容

LOCALE_PATHS = ( os.path.join(__file__, 'language'),)MIDDLEWARE = ( ... 'django.middleware.locale.LocaleMiddleware', ...)LANGUAGES = ( ('en', 'English'), ('zh', '中文'),)

LOCALE_PATHS :指定下面第三步和第四步生成文件的位置。老版的 Django 需要手動新建好這個目錄。

LocaleMiddleware :可以讓 Django 識別并選擇合適的語言。

LANGUAGES :指定了這個工程能提供哪些語言。

第二步:標(biāo)記文本

之前沒有多語言的需要,所以大家在 AJAX 相應(yīng)代碼中直接寫了中文,比如這樣:

return JsonResponse({"msg": "內(nèi)容過長", "code": 1, "data": None})

現(xiàn)在需要多語言了,就需要告訴 Django 哪些內(nèi)容是需要翻譯的。對于上面的例子來說,就是寫成這樣:

from django.utils.translation import gettext as _return JsonResponse({"msg": _("內(nèi)容過長"), "code": 1, "data": None})

這里使用 gettext 函數(shù)將原本的字符串包裹起來,這樣的話,Django 就可以根據(jù)當(dāng)前語言返回合適的字符串。一般會使用單個下劃線 _ 提高可讀性。

因為我司幾乎所有前后端通信都使用 AJAX,所以并沒有怎么用上 Django 的模板功能(順便一提,我司前端使用的多語言工具是 i18next )。不過在這里也一并寫下 Django 模板的標(biāo)記方法:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新民市| 晋城| 梁平县| 通榆县| 道真| 台东县| 孟津县| 闻喜县| 石楼县| 利辛县| 东乡| 泌阳县| 温州市| 靖宇县| 蕉岭县| 抚宁县| 广东省| 丰宁| 天长市| 华蓥市| 满洲里市| 莎车县| 七台河市| 甘南县| 信宜市| 通城县| 阳朔县| 北海市| 灵璧县| 青河县| 阳信县| 荥阳市| 哈密市| 海南省| 台北县| 贺州市| 谢通门县| 丰台区| 霍林郭勒市| 南溪县| 平阴县|