Java Tutorial/Servlet/Internationlization I18N

Материал из Java эксперт
Перейти к: навигация, поиск

Japanese Hello World Servlet

   <source lang="java">

import java.io.IOException; import java.io.PrintWriter; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class JapaneseHelloWorldServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,
     ServletException {
   response.setContentType("text/html");
   response.setLocale(Locale.JAPANESE);
   PrintWriter out = response.getWriter();
   out.println("");
   out.println("\u4eca\u65e5\u306f\u4e16\u754c");
   out.println("");
 }

}</source>





Locale Information Servlet

   <source lang="java">

import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LocaleInformationServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,
     ServletException {
   response.setContentType("text/html");
   PrintWriter out = response.getWriter();
   Locale userPreferredLocale = request.getLocale();
   Enumeration userPreferredLocales = request.getLocales();
   out.println("Preferred Locale: " + userPreferredLocale.toString());
   out.println("");
   out.print("Preferred Locales: ");
   while (userPreferredLocales.hasMoreElements()) {
     userPreferredLocale = (Locale) userPreferredLocales.nextElement();
     out.print(userPreferredLocale.toString() + ", ");
   }
   out.println();
   out.println("");
 }

}</source>





Locale Session Servlet

   <source lang="java">

import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class LocaleSessionServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,
     ServletException {
   HttpSession userSession = request.getSession();
   if (userSession.isNew()) {
     userSession.setAttribute("userLocale", request.getLocale());
   }
 }

}</source>





Servlet I18N: Page Header

   <source lang="java">

import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {

 public void doGet(HttpServletRequest req, HttpServletResponse res)
                              throws ServletException, IOException {
   res.setContentType("text/plain; charset=Shift_JIS");
   PrintWriter out = res.getWriter();
   res.setHeader("Content-Language", "ja");
   Locale locale = new Locale("ja", "");
   DateFormat full = DateFormat.getDateTimeInstance(DateFormat.LONG,
                                                    DateFormat.LONG,
                                                    locale);
   out.println("In Japanese:");
   out.println("\u4eca\u65e5\u306f\u4e16\u754c");  // Hello World
   out.println(full.format(new Date()));
 }

}</source>





Servlet I18N: Read From File

   <source lang="java">

import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {

 public void doGet(HttpServletRequest req, HttpServletResponse res)
                              throws ServletException, IOException {
   res.setContentType("text/plain; charset=Shift_JIS");
   PrintWriter out = res.getWriter();
   res.setHeader("Content-Language", "ja");
   Locale locale = new Locale("ja", "");
   DateFormat full = DateFormat.getDateTimeInstance(DateFormat.LONG,
                                                    DateFormat.LONG,
                                                    locale);
   out.println("In Japanese:");
   try {
     FileInputStream fis =
       new FileInputStream(req.getRealPath("/HelloWorld.ISO-2022-JP"));
     InputStreamReader isr = new InputStreamReader(fis, "ISO-2022-JP");
     BufferedReader reader = new BufferedReader(isr);
     String line = null;
     while ((line = reader.readLine()) != null) {
       out.println(line);
     }
   }
   catch (FileNotFoundException e) {
     e.printStackTrace();
   }
   out.println(full.format(new Date()));
 }

}</source>





Servlet Spanish

   <source lang="java">

import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {

 public void doGet(HttpServletRequest req, HttpServletResponse res)
                              throws ServletException, IOException {
   res.setContentType("text/plain");
   PrintWriter out = res.getWriter();
   res.setHeader("Content-Language", "es");
   Locale locale = new Locale("es", "");
   DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.LONG,
                                                   DateFormat.LONG,
                                                   locale);
   fmt.setTimeZone(TimeZone.getDefault());
   out.println("En Espa\u00f1ol:");
   out.println("\u00a1Hola Mundo!");
   out.println(fmt.format(new Date()));
 }

}</source>





Servlet Unicode

   <source lang="java">

