blob: faf66b8832b10b65668e7339e3e551b88a824415 [file] [log] [blame]
//------------------------------------------------------------------------------
// 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;
}
}