KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jahia > taglibs > util > I18nTag


1 package org.jahia.taglibs.util;
2
3 import java.io.IOException JavaDoc;
4 import java.util.Locale JavaDoc;
5
6 import javax.servlet.http.HttpServletRequest JavaDoc;
7 import javax.servlet.jsp.JspException JavaDoc;
8 import javax.servlet.jsp.JspWriter JavaDoc;
9 import javax.servlet.jsp.tagext.TagSupport JavaDoc;
10
11 import org.jahia.data.JahiaData;
12 import org.jahia.utils.JahiaConsole;
13 import org.jahia.utils.LanguageCodeConverters;
14
15
16 /**
17  * Class I18nTag : support for I18n within Jahia
18  * Do not use this tag in the same time with the JSP directive :
19  * <%@ page contentType= "text/html; charset = ... %>
20  *
21  * The charset attribute is only used when
22  * JData.params().settings().getCharSet().equals("") is true
23  *
24  * @author Khue Nguyen
25  */

26 public class I18nTag extends TagSupport JavaDoc {
27
28     private static org.apache.log4j.Logger logger =
29             org.apache.log4j.Logger.getLogger(I18nTag.class);
30
31     private static final String JavaDoc CLASS_NAME = I18nTag.class.getName();
32
33     protected String JavaDoc contentType = "text/html"; // default value
34
protected String JavaDoc charSet = "ISO-8859-1";
35
36     private String JavaDoc pageContentType = "";
37
38     public void setPageContentType (String JavaDoc pageContentType) {
39       this.pageContentType = pageContentType;
40     }
41
42     public String JavaDoc getPageContentType() {
43       return this.pageContentType;
44     }
45
46     public void setContentType(String JavaDoc contentType) {
47         this.contentType = contentType;
48     }
49
50     public void setCharSet(String JavaDoc charSet) {
51         this.charSet = charSet;
52     }
53
54     public int doStartTag() {
55
56         HttpServletRequest JavaDoc request = (HttpServletRequest JavaDoc)pageContext.getRequest();
57         JahiaData jData = (JahiaData) request.getAttribute("org.jahia.data.JahiaData");
58
59         // Caution : UTF-8 is not realy a charset !!
60
String JavaDoc jahiaCharSet = "";
61         if (jData.params().settings().isUtf8Encoding()) {
62             jahiaCharSet = "UTF-8";
63         }
64         //System.out.println(CLASS_NAME+".doStartTag: Jahia Char Set is " + jahiaCharSet);
65

66         StringBuffer JavaDoc buff = new StringBuffer JavaDoc(contentType);
67         buff.append(";");
68         if (!jahiaCharSet.equals("")) {
69             buff.append("charset=");
70             buff.append(jahiaCharSet);
71         } else if (!charSet.equals("")) {
72             buff.append("charset=");
73             buff.append(charSet);
74         }
75
76         jData.params().getResponse().setContentType(buff.toString());
77         logger.debug("Content type : " + buff.toString());
78
79         if (pageContentType.trim().equals("true")) {
80           StringBuffer JavaDoc pageContentTypeBuf = new StringBuffer JavaDoc(
81               "<%@ page contentType=\"text/html,charset=");
82           if (!jahiaCharSet.equals("")) {
83             pageContentTypeBuf.append(jahiaCharSet);
84           } else if (!charSet.equals("")) {
85             pageContentTypeBuf.append(charSet);
86           }
87           pageContentTypeBuf.append("\" %>");
88           try {
89             JspWriter JavaDoc out = pageContext.getOut();
90             out.print(pageContentTypeBuf.toString());
91           }
92           catch (IOException JavaDoc ioe) {
93             JahiaConsole.println("I18nTag: doStartTag ", ioe.toString());
94           }
95         }
96
97         Locale JavaDoc locale = jData.params().getLocale();
98         if ( locale != null ){
99             jData.params().getResponse().setHeader("Content-Language", LanguageCodeConverters.localeToLanguageTag(locale));
100             jData.params().getResponse().setHeader("Vary","Accept-Language");
101         }
102         return SKIP_BODY;
103     }
104
105
106     public int doEndTag() throws JspException JavaDoc {
107         // let's reinitialize the tag variables to allow tag object reuse in
108
// pooling.
109
contentType = "text/html"; // default value
110
charSet = "ISO-8859-1";
111         pageContentType = "";
112         return EVAL_PAGE;
113     }
114 }
115
Popular Tags