I18N

业务思考|项目国际化处理

刘启春

最近在做国际化相关的工作,需求是在「English」状态用户的名称和部门的名称显示英文字段,实体中有 name 和 englishName,当用户选择英语时 name 需要被填充 englishName,这种情况不像系统字段的国际化,系统字段的各个语言是固定的,而用户的英文名称是变动的。为了处理用户的不同语言选择需要写很多 if 或者 switch,因此当 VO、DOT、Model 对象多了就会出现很多形式相似的代码,像下面这样。

业务系统会有多处与下面雷同的代码,因为不同的 VO、DTO 需要不同的处理。

    public void i18nHandler(UserVO vo, User user){
        LanguageEnum language = currentLanguage();
        switch (language){
            case EN:
                String englishName = user.getEnglishName();
                if(StringUtils.isNotEmpty(englishName)){
                    vo.setName(englishName);
                }
                break;
            case JP:
                String jpName = user.getJpName();
                if(StringUtils.isNotEmpty(jpName)){
                    vo.setName(jpName);
                }
            case ZH:
            default:
                // 缺省默认中文
        }
    }