Package net.sf.latexdraw.lang

Source Code of net.sf.latexdraw.lang.LangTool

package net.sf.latexdraw.lang;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import net.sf.latexdraw.badaboom.BadaboomCollector;
import net.sf.latexdraw.util.LNamespace;
import net.sf.latexdraw.util.LPath;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
* This class defines the localisation.<br>
*<br>
* This file is part of LaTeXDraw<br>
* Copyright (c) 2005-2014 Arnaud BLOUIN<br>
*<br>
*  LaTeXDraw 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 2 of the License, or
*  (at your option) any later version.<br>
*<br>
*  LaTeXDraw is distributed 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.<br>
*<br>
* 09/01/06<br>
* @author Arnaud BLOUIN
* @version 3.0
*/
public final class LangTool {
  public enum Lang {
    CA {
      @Override
      public String getName() {
        return "Català";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.ca";//$NON-NLS-1$
      }
    },
    RU {
      @Override
      public String getName() {
        return "Russkiy yazyk";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.ru";//$NON-NLS-1$
      }
    },
    CS {
      @Override
      public String getName() {
        return "Čeština";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.cs";//$NON-NLS-1$
      }
    },SI {
      @Override
      public String getName() {
        return "\u0dc3\u0dd2\u0d82\u0dc4\u0dbd";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.si";//$NON-NLS-1$
      }
    }, SR {
      @Override
      public String getName() {
        return "\u0441\u0440\u043f\u0441\u043a\u0438";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.sr";//$NON-NLS-1$
      }
    }, HU {
      @Override
      public String getName() {
        return "Magyar";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.hu";//$NON-NLS-1$
      }
    }, VI {
      @Override
      public String getName() {
        return "Ti\u1ebfng Vi\u1ec7t";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.vi";//$NON-NLS-1$
      }
    }, PT_BR {
      @Override
      public String getName() {
        return "Portugu\u00eas Brasileiro";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.pt-BR";//$NON-NLS-1$
      }
    }, JA {
      @Override
      public String getName() {
        return "\u65e5\u672c\u8a9e";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.ja";//$NON-NLS-1$
      }

    }, TR {
      @Override
      public String getName() {
        return "T\u00fcrk\u00e7e";//$NON-NLS-1$
      }
      @Override
      public String getToken() {
        return "lang.tr";//$NON-NLS-1$
      }
    }, EN_BR {
      @Override
      public String getName() {
        return "English";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.en";//$NON-NLS-1$
      }
    }, EN_US {
      @Override
      public String getName() {
        return "English-US";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.en-US";//$NON-NLS-1$
      }
    }, FR {
      @Override
      public String getName() {
        return "Fran\u00e7ais";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.fr";//$NON-NLS-1$
      }
    }, ES {
      @Override
      public String getName() {
        return "Espa\u00f1ol";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.es";//$NON-NLS-1$
      }
    }, DE {
      @Override
      public String getName() {
        return "Deutsch";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.de";//$NON-NLS-1$
      }
    }, IT {
      @Override
      public String getName() {
        return "Italiano";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.it";//$NON-NLS-1$
      }
    }, PL {
      @Override
      public String getName() {
        return "J\u0119zyk polski";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.pl";//$NON-NLS-1$
      }
    }, UK {
      @Override
      public String getName() {
        return "українська мова";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.uk";//$NON-NLS-1$
      }
    }, zh_CN {
      @Override
      public String getName() {
        return "\u4e2d\u6587";//$NON-NLS-1$
      }

      @Override
      public String getToken() {
        return "lang.zh_CN";//$NON-NLS-1$
      }
    };


    /**
     * @return The name of the language.
     * @since 3.0
     */
    public abstract String getName();

    /**
     * @return The token corresponding to the language.
     * @since 3.0
     */
    public abstract String getToken();

    /**
     * @return The language used by default.
     */
    public static Lang getDefaultLanguage() {
      return EN_BR;
    }

    /**
     * @param name The name of the language.
     * @return The Lang object corresponding to the given language name, or the default language is null or not found.
     * @since 3.0
     */
    public static Lang getLanguage(final String name) {
      final Lang lang = INSTANCE.getMapLangs().get(name);
      return lang==null ? EN_BR : lang;
    }


    /**
     * @return The language token (e.g. LANG_FR) corresponding to the system language.
     * @since 3.0
     */
    public static Lang getSystemLanguage() {
      final Lang language = INSTANCE.getMapLangs().get(System.getProperty("user.language"));//$NON-NLS-1$
      return language==null ? Lang.getDefaultLanguage() : language;
    }
  }

