V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
steelshadow39
V2EX  ›  程序员

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

  •  
  •   steelshadow39 · 4 天前 · 877 次点击

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

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

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

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

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

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

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

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

    如果 Accept-Language = 'en' 给前端英文的:
    {
    "riskLevel": {
    "label": "Risk Level",
    "value": "Low"
    }
    }
    同时方便以后扩展,如果以后有了法文、德文什么的也不怕。
    steelshadow39
        8
    steelshadow39  
    OP
       3 天前
    @davin 学到了,非常感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2609 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:38 · PVG 10:38 · LAX 19:38 · JFK 22:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.