//------------------------------------------------------------------------------ // Copyright (c) 2005, 2006 IBM Corporation and others. // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // which accompanies this distribution, and is available at // http://www.eclipse.org/legal/epl-v10.html // // Contributors: // IBM Corporation - initial implementation //------------------------------------------------------------------------------ package org.eclipse.epf.common.utils; import java.io.File; import java.text.MessageFormat; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * Helper utiltiies for handling internationalization. * * @author Kelvin Low * @since 1.0 */ public class I18nUtil { /** * Private constructor to prevent this class from being instantiated. All * methods in this class should be static. */ private I18nUtil() { } /** * Returns the localized string associated with a resource key. * * @param resourceBundle * A resource bundle. * @param key * A resource key. * @return A localized string. */ public static String getString(ResourceBundle resourceBundle, String key) { if (resourceBundle != null) { try { return resourceBundle.getString(key); } catch (MissingResourceException e) { } } return '[' + key + ']'; } /** * Returns the localized string associated with a resource key and formatted * with a given string. * * @param resourceBundle * A resource bundle. * @param key * A resource key. * @param data * An object. * @return A formatted localized string. */ public static String formatString(ResourceBundle resourceBundle, String key, Object data) { if (resourceBundle != null) { try { String localizedStr = resourceBundle.getString(key); return MessageFormat .format(localizedStr, new Object[] { data }); } catch (MissingResourceException e) { } } return '[' + key + ']'; } /** * Returns the localized string associated with a resource key and formatted * with two given string. * * @param resourceBundle * A resource bundle. * @param key * A resource key. * @param data1 * An object. * @param data2 * An object. * @return A formatted localized string. */ public static String formatString(ResourceBundle resourceBundle, String key, Object data1, Object data2) { if (resourceBundle != null) { try { String localizedStr = resourceBundle.getString(key); return MessageFormat.format(localizedStr, new Object[] { data1, data2 }); } catch (MissingResourceException e) { } } return '[' + key + ']'; } /** * Returns the localized string associated with a resource key and formatted * with a given string. * * @param resourceBundle * A resource bundle. * @param key * A resource key. * @param data * An array of objects. * @return A formatted localized string. */ public static String formatString(ResourceBundle resourceBundle, String key, Object[] data) { if (resourceBundle != null) { try { String localizedStr = resourceBundle.getString(key); return MessageFormat.format(localizedStr, data); } catch (MissingResourceException e) { } } return '[' + key + ']'; } /** * Returns the localized integer value associated with a resource key. * * @param resourceBundle * A resource bundle. * @param key * A resource key. * @param defaultValue * The default value to return if the resource key cannot be * located. * @return A localized interger value. */ public static int getInt(String intString, int defaultValue) { try { if (intString != null) { return Integer.parseInt(intString); } } catch (Exception e) { } return defaultValue; } /** * Returns the localized version of a US English resource file. * * @param path * The absolute path to a resource file. * @param locale * A locale. * @return The localized resource file. If none exists, return null. */ public static String getLocalizedFile(String path, Locale locale) { if (locale.equals(Locale.US) || path == null) { return null; } // Build the locale string array. This is used to construct the // localized file names. String language = locale.getLanguage(); String country = locale.getCountry(); String variant = locale.getVariant(); String[] localeStrs = new String[3]; if (variant != null && variant.length() > 0) { localeStrs[0] = locale.toString(); } if (country != null && country.length() > 0) { localeStrs[1] = language + "_" + country; //$NON-NLS-1$ } if (language != null) { localeStrs[2] = language; } String dir = path.replace('\\', '/'); String fileName; int pathIndex = dir.lastIndexOf("/"); //$NON-NLS-1$ if (pathIndex > 0) { dir = path.substring(0, pathIndex + 1); fileName = path.substring(pathIndex + 1); } else { fileName = dir; dir = ""; //$NON-NLS-1$ } String fileExt = ""; //$NON-NLS-1$ int extIndex = fileName.lastIndexOf("."); //$NON-NLS-1$ if (extIndex > 0) { fileExt = fileName.substring(extIndex); fileName = fileName.substring(0, extIndex); } fileName = dir + fileName + "_"; //$NON-NLS-1$ // Look for the localized file. for (int i = 0; i < 3; i++) { if (localeStrs[i] != null) { // Gets the localized path name. String fname = fileName + localeStrs[i] + fileExt; File file = new File(fname); if (file.exists()) { return fname; } } } return null; } }