/************************************************************************** OmegaT - Computer Assisted Translation (CAT) tool with fuzzy matching, translation memory, keyword search, glossaries, and translation leveraging into updated projects. Copyright (C) 2000-2006 Keith Godfrey and Maxym Mykhalchuk Home page: http://www.omegat.org/ Support center: http://groups.yahoo.com/group/OmegaT/ This file is part of OmegaT. OmegaT is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OmegaT 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 for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. **************************************************************************/ package org.omegat.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.PropertyResourceBundle; import java.util.ResourceBundle; /** * Localizable strings. * <p> * Please don't add any new strings here, use <code>getString</code> method. * This class still has so many strings for legacy reasons only. * * @author Keith Godfrey * @author Maxym Mykhalchuk * @author Henry Pijffers (henry.pijffers@saxnot.com) */ public class OStrings { private static String __VERSION_KEY = "version"; private static String __UPDATE_KEY = "update"; private static String __REVISION_KEY = "revision"; private static String __BETA_KEY = "beta"; /** For custom deployments of OmegaT that need to be distinguishable from "stock" OmegaT */ public static final String BRANDING = ""; /** Just a version, e.g. "1.6" */ public static final String VERSION = ResourceBundle.getBundle("org/omegat/Version") .getString(__VERSION_KEY); /** Update number, e.g. 2, for 1.6.0_02 */ public static final String UPDATE = ResourceBundle.getBundle("org/omegat/Version") .getString(__UPDATE_KEY); /** Repository revision number, e.g. r7500 */ public static final String REVISION = ResourceBundle.getBundle("org/omegat/Version") .getString(__REVISION_KEY); /** Indicates whether this is a "beta" (or "latest") version or a "standard" version. */ public static final boolean IS_BETA = !ResourceBundle.getBundle("org/omegat/Version") .getString(__BETA_KEY).isEmpty(); /** Resource bundle that contains all the strings */ private static ResourceBundle bundle = ResourceBundle.getBundle("org/omegat/Bundle"); /** * Returns resource bundle. */ public static ResourceBundle getResourceBundle() { return bundle; } /** * Loads resources from the specified file. If the file cannot be loaded, * resources are reverted to the default locale. Useful when testing * localisations outside the jar file. */ public static void loadBundle(String filename) { boolean loaded = false; try { // Load the resource bundle FileInputStream in = new FileInputStream(filename); bundle = new PropertyResourceBundle(in); loaded = true; in.close(); } catch (FileNotFoundException exception) { System.err.println("Resource bundle file not found: " + filename); } catch (IOException exception) { System.err.println("Error while reading resource bundle file: " + filename); } // Check if the resource bundle has been successfully // loaded, and if not, revert to the default if (!loaded) { System.err.println("Reverting to resource bundle for the default locale"); bundle = ResourceBundle.getBundle("org/omegat/Bundle"); } } /** Returns a localized String for a key */ public static String getString(String key) { return bundle.getString(key); } /** * Returns a localized string for a key, formatted with the given arguments. Formatting is done by * {@link StringUtil#format(String, Object...)}. */ public static String getString(String key, Object... formatArgs) { return StringUtil.format(getString(key), formatArgs); } /** * Get the application name for display purposes (includes branding) */ public static String getApplicationDisplayName() { String name = bundle.getString("application-name"); return BRANDING.isEmpty() ? name : name + " " + BRANDING; } /** * Get the raw application name (suitable for file paths, etc.; includes branding) */ public static String getApplicationName() { String name = bundle.getString("application-name"); return BRANDING.isEmpty() ? name : name + "_" + BRANDING; } /** * Get the token for identifying stock vs branded OmegaT files. Intended to * be used in filenames, etc. Is the empty string if {@link #BRANDING} is * empty. */ public static String getBrandingToken() { return BRANDING.isEmpty() ? "" : "-" + BRANDING; } /** * Returns the OmegaT "pretty" version for display (includes the application name). * Example: "OmegaT 3.5", "OmegaT 3.5.1_2" */ public static String getDisplayNameAndVersion() { if (UPDATE != null && !UPDATE.equals("0")) { return StringUtil.format(getString("app-version-template-pretty-update"), getApplicationDisplayName(), VERSION, UPDATE); } else { return StringUtil.format(getString("app-version-template-pretty"), getApplicationDisplayName(), VERSION); } } /** * Returns the OmegaT full version for logs, etc. (includes the application name). * Example: "OmegaT-3.5_0_dev", "OmegaT-3.5.1_0_r7532" */ public static String getNameAndVersion() { return StringUtil.format(getString("app-version-template"), getApplicationName(), VERSION, UPDATE, REVISION); } /** * Returns the OmegaT full version for logs, etc. (does not include the application name). * Example: "3.5_0_dev", "3.5.1_0_r7532" */ public static String getVersion() { return StringUtil.format(getString("version-template"), VERSION, UPDATE, REVISION); } /** Returns default text for progress bar when no project is loaded * */ public static String getProgressBarDefaultPrecentageText() { return StringUtil.format(OStrings.getString("MW_PROGRESS_DEFAULT_PERCENTAGE"), "--%", "--", "--%", "--", "--"); } /** * Returns the textual marker for the current segment. * NOTE: segment marker is assumed to contain "0000" string to overwrite * with entry number. If zeros not detected, entry number will not be * displayed */ public static String getSegmentMarker() { return getString("TF_CUR_SEGMENT_START"); } }