  /** The string corresponding to a missing key. */
  public static final String MISSING_KEY = "!missingKey!";//$NON-NLS-1$

  private static final ResourceBundle RES_BUNDLE_LFRAME;

  private static final ResourceBundle RES_BUNDLE_DIALOG_FRAME;

  private static final ResourceBundle RES_BUNDLE_OTHERS;

  private static final ResourceBundle RES_BUNDLE_16;

  private static final ResourceBundle RES_BUNDLE_17;

  private static final ResourceBundle RES_BUNDLE_18;

  private static final ResourceBundle RES_BUNDLE_19;

  private static final ResourceBundle RES_BUNDLE_ACTIONS;

  /** The singleton to use when wanting to use language utilities. */
  public static final LangTool INSTANCE = new LangTool();

  private static final Lang LANG_CURRENT = INSTANCE.readLang();

  /** This map provides an easy access to the language items. */
  private final Map<String, Lang> mapLangs = new HashMap<>();

  static {
    final String token = LangTool.getCurrentLanguage().getToken();

    RES_BUNDLE_LFRAME      = ResourceBundle.getBundle(token+".LaTeXDrawFrame")//$NON-NLS-1$
    RES_BUNDLE_DIALOG_FRAME   = ResourceBundle.getBundle(token+".dialogFrames");    //$NON-NLS-1$
    RES_BUNDLE_OTHERS      = ResourceBundle.getBundle(token+".others");       //$NON-NLS-1$
    RES_BUNDLE_16        = ResourceBundle.getBundle(token+".1_6"); //$NON-NLS-1$
    RES_BUNDLE_17        = ResourceBundle.getBundle(token+".1_7"); //$NON-NLS-1$
    RES_BUNDLE_18        = ResourceBundle.getBundle(token+".1_8"); //$NON-NLS-1$
    RES_BUNDLE_19        = ResourceBundle.getBundle(token+".1_9"); //$NON-NLS-1$
    RES_BUNDLE_ACTIONS         = ResourceBundle.getBundle(token+".actions"); //$NON-NLS-1$
  }


  private LangTool() {
    super();
    initMap();
  }


  private void initMap() {
    // Recording the languages
    mapLangs.put("fr", Lang.FR); //$NON-NLS-1$
    mapLangs.put("en", Lang.EN_BR); //$NON-NLS-1$
    mapLangs.put("es", Lang.ES); //$NON-NLS-1$
    mapLangs.put("de", Lang.DE); //$NON-NLS-1$
    mapLangs.put("it", Lang.IT); //$NON-NLS-1$
    mapLangs.put("pl", Lang.PL); //$NON-NLS-1$
    mapLangs.put("tr", Lang.TR); //$NON-NLS-1$
    mapLangs.put("ja", Lang.JA); //$NON-NLS-1$
    mapLangs.put("vi", Lang.VI); //$NON-NLS-1$
    mapLangs.put("hu", Lang.HU); //$NON-NLS-1$
    mapLangs.put("pt-BR", Lang.PT_BR); //$NON-NLS-1$
    mapLangs.put("sr", Lang.SR); //$NON-NLS-1$
    mapLangs.put("ru", Lang.RU); //$NON-NLS-1$
    mapLangs.put("cs", Lang.CS); //$NON-NLS-1$
    mapLangs.put("ca", Lang.CA); //$NON-NLS-1$
    mapLangs.put("uk", Lang.UK); //$NON-NLS-1$
    mapLangs.put("si", Lang.SI); //$NON-NLS-1$
    mapLangs.put("zh-CN", Lang.zh_CN); //$NON-NLS-1$

    mapLangs.put(Lang.FR.getName(), Lang.FR);
    mapLangs.put(Lang.EN_BR.getName(), Lang.EN_BR);
    mapLangs.put(Lang.DE.getName(), Lang.DE);
    mapLangs.put(Lang.ES.getName(), Lang.ES);
    mapLangs.put(Lang.IT.getName(), Lang.IT);
    mapLangs.put(Lang.PL.getName(), Lang.PL);
    mapLangs.put(Lang.EN_US.getName(), Lang.EN_US);
    mapLangs.put(Lang.TR.getName(), Lang.TR);
    mapLangs.put(Lang.JA.getName(), Lang.JA);
    mapLangs.put(Lang.VI.getName(), Lang.VI);
    mapLangs.put(Lang.HU.getName(), Lang.HU);
    mapLangs.put(Lang.PT_BR.getName(), Lang.PT_BR);
    mapLangs.put(Lang.SR.getName(), Lang.SR);
    mapLangs.put(Lang.RU.getName(), Lang.RU);
    mapLangs.put(Lang.CS.getName(), Lang.CS);
    mapLangs.put(Lang.CA.getName(), Lang.CA);
    mapLangs.put(Lang.UK.getName(), Lang.UK);
    mapLangs.put(Lang.SI.getName(), Lang.SI);
    mapLangs.put(Lang.zh_CN.getName(), Lang.zh_CN);
  }


