JFinal: I18N 레이블

3575 단어 jFinal
현재 JFinal로 작은 프로젝트를 만들었는데 I18N 문제가 발생했을 때 JFinal이 클래스 방법만 지원하는 것을 보고 JSP 라벨을 써서 JSP 페이지에서 호출했다.
Vity`s life.
Step 1: JFinal i18n 구성 열기
  • src에 자원 파일을 추가합니다(예: uimessage_zh_CN.properties
  • Config 클래스에 I18N 초기화 코드 추가
  •         @Override
    	public void configConstant(Constants me) {
    
    		this.loadPropertyFile("constants.properties");
    
    		me.setDevMode(Boolean.valueOf(this.getProperty("app.devMode")));
    		me.setViewType(ViewType.JSP);
    
    		I18N.init("ui_message", null, null);
    
    	}

    Step 2: LocaleInterceptor의 locale 차단 설정 증가
            @Override
    	public void intercept(ActionInvocation ai) {
    		Controller c = ai.getController();
    		String tmp = c.getCookie(Const.I18N_LOCALE);
    		String i18n = c.getRequest().getLocale().toString();
    		if (!i18n.equals(tmp)) {
    			ai.getController().setCookie(Const.I18N_LOCALE, i18n, Const.DEFAULT_I18N_MAX_AGE_OF_COOKIE);
    		}
    		ai.invoke();
    	}

    Step 3: I18Ntag 클래스 및 tld 파일 작성
    public class I18NMessageTag extends TagSupport {
    
    	private static final long serialVersionUID = -8380055495002243207L;
    
    	private Logger log = Logger.getLogger(this.getClass());
    
    	private String key;
    
    	private String defaultValue;
    
    	/**
    	 * (non-Javadoc)
    	 * 
    	 * @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
    	 */
    	@Override
    	public int doStartTag() throws JspException {
    		if (null == I18N.me()) {
    			log.error("I18N_TAG:     ");
    		} else {
    			if (StringUtils.isBlank(key)) {
    				log.error("I18N_TAG:key  ");
    			} else {
    				try {
    					if (StringUtils.isBlank(defaultValue)) {
    						pageContext.getOut().write(I18N.getText(key));
    					} else {
    						pageContext.getOut().write(I18N.getText(key, defaultValue));
    					}
    				} catch (IOException e) {
    					log.error(e.getMessage(), e);
    				}
    			}
    		}
    		return super.doStartTag();
    	}
    
    	/**
    	 * @return the key
    	 */
    	public String getKey() {
    		return key;
    	}
    
    	/**
    	 * @param key
    	 *            the key to set
    	 */
    	public void setKey(String key) {
    		this.key = key;
    	}
    
    	/**
    	 * @return the defaultValue
    	 */
    	public String getDefaultValue() {
    		return defaultValue;
    	}
    
    	/**
    	 * @param defaultValue
    	 *            the defaultValue to set
    	 */
    	public void setDefaultValue(String defaultValue) {
    		this.defaultValue = defaultValue;
    	}
    
    }
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    <taglib>
    	<tlibversion>1.0</tlibversion>
    	<jspversion>1.2</jspversion>
    	<shortname>eip</shortname>
    	<uri>/eip-taglib</uri>
    
    	<tag>
    		<name>i18n</name>
    		<tagclass>com.mvity.eip.core.tag.I18NMessageTag</tagclass>
    		<bodycontent>JSP</bodycontent>
    		<attribute>
    			<name>key</name>
    			<required>true</required>
    			<rtexprvalue>true</rtexprvalue>
    		</attribute>
    		<attribute>
    			<name>defaultValue</name>
    			<required>false</required>
    			<rtexprvalue>true</rtexprvalue>
    		</attribute>
    	</tag>
    
    </taglib>

    PS:tld 문서는 WEB-INF 경로 아래에 배치할 수 있습니다.
    Step 4: JSP 문서에 tag lib을 도입하여 사용
    <%@ taglib prefix="eip" uri="/eip-taglib"%>
    
    .....
    
    <div class="top_b">
        <eip:i18n key="bomp.login.title" />
    </div>

    끝내다

    좋은 웹페이지 즐겨찾기