/* * WPCleaner: A tool to help on Wikipedia maintenance tasks. * Copyright (C) 2013 Nicolas Vervelle * * See README.txt file for licensing information. */ package org.wikipediacleaner.i18n; import java.text.MessageFormat; import java.util.Locale; import org.wikipediacleaner.api.constants.EnumLanguage; import org.wikipediacleaner.utils.Configuration; import org.xnap.commons.i18n.I18n; import org.xnap.commons.i18n.I18nFactory; /** * Internationalization management. */ public class GT { private static GT getTextWrapper; private final I18n i18n; private EnumLanguage language; /** * Constructor. */ private GT() { Configuration config = Configuration.getConfiguration(); language = config.getLanguage(); i18n = I18nFactory.getI18n(getClass(), "org.wikipediacleaner.i18n.Messages", language.getLocale()); } /** * @param msg Original text. * @return Translated text. */ public static String _(String msg) { return getTextWrapper().getString(msg); } /** * @param msg Original text (with variables place holders). * @param variable Variable value. * @return Translated text. */ public static String _(String msg, String variable) { return getTextWrapper().getString(msg, new Object[] { variable }); } /** * @param msg Original text (with variables place holders). * @param msgPlural Original text in plural (with variables place holders). * @param n Plural indicator. * @param variable Variable value. * @return Translated text. */ public static String __(String msg, String msgPlural, long n, String variable) { return getTextWrapper().getString(msg, msgPlural, n, new Object[] { variable }); } /** * @param msg Original text (with variables place holders). * @param objects Variables values. * @return Translated text. */ public static String _(String msg, Object[] objects) { return getTextWrapper().getString(msg, objects); } /** * @param msg Original text (with variables place holders). * @param msgPlural Original text in plural (with variables place holders). * @param n Plural indicator. * @param objects Variables values. * @return Translated text. */ public static String __(String msg, String msgPlural, long n, Object[] objects) { return getTextWrapper().getString(msg, msgPlural, n, objects); } /** * Utility function to mark a string as translatable without translating it. * * @param msg Original text. * @return Original text. */ public static String _No(String msg) { return msg; } /** * @return Wrapper. */ private static GT getTextWrapper() { if (getTextWrapper == null) { getTextWrapper = new GT(); } return getTextWrapper; } /** * @param msg Original text. * @return Translated text. */ private String getString(String msg) { return i18n.tr(msg); } /** * @param msg Original text. * @param msgPlural Original text in plural. * @param n Plural indicator. * @return Translated text. */ private String getString(String msg, String msgPlural, long n) { return i18n.trn(msg, msgPlural, n); } /** * @param msg Original text (with variables place holders). * @param objects Variables values. * @return Translated text. */ private String getString(String msg, Object[] objects) { return i18n.tr(msg, objects); } /** * @param msg Original text (with variables place holders). * @param msgPlural Original text in plural (with variables place holders). * @param n Plural indicator. * @param objects Variables values. * @return Translated text. */ private String getString(String msg, String msgPlural, long n, Object[] objects) { if (msg == null) { return null; } String txt = null; if ((language == null) || (language == EnumLanguage.EN)) { txt = (n == 1) ? msg : msgPlural; } else { txt = getString(msg, msgPlural, n); } return MessageFormat.format(txt, objects); } /** * Change the current language. * * @param language Current language. */ private void setLanguage(EnumLanguage language) { Locale locale = (language != null) ? language.getLocale() : Locale.getDefault(); Locale.setDefault(locale); this.language = language; i18n.setLocale(locale); } /** * Change the current language. * * @param language Current language. */ public static void setCurrentLanguage(EnumLanguage language) { getTextWrapper().setLanguage(language); } }