  /**
   * @return the map containing mapping between name and languages.
   * @since 3.0
   */
  public Map<String, Lang> getMapLangs() {
    return mapLangs;
  }


  /**
   * Allows to get a string of the others components
   * @param key The key of the string
   * @return The string
   */
  public String getStringOthers(final String key) {
    return getStringFromResourceBundle(key, RES_BUNDLE_OTHERS);
  }




  /**
   * Allows to get a string of the LaTeXDrawFrame
   * @param key The key of the string
   * @return The string
   */
  public String getStringLaTeXDrawFrame(final String key) {
    return getStringFromResourceBundle(key, RES_BUNDLE_LFRAME);
  }



  /**
   * Allows to get a string of the new 1.6 strings.
   * @param key The key of the string.
   * @return The string.
   */
  public String getString16(final String key) {
    return getStringFromResourceBundle(key, RES_BUNDLE_16);
  }



  /**
   * Allows to get a string of the new 1.7 strings.
   * @param key The key of the string.
   * @return The string.
   * @since 1.7
   */
  public String getString17(final String key) {
    return getStringFromResourceBundle(key, RES_BUNDLE_17);
  }



  /**
   * Allows to get a string of the new 1.8 strings.
   * @param key The key of the string.
   * @return The string.
   * @since 1.8
   */
  public String getString18(final String key) {
    return getStringFromResourceBundle(key, RES_BUNDLE_18);
  }



  /**
   * Allows to get a string of the new 1.8 strings.
   * @param key The key of the string.
   * @return The string.
   * @since 1.8
   */
  public String getString19(final String key) {
    return getStringFromResourceBundle(key, RES_BUNDLE_19);
  }



  /**
   * Allows to get a string of the dialog frames.
   * @param key The key of the string.
   * @return The string.
   */
  public String getStringDialogFrame(final String key) {
    return getStringFromResourceBundle(key, RES_BUNDLE_DIALOG_FRAME);
  }


  /**
   * Allows to get a string related to actions.
   * @param key The key of the string.
   * @return The string.
   */
  public String getStringActions(final String key) {
    return getStringFromResourceBundle(key, RES_BUNDLE_ACTIONS);
  }


  /**
   * @param key The key of the string.
   * @param bundle The bundle to search into.
   * @return The found String or MISSING_KEY or !key!
   * @since 3.0
   */
  private String getStringFromResourceBundle(final String key, final ResourceBundle bundle) {
    String str;

    if(key==null || bundle==null)
      str = MISSING_KEY;
    else
      try { str = bundle.getString(key); }
      catch(final MissingResourceException e) { str = '!' + key + '!'; }

    return str;
  }




  /**
   * Allows to get the language of the program.
   * @return The read language, or the default language.
   */
  public Lang readLang() {
    try {
      final Path xml = Paths.get(LPath.PATH_PREFERENCES_XML_FILE);

      if(Files.exists(xml)) {
              final Node node = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(Files.newInputStream(xml)).getFirstChild();
              final NodeList nl;

              if(node!=null && node.getNodeName().equals(LNamespace.XML_ROOT_PREFERENCES)) {
                nl         = node.getChildNodes();
                final int size   = nl.getLength();

                for(int i=0 ; i<size; i++)
                  if(nl.item(i).getNodeName().equals(LNamespace.XML_LANG))
                    return Lang.getLanguage(nl.item(i).getTextContent());
              }
      }
    }
    catch(final ParserConfigurationException | IOException | SAXException e) { BadaboomCollector.INSTANCE.add(e); }
    return Lang.getSystemLanguage();
  }


  /**
   * Allows to get the language of the package.
   * @return The language of the package.
   */
  public static Lang getCurrentLanguage() {
    return LANG_CURRENT==null ? Lang.getSystemLanguage() : LANG_CURRENT ;
  }
}
TOP

Related Classes of net.sf.latexdraw.lang.LangTool

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.