多语言解决方案-后端多语言

1,787 阅读1分钟

完整的多语言解决方案包括前端多语言,后端多语言,数据多语言。个人接触过的框架提供的多语言支持都略显不足,比如用 Spring 支持多语言的工具类库,通常会在此基础上把多语言资源维护到数据库以支持动态配置,但没有提供方案解决开发人员编写支持多语言特性代码的痛点。以下提供的方案是在开发成本和系统国际化程度之间做权衡。

创建声明多语言的注解

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DeclareI18N {

    String value();
}

创建多语言常量

public interface DemoMessages {

     @DeclareI18N("你好,世界!")
     String HELLO_WORLD = "helloWorld";
}

创建多语言工具类

public class Q {

    public static String tr(String message, Object... args) {
        // 查找多语言并返回
    }
}

业务代码中获取多语言

String message = Q.tr(DemoMessages.HELLO_WORLD);
// 此处 message 的值将是字符串 "你好,世界!"

查找多语言的策略

比如 Q.tr 可以先查数据库,没有找到才查 xxxx.properties 等文件,最后才获取多语言常量上 @DeclareI18N 定义的值。通过该方案开发人员在添加新的多语言时只需要往常量类里增加用 @DeclareI18N 注解的字段,至于其它语种的多语言资源在适当的时机补充上去。