resource.java
来自「This is a resource based on j2me embedde」· Java 代码 · 共 291 行
JAVA
291 行
/* * * * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package com.sun.midp.i18n;import java.util.Hashtable;import com.sun.midp.main.Configuration;import com.sun.midp.l10n.*;import com.sun.midp.log.Logging;import com.sun.midp.log.LogChannels;/** * The Resource class retrieves the locale specific values such * as label strings and date formats from the locale specific * subclasses of com.sun.midp.i18n.ResourceBundle class. * The default locale is assumed to be en_US, meaning, * in the absence of any locale information being specified, en_US * will be assumed as the default locale. * * A subclass of ResourceBundle namely, * com.sun.midp.l10n.LocalizedStrings * is the default localization file, for a default locale of en_US. * This also acts as a template for future localization and is * easily localizable. The new localized file created should be * accompanied with a locale name following an underscore: for * example, a German one would be named "LocalizedStrings_de". * In this way, as many related locale-specific classes as needed * can be provided. * * The location of such locale-specific classes is expected to be * "com.sun.midp.l10n". */abstract public class Resource { /** Local handle to the current Resource structure. */ private static ResourceBundle res = null; static { res = null; String loc = Configuration.getProperty("microedition.locale"); if ((loc == null) || (loc.equals("en-US"))) { // the default case res = (ResourceBundle) new LocalizedStrings(); } else { String cls = "com.sun.midp.l10n.LocalizedStrings"; /* * This only checks for the first '-' in the locale, and * convert to '_' for Class.forName() to work. */ int hyphen; if ((hyphen = loc.indexOf('-')) != -1) { StringBuffer tmploc = new StringBuffer(loc); tmploc.setCharAt(hyphen, '_'); loc = tmploc.toString(); } while (true) { try { Class c = Class.forName(cls + "_" + loc); if (c != null) { res = (ResourceBundle) c.newInstance(); } } catch (Throwable t) {} if (res == null) { int pos = loc.lastIndexOf('_'); if (pos != -1) { loc = loc.substring(0, pos); } else { break; } } else { break; } } } if (res == null) { if (Logging.REPORT_LEVEL <= Logging.ERROR) { Logging.report(Logging.ERROR, LogChannels.LC_I18N, "Just can't proceed! Resource is NULL!!"); } // the default case res = (ResourceBundle) new LocalizedStrings(); // Porting suggestion: // System should quit MIDP runtime since resource is // not available. } } /** * Returns a localized string for the integer key. * @param key used to search the value pair. * @return the requested localized resource string. */ public static String getString(int key) { return res.getString(key); } /** * Returns a localized string for the argument string after substituting * values for the "%d" tokens in the localized string, where "d" is 1-9 * and representing a values 0-8 in an array. The tokens can be in any * order in the string. If the localized String is not found * the key is used as the localized string. If a "%" is not followed by * 1-9 then the "%" is dropped but the next char is put directly into the * output string, so "%%" will be "%" in the output and not count as part * of a token. Another example would be that "%a" would be just be "a". * <p> * For example, given "%2 had a little %1." and {"lamb", "Mary"} and there * is no localized string for the key, the result would be: * <p> * <blockquote>"Mary had a little lamb."</blockquote> * * @param key an original string in the source code with optional * substitution tokens * @param values values to substitute for the tokens in the resource * @return value of named resource with the tokens substituted * @exception ArrayIndexOutOfBoundsException if there are not enough values * to substitute */ public static String getString(int key, String[] values) { String str = getString(key); if (str == null) { return null; } return getString(str, values); } /** * Returns a localized string for the argument string after substituting * values for the "%d" tokens in the localized string, where "d" is 1-9 * and representing a values 0-8 in an array. The tokens can be in any * order in the string. If the localized String is not found * the key is used as the localized string. If a "%" is not followed by * 1-9 then the "%" is dropped but the next char is put directly into the * output string, so "%%" will be "%" in the output and not count as part * of a token. Another example would be that "%a" would be just be "a". * <p> * For example, given "%2 had a little %1." and {"lamb", "Mary"} and there * is no localized string for the key, the result would be: * <p> * <blockquote>"Mary had a little lamb."</blockquote> * * @param key an original string in the source code with optional * substitution tokens * @param values values to substitute for the tokens in the resource * @return value of named resource with the tokens substituted * @exception ArrayIndexOutOfBoundsException if there are not enough values * to substitute */ public static String getString(String str, String[] values) { boolean tokenMarkerFound = false; StringBuffer output; char currentChar; int length; if (str == null) { return null; } length = str.length(); output = new StringBuffer(length * 2); // try to avoid resizing for (int i = 0; i < length; i++) { currentChar = str.charAt(i); if (tokenMarkerFound) { if (currentChar < '1' || currentChar > '9') { // covers the "%%" case output.append(currentChar); } else { // substitute a value, "1" is index 0 into the value array output.append(values[currentChar - '1']); } tokenMarkerFound = false; } else if (currentChar == '%') { tokenMarkerFound = true; } else { output.append(currentChar); } } return output.toString(); } /** * Returns a locale-specific formatted date string. By default, * it will return like "Fri, 05 Dec 2000". * * @param dayOfWeek day of week * @param date date * @param month month * @param year year * @return formatted date string */ public static String getDateString(String dayOfWeek, String date, String month, String year) { return res.getLocalizedDateString(dayOfWeek, date, month, year); } /** * Returns a locale-specific formatted time string. By default, * it will return like "10:05:59 PM". * * @param hour hour * @param min minute * @param sec second * @param ampm AM or PM * @return formatted time string */ public static String getTimeString(String hour, String min, String sec, String ampm) { return res.getLocalizedTimeString(hour, min, sec, ampm); } /** * Returns a locale-specific formatted date and time string. By * default, it will like return "Fri, 05 Dec 2000 10:05:59 PM". * * @param dayOfWeek day of week * @param date date * @param month month * @param year year * @param hour hour * @param min minute * @param sec second * @param ampm AM or PM * @return formatted time and date string */ public static String getDateTimeString(String dayOfWeek, String date, String month, String year, String hour, String min, String sec, String ampm) { return res.getLocalizedDateTimeString(dayOfWeek, date, month, year, hour, min, sec, ampm); } /** * Returns what the first day of the week is; e.g., Sunday in US, * Monday in France. * @return numeric value for first day of week */ public static int getFirstDayOfWeek() { return res.getLocalizedFirstDayOfWeek(); } /** * Returns whether the AM_PM field comes after the time field * or not. * @return true, if AM/PM is after the time field. */ public static boolean isAMPMafterTime() { return res.isLocalizedAMPMafterTime(); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?