/** * Copyright (C) 2017 Jan Schäfer (jansch@users.sourceforge.net) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jskat.util; import java.text.MessageFormat; import java.util.Locale; import java.util.ResourceBundle; import org.jskat.data.JSkatOptions; import org.jskat.data.JSkatOptions.SupportedLanguage; /** * Helper class for skat related i18n string resolves */ public class JSkatResourceBundle { public final static JSkatResourceBundle INSTANCE = new JSkatResourceBundle(); private JSkatOptions options = null; private ResourceBundle strings = null; private JSkatResourceBundle() { this.options = JSkatOptions.instance(); loadStrings(); } private void loadStrings() { Locale locale = null; if (SupportedLanguage.ENGLISH.equals(this.options.getLanguage())) { locale = Locale.ENGLISH; } else if (SupportedLanguage.GERMAN.equals(this.options.getLanguage())) { locale = Locale.GERMAN; } else { locale = Locale.getDefault(); } this.strings = ResourceBundle.getBundle("org/jskat/i18n/jskat_strings", //$NON-NLS-1$ locale); } /** * Gets the string resource bundle. * * @return String resource bundle */ public ResourceBundle getStringResources() { return strings; } /** * Reloads the strings<br> * e.g. after changing the language or the card face */ public void reloadStrings() { loadStrings(); } /** * Gets an i18n string * * @param key * Key * @return i18n string */ public String getString(final String key) { return this.strings.getString(key); } /** * Gets an i18n string * * @param key * Key * @param params * Parameters * @return i18n string */ public String getString(final String key, Object... params) { return MessageFormat.format(this.strings.getString(key), params); } /** * Gets the i18n string for a game type according the current card face * * @param gameType * Game type * @return i18n string according the current card face */ public String getGameType(final GameType gameType) { String result = null; switch (gameType) { case CLUBS: case SPADES: case HEARTS: case DIAMONDS: result = getGameTypeStringForCardFace(gameType); break; case NULL: result = this.strings.getString("null"); //$NON-NLS-1$ break; case GRAND: result = this.strings.getString("grand"); //$NON-NLS-1$ break; case RAMSCH: result = this.strings.getString("ramsch"); //$NON-NLS-1$ break; case PASSED_IN: result = this.strings.getString("passed_in"); //$NON-NLS-1$ break; } return result; } /** * Gets the i18n string for a card according the current card face * * @param card * Card * @return i18n string according the current card face */ public String getCardStringForCardFace(final Card card) { return getSuitStringForCardFace(card.getSuit()) + " " + getRankStringForCardFace(card.getRank()); //$NON-NLS-1$ } /** * Gets the i18n string for a rank according the current card face * * @param rank * Rank * @return i18n string according the current card face */ public String getRankStringForCardFace(final Rank rank) { String result = null; switch (this.options.getCardSet().getCardFace()) { case FRENCH: case TOURNAMENT: result = getFrenchRankString(rank); break; case GERMAN: result = getGermanRankString(rank); break; } return result; } private String getFrenchRankString(final Rank rank) { String result = null; switch (rank) { case ACE: result = this.strings.getString("ace"); //$NON-NLS-1$ break; case KING: result = this.strings.getString("king"); //$NON-NLS-1$ break; case QUEEN: result = this.strings.getString("queen"); //$NON-NLS-1$ break; case JACK: result = this.strings.getString("jack"); //$NON-NLS-1$ break; case TEN: result = this.strings.getString("ten"); //$NON-NLS-1$ break; case NINE: result = this.strings.getString("nine"); //$NON-NLS-1$ break; case EIGHT: result = this.strings.getString("eight"); //$NON-NLS-1$ break; case SEVEN: result = this.strings.getString("seven"); //$NON-NLS-1$ break; } return result; } private String getGermanRankString(final Rank rank) { String result = null; switch (rank) { case ACE: result = this.strings.getString("ace_german"); //$NON-NLS-1$ break; case KING: result = this.strings.getString("king_german"); //$NON-NLS-1$ break; case QUEEN: result = this.strings.getString("queen_german"); //$NON-NLS-1$ break; case JACK: result = this.strings.getString("jack_german"); //$NON-NLS-1$ break; case TEN: result = this.strings.getString("ten_german"); //$NON-NLS-1$ break; case NINE: result = this.strings.getString("nine_german"); //$NON-NLS-1$ break; case EIGHT: result = this.strings.getString("eight_german"); //$NON-NLS-1$ break; case SEVEN: result = this.strings.getString("seven_german"); //$NON-NLS-1$ break; } return result; } /** * Gets the i18n string for a suit according the current card face * * @param suit * Suit * @return i18n string according the current card face */ public String getSuitStringForCardFace(final Suit suit) { String result = null; switch (this.options.getCardSet().getCardFace()) { case FRENCH: case TOURNAMENT: result = getFrenchSuitString(suit); break; case GERMAN: result = getGermanSuitString(suit); break; } return result; } private String getFrenchSuitString(final Suit suit) { String result = null; switch (suit) { case CLUBS: result = this.strings.getString("clubs"); //$NON-NLS-1$ break; case SPADES: result = this.strings.getString("spades"); //$NON-NLS-1$ break; case HEARTS: result = this.strings.getString("hearts"); //$NON-NLS-1$ break; case DIAMONDS: result = this.strings.getString("diamonds"); //$NON-NLS-1$ break; } return result; } private String getGermanSuitString(final Suit suit) { String result = null; switch (suit) { case CLUBS: result = this.strings.getString("clubs_german"); //$NON-NLS-1$ break; case SPADES: result = this.strings.getString("spades_german"); //$NON-NLS-1$ break; case HEARTS: result = this.strings.getString("hearts_german"); //$NON-NLS-1$ break; case DIAMONDS: result = this.strings.getString("diamonds_german"); //$NON-NLS-1$ break; } return result; } private String getGameTypeStringForCardFace(final GameType gameType) { String result = null; switch (this.options.getCardSet().getCardFace()) { case FRENCH: case TOURNAMENT: result = getFrenchGameTypeString(gameType); break; case GERMAN: result = getGermanGameTypeString(gameType); break; } return result; } private String getGermanGameTypeString(final GameType gameType) { String result = null; switch (gameType) { case CLUBS: result = this.strings.getString("clubs_german"); //$NON-NLS-1$ break; case SPADES: result = this.strings.getString("spades_german"); //$NON-NLS-1$ break; case HEARTS: result = this.strings.getString("hearts_german"); //$NON-NLS-1$ break; case DIAMONDS: result = this.strings.getString("diamonds_german"); //$NON-NLS-1$ break; default: // other game types not needed here break; } return result; } private String getFrenchGameTypeString(final GameType gameType) { String result = null; switch (gameType) { case CLUBS: result = this.strings.getString("clubs"); //$NON-NLS-1$ break; case SPADES: result = this.strings.getString("spades"); //$NON-NLS-1$ break; case HEARTS: result = this.strings.getString("hearts"); //$NON-NLS-1$ break; case DIAMONDS: result = this.strings.getString("diamonds"); //$NON-NLS-1$ break; default: // other game types not needed here break; } return result; } /** * Gets the {@link Locale} of the i18n strings * * @return Locale */ public Locale getLocale() { return this.strings.getLocale(); } /** * Gets the i18n for a player position * * @param position * Player position * @return i18n for player position */ public Object getPlayerString(Player position) { String result = null; switch (position) { case FOREHAND: result = this.strings.getString("forehand"); break; case MIDDLEHAND: result = this.strings.getString("middlehand"); break; case REARHAND: result = this.strings.getString("rearhand"); break; } return result; } }