001: /*
002: * Copyright 1999-2004 The Apache Software Foundation
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: /*
018: *
019: * This class was originally written by Jason Hunter <jhunter@acm.org>
020: * as part of the book "Java Servlet Programming" (O'Reilly).
021: * See http://www.servlets.com/book for more information.
022: * Used by Sun Microsystems with permission.
023: *
024: */
025:
026: package org.apache.tomcat.util.http;
027:
028: import java.util.*;
029:
030: /**
031: * A mapping to determine the (somewhat arbitrarily) preferred charset for
032: * a given locale. Supports all locales recognized in JDK 1.1.
033: * This class was originally written by Jason Hunter [jhunter@acm.org]
034: * as part of the book "Java Servlet Programming" (O'Reilly).
035: * See <a href="http://www.servlets.com/book">
036: * http://www.servlets.com/book</a> for more information.
037: * Used by Sun Microsystems with permission.
038: */
039: public class LocaleToCharsetMap {
040:
041: private static Hashtable map;
042:
043: static {
044: map = new Hashtable();
045:
046: map.put("ar", "ISO-8859-6");
047: map.put("be", "ISO-8859-5");
048: map.put("bg", "ISO-8859-5");
049: map.put("ca", "ISO-8859-1");
050: map.put("cs", "ISO-8859-2");
051: map.put("da", "ISO-8859-1");
052: map.put("de", "ISO-8859-1");
053: map.put("el", "ISO-8859-7");
054: map.put("en", "ISO-8859-1");
055: map.put("es", "ISO-8859-1");
056: map.put("et", "ISO-8859-1");
057: map.put("fi", "ISO-8859-1");
058: map.put("fr", "ISO-8859-1");
059: map.put("hr", "ISO-8859-2");
060: map.put("hu", "ISO-8859-2");
061: map.put("is", "ISO-8859-1");
062: map.put("it", "ISO-8859-1");
063: map.put("iw", "ISO-8859-8");
064: map.put("ja", "Shift_JIS");
065: map.put("ko", "EUC-KR"); // Requires JDK 1.1.6
066: map.put("lt", "ISO-8859-2");
067: map.put("lv", "ISO-8859-2");
068: map.put("mk", "ISO-8859-5");
069: map.put("nl", "ISO-8859-1");
070: map.put("no", "ISO-8859-1");
071: map.put("pl", "ISO-8859-2");
072: map.put("pt", "ISO-8859-1");
073: map.put("ro", "ISO-8859-2");
074: map.put("ru", "ISO-8859-5");
075: map.put("sh", "ISO-8859-5");
076: map.put("sk", "ISO-8859-2");
077: map.put("sl", "ISO-8859-2");
078: map.put("sq", "ISO-8859-2");
079: map.put("sr", "ISO-8859-5");
080: map.put("sv", "ISO-8859-1");
081: map.put("tr", "ISO-8859-9");
082: map.put("uk", "ISO-8859-5");
083: map.put("zh", "GB2312");
084: map.put("zh_TW", "Big5");
085:
086: }
087:
088: /**
089: * Gets the preferred charset for the given locale, or null if the locale
090: * is not recognized.
091: *
092: * @param loc the locale
093: * @return the preferred charset
094: */
095: public static String getCharset(Locale loc) {
096: String charset;
097:
098: // Try for an full name match (may include country)
099: charset = (String) map.get(loc.toString());
100: if (charset != null)
101: return charset;
102:
103: // If a full name didn't match, try just the language
104: charset = (String) map.get(loc.getLanguage());
105: return charset; // may be null
106: }
107: }
|