11.3 I18nInterceptor

    以上代码通过配置了I18nInterceptor拦截action请求,然后即可在freemarker模板文件中通过名为_res对象来获取国际化数据,I18nInterceptor的具体工作流程如下:

    • 试图从请求中通过controller.getPara(“_locale”)获取locale参数,如果获取到则将其保存到cookie之中

    • 如果以上两步仍然没有获取到locale参数值,则使用I18n. defaultLocale的值做为locale值来使用

    以上步骤I18nInterceptor中的变量名”_locale”、”_res”都可以在创建I18nInterceptor对象时进行指定,不指定时将使用默认值。还可以通过继承I18nInterceptor并且覆盖getLocalPara、getResName、getBaseName来定制更加个性化的功能。

    在有些 web 系统中,页面需要国际化的文本过多,并且 css 以及 html 也因为国际化而大不相同,对于这种应用场景先直接制做多套同名称的国际化视图,并将这些视图以 locale 为子目录分类存放,最后使用I18nInterceptor拦截器根据 locale 动态切换视图,而不必对视图中的文本逐个进行国际化切换,只需将I18nInterceptor.isSwitchView设置为true即可,省时省力。