import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {

 public void doGet(HttpServletRequest req, HttpServletResponse res)
                              throws ServletException, IOException {
   Locale locale;
   DateFormat full;
   try {
     res.setContentType("text/plain; charset=UTF-8");
     //PrintWriter out = res.getWriter();
     PrintWriter out = new PrintWriter(
       new OutputStreamWriter(res.getOutputStream(), "UTF8"), true);
     locale = new Locale("en", "US");
     full = DateFormat.getDateTimeInstance(DateFormat.LONG, 
                                           DateFormat.LONG,
                                           locale);
     out.println("In English appropriate for the US:");
     out.println("Hello World!");
     out.println(full.format(new Date()));
     out.println();
     locale = new Locale("es", "");
     full = DateFormat.getDateTimeInstance(DateFormat.LONG, 
                                           DateFormat.LONG,
                                           locale);
     out.println("En Espa\u00f1ol:");
     out.println("\u00a1Hola Mundo!");
     out.println(full.format(new Date()));
     out.println();
     locale = new Locale("ja", "");
     full = DateFormat.getDateTimeInstance(DateFormat.LONG,
                                           DateFormat.LONG,
                                           locale);
     out.println("In Japanese:");
     out.println("\u4eca\u65e5\u306f\u4e16\u754c");
     out.println(full.format(new Date()));
     out.println();
     locale = new Locale("zh", "");
     full = DateFormat.getDateTimeInstance(DateFormat.LONG,
                                           DateFormat.LONG,
                                           locale);
     out.println("In Chinese:");
     out.println("\u4f60\u597d\u4e16\u754c");
     out.println(full.format(new Date()));
     out.println();
     locale = new Locale("ko", "");
     full = DateFormat.getDateTimeInstance(DateFormat.LONG,
                                           DateFormat.LONG,
                                           locale);
     out.println("In Korean:");
     out.println("\uc548\ub155\ud558\uc138\uc694\uc138\uacc4");
     out.println(full.format(new Date()));
     out.println();
     locale = new Locale("ru", "");
     full = DateFormat.getDateTimeInstance(DateFormat.LONG,
                                           DateFormat.LONG,
                                           locale);
     out.println("In Russian (Cyrillic):");
     out.print("\u0417\u0434\u0440\u0430\u0432\u0441\u0442");
     out.println("\u0432\u0443\u0439, \u041c\u0438\u0440");
     out.println(full.format(new Date()));
     out.println();
   }
   catch (Exception e) {
     e.printStackTrace();
   }
 }

}</source>





Servlet Unicode Escape String

   <source lang="java">

import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {

 public void doGet(HttpServletRequest req, HttpServletResponse res)
                              throws ServletException, IOException {
   try {
     res.setContentType("text/plain; charset=UTF-8");
     PrintWriter out = res.getWriter();
     String charset = req.getParameter("charset");
     String text = req.getParameter("text");
     BufferedReader reader = new BufferedReader(
       new InputStreamReader(new StringBufferInputStream(text), charset));
     text = reader.readLine();
     out.println("Received charset: " + charset);
     out.println("Received text: " + text);
     out.println("Received text (escaped): " + toUnicodeEscapeString(text));
   }
   catch (Exception e) {
     e.printStackTrace();
   }
 }
 public void doPost(HttpServletRequest req, HttpServletResponse res)
                               throws ServletException, IOException {
   doGet(req, res);
 }
 private static String toUnicodeEscapeString(String str) {
   // Modeled after the code in java.util.Properties.save()
   StringBuffer buf = new StringBuffer();
   int len = str.length();
   char ch;
   for (int i = 0; i < len; i++) {
     ch = str.charAt(i);
     switch (ch) {
       case "\\": buf.append("\\\\"); break;
       case "\t": buf.append("\\t"); break;
       case "\n": buf.append("\\n"); break;
       case "\r": buf.append("\\r"); break;
   
       default:
         if (ch >= " " && ch <= 127) {
           buf.append(ch);
         }
         else {
           buf.append("\\");
           buf.append("u");
           buf.append(toHex((ch >> 12) & 0xF));
           buf.append(toHex((ch >>  8) & 0xF));
           buf.append(toHex((ch >>  4) & 0xF));
           buf.append(toHex((ch >>  0) & 0xF));
         }
     }
   }
   return buf.toString();
 }
 private static char toHex(int nibble) {
   return hexDigit[(nibble & 0xF)];
 }
 private static char[] hexDigit = {
   "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"
 };

}</source>





Servlet UTF8 Page

   <source lang="java">

import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {

 PrintWriter out = null;
 public void doGet(HttpServletRequest req, HttpServletResponse res)
                              throws ServletException, IOException {
   try {
     // Get a reader to read the incoming data
     BufferedReader reader = req.getReader();
     // Get a writer to write the data in UTF-8
     res.setContentType("text/html; charset=UTF-8");
     //PrintWriter out = res.getWriter();
     out = new PrintWriter(
       new OutputStreamWriter(res.getOutputStream(), "UTF8"), true);
     char[] buf = new char[4 * 1024];  // 4Kchar buffer
     int len;
     while ((len = reader.read(buf, 0, buf.length)) != -1) {
       out.write(buf, 0, len);
     }
     out.flush();
   }
   catch (Exception e) {
     out.println("Problem filtering page to UTF-8");
     getServletContext().log(e, "Problem filtering page to UTF-8");
   }
   out.println("Done");
 }
 public void doPost(HttpServletRequest req, HttpServletResponse res)
                        throws ServletException, IOException {
   doGet(req, res);
 }

}</source>





Set content type to charset=ISO-/td>

   <source lang="java">

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class UnknownEncodingServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,
     ServletException {
   response.setContentType("text/html; charset=ISO-8850-1");
   PrintWriter out = response.getWriter();
 }

}</source>