1. 项目介绍
用尽可能少的代码更改和资源消耗,将接口返回的数据从简体转为繁体。
2. 项目依赖
基于 zhconv 将简体数据转为繁体数据。
依赖安装:
pip install zhconv
zhconv 提供基于 MediaWiki 词汇表的最大正向匹配简繁转换。Python 2, 3 通用。支持以下地区词转换:
zh-cn 大陆简体
zh-tw 台灣正體
zh-hk 香港繁體
zh-sg 马新简体(无词汇表,需要手工指定)
zh-hans 简体
zh-hant 繁體
3. 项目改造
3.1. 构建数据转换模块
from zhconv import convert as zh_convert
def data_translate(data, lan='zh-tw'):
if isinstance(data, dict):
new_data = dict()
for k, v in data.items():
new_data[k] = data_translate(v, lan=lan)
data = new_data
if isinstance(data, list):
new_data = list()
for r in data:
new_data.append(data_translate(r, lan=lan))
data = new_data
if isinstance(data, tuple):
new_data = list()
for r in data:
new_data.append(data_translate(r, lan=lan))
data = tuple(new_data)
if isinstance(data, str):
data = zh_convert(data, lan)
return data
此模块可以将简体数据转化为指定类型(默认为台湾繁体)的数据,项目中需要进行数据转换的位置可以调用此模块。
from where import data_translate
a = {'a': ['干啥', '人体']}
print(data_translate(a))
注意:将 where 替换成文件的路径,后文也是如此。
输出如下:
{'a': ['幹啥', '人體']}
3.2. 构建自动转化中间件
class LangResponseMiddleware(MiddlewareMixin):
def process_response(self, request, response):
headers = request.headers
if headers:
language = headers.get('Content-Language')
if language:
if language in {'zh-tw', 'zh-hk', 'zh-hant'}:
response.content = data_translate(response.content.decode(), language).encode()
return response
通过获取 Headers 里面的 Content-Language 参数,自动返回不同语言版本的数据。
3.3. 更新配置
将 LangResponseMiddleware 加入到 MIDDLEWARE 配置中。
MIDDLEWARE = [
'where.middleware.LangResponseMiddleware',
'django.middleware.security.SecurityMiddleware',
...
]
4. 调试
import requests
import json
url = "http://127.0.0.1:8000/api/home_page/"
payload = json.dumps({
"user_id": "1",
"version": "3.01.02"
})
headers = {
'Content-Language': 'zh-tw',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
在请求的 headers 里面添加 'Content-Language': 'zh-tw'
。