/*******************************************************************************
 * Copyright (c) 2010 BSI Business Systems Integration AG.
 * 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:
 *     BSI Business Systems Integration AG - initial API and implementation
 ******************************************************************************/
package org.eclipse.scout.sdk;

import org.eclipse.scout.commons.nls.DynamicNls;

/**
 * This class provides the nls support.
 * Do not change any member nor field of this class anytime otherwise the
 * nls support is not anymore garanteed.
 * This calss is auto generated and is maintained by the plugins
 * Texts.nls file in the root directory of the plugin.
 * 
 * @see translation.nls
 */
public class Texts extends DynamicNls {
  public static final String RESOURCE_BUNDLE_NAME = "resources.texts.Texts";//$NON-NLS-1$
  private static Texts instance = new Texts();

  public static Texts getInstance() {
    return instance;
  }

  public static String get(String key, String... messageArguments) {
    return instance.getText(key, messageArguments);
  }

  public static String get(String key) {
    return instance.getText(key, new String[0]);
  }

  protected Texts() {
    registerResourceBundle(RESOURCE_BUNDLE_NAME, Texts.class);
  }
}
