Update Lang.java so it can support other languages.

Also translated phase/step names
This commit is contained in:
Lyu Zong-Hong
2021-02-22 19:55:05 +09:00
parent 43b12c3289
commit e1f68bd06c
29 changed files with 345 additions and 82 deletions

View File

@@ -6,6 +6,8 @@ import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import forge.util.lang.*;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -13,12 +15,39 @@ import com.google.common.collect.Lists;
/**
* Static library containing language-related utility methods.
*/
public final class Lang {
public abstract class Lang {
/**
* Private constructor to prevent instantiation.
*/
private Lang() {
private static Lang instance;
protected String languageCode;
protected String countryCode;
public static void createInstance(String localeID) {
String[] splitLocale = localeID.split("-");
String language = splitLocale[0];
String country = splitLocale[1];
if (language.equals("de")) {
instance = new LangGerman();
} else if (language.equals("es")) {
instance = new LangSpanish();
} else if (language.equals("it")) {
instance = new LangItalian();
} else if (language.equals("zh")) {
instance = new LangChinese();
} else if (language.equals("ja")) {
instance = new LangJapanese();
} else { // default is English
instance = new LangEnglish();
}
instance.languageCode = language;
instance.countryCode = country;
}
public static Lang getInstance() {
return instance;
}
protected Lang() {
}
/**
@@ -29,17 +58,7 @@ public final class Lang {
* the number to get the ordinal suffix for.
* @return a string containing two characters.
*/
public static String getOrdinal(final int position) {
final String[] sufixes = new String[] { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" };
switch (position % 100) {
case 11:
case 12:
case 13:
return position + "th";
default:
return position + sufixes[position % 10];
}
}
public abstract String getOrdinal(final int position);
public static String joinHomogenous(final String s1, final String s2) {
final boolean has1 = StringUtils.isNotBlank(s1);
@@ -121,16 +140,8 @@ public final class Lang {
}
}
public static String getPossesive(final String name) {
if ("You".equalsIgnoreCase(name)) {
return name + "r"; // to get "your"
}
return name.endsWith("s") ? name + "'" : name + "'s";
}
public static String getPossessedObject(final String owner, final String object) {
return getPossesive(owner) + " " + object;
}
public abstract String getPossesive(final String name);
public abstract String getPossessedObject(final String owner, final String object);
public static boolean startsWithVowel(final String word) {
return isVowel(word.trim().charAt(0));

View File

@@ -0,0 +1,22 @@
package forge.util.lang;
import forge.util.Lang;
public class LangChinese extends Lang {
@Override
public String getOrdinal(final int position) {
return "" + position;
}
@Override
public String getPossesive(final String name) {
return name + "";
}
@Override
public String getPossessedObject(final String owner, final String object) {
return getPossesive(owner) + object;
}
}

View File

@@ -0,0 +1,33 @@
package forge.util.lang;
import forge.util.Lang;
public class LangEnglish extends Lang {
@Override
public String getOrdinal(final int position) {
final String[] sufixes = new String[] { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" };
switch (position % 100) {
case 11:
case 12:
case 13:
return position + "th";
default:
return position + sufixes[position % 10];
}
}
@Override
public String getPossesive(final String name) {
if ("You".equalsIgnoreCase(name)) {
return name + "r"; // to get "your"
}
return name.endsWith("s") ? name + "'" : name + "'s";
}
@Override
public String getPossessedObject(final String owner, final String object) {
return getPossesive(owner) + " " + object;
}
}

View File

@@ -0,0 +1,29 @@
package forge.util.lang;
import forge.util.Lang;
public class LangGerman extends Lang {
@Override
public String getOrdinal(final int position) {
if (position < 20) {
return position + "te";
}
return position + "ste";
}
// TODO: Please update this when you modified lblYou in de-DE.properties
@Override
public String getPossesive(final String name) {
if ("You".equalsIgnoreCase(name)) {
return name + "r"; // to get "your"
}
return name.endsWith("s") ? name + "'" : name + "'s";
}
@Override
public String getPossessedObject(final String owner, final String object) {
return getPossesive(owner) + " " + object;
}
}

View File

@@ -0,0 +1,26 @@
package forge.util.lang;
import forge.util.Lang;
public class LangItalian extends Lang {
@Override
public String getOrdinal(final int position) {
return position + "º";
}
// TODO: Please update this when you modified lblYou in it-IT.properties
@Override
public String getPossesive(final String name) {
if ("You".equalsIgnoreCase(name)) {
return name + "r"; // to get "your"
}
return name.endsWith("s") ? name + "'" : name + "'s";
}
@Override
public String getPossessedObject(final String owner, final String object) {
return getPossesive(owner) + " " + object;
}
}

View File

@@ -0,0 +1,22 @@
package forge.util.lang;
import forge.util.Lang;
public class LangJapanese extends Lang {
@Override
public String getOrdinal(final int position) {
return position + "";
}
@Override
public String getPossesive(final String name) {
return name + "";
}
@Override
public String getPossessedObject(final String owner, final String object) {
return getPossesive(owner) + object;
}
}

View File

@@ -0,0 +1,26 @@
package forge.util.lang;
import forge.util.Lang;
public class LangSpanish extends Lang {
@Override
public String getOrdinal(final int position) {
return position + "º";
}
// TODO: Please update this when you modified lblYou in es-ES.properties
@Override
public String getPossesive(final String name) {
if ("You".equalsIgnoreCase(name)) {
return name + "r"; // to get "your"
}
return name.endsWith("s") ? name + "'" : name + "'s";
}
@Override
public String getPossessedObject(final String owner, final String object) {
return getPossesive(owner) + " " + object;
}
}