前后端交互场景下如何使用Candy Translation处理多语言?
问题描述
以下是我编写的Django控制器方法,我通过Candy Translation从Excel中获取多语言文案并返回JSON数据,前端JavaScript解析该数据后渲染至界面。请问在此场景下应如何正确使用Candy Translation?
def mymethod(request): return_obj = {} if request.method == 'POST': info = request.POST try: ts_vals, coordinates, name = somefunction(params) return_obj["values"] = ts_vals return_obj["msg"] = candy.translated(request, "all_msg") # all_msg is from the excel return_obj["name"] = name return_obj["success"] = "success" except Exception as e: return_obj["error"] = candy.translated(request, "all_Error") return JsonResponse(return_obj)
解决方案
针对你在Django控制器中通过Candy Translation返回多语言文案的场景,可以按照以下方式优化使用:
1. 确保语言上下文正确传递
Candy Translation的translated方法依赖request对象识别当前用户的语言偏好,需确保:
- 你的Django项目已配置国际化中间件(
django.middleware.locale.LocaleMiddleware),且放在SessionMiddleware之后、CommonMiddleware之前,保证request.LANGUAGE_CODE能正确获取用户语言(比如从Accept-Language请求头解析)。 - 若前端通过URL参数、Cookie等传递语言信息,需确保中间件能正确识别并设置
request.LANGUAGE_CODE,这样Candy Translation才能匹配Excel中对应的语言列。
2. 规范Excel翻译文件格式
遵循Candy Translation的约定整理Excel文件:
- 第一列是文案唯一键名(如
all_msg、all_Error),后续列对应不同语言,列名必须用标准语言代码(比如zh-CN、en-US)。 - 给键名添加业务前缀(如
dashboard_all_msg),避免不同模块的文案键名冲突,同时提升可读性。
3. 统一文案管理,避免硬编码
你的代码中success字段直接写死字符串,建议也纳入Candy Translation管理:
在Excel中添加operation_success键及其多语言翻译,将代码中的return_obj["success"] = "success"替换为return_obj["success"] = candy.translated(request, "operation_success"),保持全链路多语言一致性。
4. 优化异常与性能
- 异常捕获时,添加错误日志记录(如
logger.error(f"Data fetch or translation failed: {str(e)}")),方便后续排查问题,同时确保返回的错误文案始终是多语言版本。 - 若翻译文案不频繁变更,开启Candy Translation的缓存机制,将Excel内容加载到内存中,避免每次请求都读取文件,提升接口响应速度。
5. 处理边界情况
- 配置全局默认文案:当Excel中不存在目标键名的翻译时,
translated方法可能返回键名本身,建议在Candy Translation配置中设置默认文案,或在代码中判断返回值,避免前端显示原始键名。 - 前端切换语言时,确保重新请求接口时携带正确的语言标识(如请求头、URL参数),让Django中间件能更新
request.LANGUAGE_CODE,从而返回对应语言的文案。
内容的提问来源于stack exchange,提问作者Githika Tondapu
相关产品推荐
相关产品推荐

