前后端中英文映射,数据格式问题

6 天前
 steelshadow39

后端一个数据对象中包含十几个英文属性和值,但在前端要用中文给用户展示。

目前我能想到的是后端加一个属性对象,然后传给前端的对象的属性都用该对象描述。 举个例子

原始数据格式
"riskLevel": "low"

修改后的格式
"riskLevel": { "label": "风险等级", "value": "low" }

属性对象
public class Porperty<T> { private String label; private T value; }

请教 V 友还有哪些比较好的方式

900 次点击
所在节点    程序员
8 条回复
wzdsfl
6 天前
我们这采取的方案就走一个接口叫 CommonEnum ,把所有的字段/值的中文映射放在这
{
"riskLevel":"风险等级",
"low":"低",
}
azure233
6 天前
如果字段多或者考虑扩展性的话 写一个字典服务 简单点实现就使用 enum 然后写个接口将 enum 转成 map 返给前端
steelshadow39
6 天前
@wzdsfl 这样的话,前端传过去 key 是"riskLevel"还是"风险等级"?如果是后者的话,前端会用中文做 key 吗?
XiLingHost
6 天前
可以考虑单独留个 i18n 接口,传 key 和 lang 进去回 text 回来
fciasth
6 天前
@MapppingColumn(enumName = "riskLevelEnum")
private Byte riskLevel;
private String riskLevelName;

自定义注解+切面+反射,每次 response 返回的时候去处理,获取注解上的常量 map ,然后利用反射设置对应的值给中文字段(固定格式,例如:xxxName 或 xxxStr )
suyuyu
6 天前
我司后台就这样返了 {"风险等级":"low"}
davin
6 天前
根据请求头 Accept-Language = 'zh' 给前端中文的:
{
"riskLevel": {
"label": "风险等级",
"value": "低"
}
}

如果 Accept-Language = 'en' 给前端英文的:
{
"riskLevel": {
"label": "Risk Level",
"value": "Low"
}
}
同时方便以后扩展,如果以后有了法文、德文什么的也不怕。
steelshadow39
5 天前
@davin 学到了,非常感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1052166

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX