4
回答
Jfinal I18N
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
写了一个I18N 并且在config里面初始化了 i18N.init  按照网上写的文件 就试好了,但是不能动态显示怎么办? 在哪改变locale的值?
举报
共有4个答案 最后回答: 4年前

自己写个监听器,动态改变视图的路径

package com.power.oj.core.interceptor;

import java.util.Locale;

import com.jfinal.aop.Interceptor;
import com.jfinal.core.ActionInvocation;
import com.jfinal.core.Const;
import com.jfinal.core.Controller;
import com.jfinal.render.Render;
import com.jfinal.render.RenderFactory;
import com.power.oj.core.AppConfig;

public class I18NInterceptor implements Interceptor
{

  @Override
  public void intercept(ActionInvocation ai)
  {
    Controller controller = ai.getController();
    String lang = controller.getPara("lang");
    Locale locale = null;

    if ("zh".equals(lang))
      locale = Locale.CHINESE;
    else if (lang != null)
      locale = Locale.ENGLISH;

    if (locale != null)
      controller.setLocaleToCookie(locale);

    ai.invoke();

    // //////////////////////////////////////////////////////////////////////////////
    if ((Locale.CHINESE.toString()).equals(controller.getCookie(Const.I18N_LOCALE)))
    {
      Render render = controller.getRender();
      if (render == null)
      {
        render = RenderFactory.me().getDefaultRender(ai.getMethodName());
      }
      String view = render.getView();
      if (view == null)
        return;

      if (!view.startsWith("/"))
      {
        view = ai.getViewPath() + view;
      }
      view = view.replaceFirst(AppConfig.getBaseViewPath(), AppConfig.getBaseViewPath() + "/zh");

      render.setView(view);
      controller.render(render);
    }
    else
    {}
    // //////////////////////////////////////////////////////////////////////////////
  }

}



非常感谢我昨天自己写出来了 ,跟你写的差不多 不过能够借鉴你的很多东西,非常感谢你的耐心回答。

引用来自“魔神翼”的评论

自己写个监听器,动态改变视图的路径

package com.power.oj.core.interceptor;

import java.util.Locale;

import com.jfinal.aop.Interceptor;
import com.jfinal.core.ActionInvocation;
import com.jfinal.core.Const;
import com.jfinal.core.Controller;
import com.jfinal.render.Render;
import com.jfinal.render.RenderFactory;
import com.power.oj.core.AppConfig;

public class I18NInterceptor implements Interceptor
{

  @Override
  public void intercept(ActionInvocation ai)
  {
    Controller controller = ai.getController();
    String lang = controller.getPara("lang");
    Locale locale = null;

    if ("zh".equals(lang))
      locale = Locale.CHINESE;
    else if (lang != null)
      locale = Locale.ENGLISH;

    if (locale != null)
      controller.setLocaleToCookie(locale);

    ai.invoke();

    // //////////////////////////////////////////////////////////////////////////////
    if ((Locale.CHINESE.toString()).equals(controller.getCookie(Const.I18N_LOCALE)))
    {
      Render render = controller.getRender();
      if (render == null)
      {
        render = RenderFactory.me().getDefaultRender(ai.getMethodName());
      }
      String view = render.getView();
      if (view == null)
        return;

      if (!view.startsWith("/"))
      {
        view = ai.getViewPath() + view;
      }
      view = view.replaceFirst(AppConfig.getBaseViewPath(), AppConfig.getBaseViewPath() + "/zh");

      render.setView(view);
      controller.render(render);
    }
    else
    {}
    // //////////////////////////////////////////////////////////////////////////////
  }

}



非常感谢。
顶部