diff --git a/assets/icons.png b/assets/icons.png index 38935e5f1..23b90de7b 100644 Binary files a/assets/icons.png and b/assets/icons.png differ diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java b/src/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java index a95b44b6f..b4a608dcc 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java @@ -36,6 +36,82 @@ import java.util.ResourceBundle; */ public class Messages { + public enum Languages { + ENGLISH("english", "en", Status.REVIEWED), + + RUSSIAN("русский", "ru", Status.UNREVIEWED), + CHINESE("中文", "zh", Status.UNREVIEWED), //Simplified + PORTUGUESE("português", "pt", Status.UNREVIEWED), //Brazillian + KOREAN("한국어", "ko", Status.UNREVIEWED), + + GERMAN("deutsch", "de", Status.INCOMPLETE), + + POLISH("polski", "pl", Status.UNFINISHED), + SPANISH("español", "es", Status.UNFINISHED), + FRENCH("français", "fr", Status.UNFINISHED); + + private String name; + private String code; + private Status status; + + Languages(String name, String code, Status status){ + this.name = name; + this.code = code; + this.status = status; + } + + public String nativeName(){ + return name; + } + + public String code(){ + return code; + } + + public Status status(){ + return status; + } + + public static Languages matchLocale(Locale locale){ + String code = locale.getLanguage(); + for (Languages lang : Languages.values()){ + if (lang.code().equals(code)) + return lang; + } + return ENGLISH; + } + + public enum Status{ + //below 50% complete languages are not added. + UNFINISHED, //50-80% complete + INCOMPLETE, //80-99% complete + UNREVIEWED, //100% complete + REVIEWED //100% reviewed + } + + } + + + /* + use hashmap for two reasons. Firstly because android 2.2 doesn't support resourcebundle.containskey(), + secondly so I can read in and combine multiple properties files, + resulting in a more clean structure for organizing all the strings, instead of one big file. + + ..Yes R.string would do this for me, but that's not multiplatform + */ + private static HashMap<String, String> strings; + private static Languages lang; + + public static Languages lang(){ + return lang; + } + + + + /** + * Setup Methods + */ + private static String[] prop_files = new String[]{ "com.shatteredpixel.shatteredpixeldungeon.messages.actors.actors", "com.shatteredpixel.shatteredpixeldungeon.messages.items.items", @@ -47,22 +123,15 @@ public class Messages { "com.shatteredpixel.shatteredpixeldungeon.messages.misc.misc" }; - /* - use hashmap for two reasons. Firstly because android 2.2 doesn't support resourcebundle.containskey(), - secondly so I can read in and combine multiple properties files, - resulting in a more clean structure for organizing all the strings, instead of one big file. - - ..Yes R.string would do this for me, but that's not multiplatform - */ - private static HashMap<String, String> strings; - static{ - setup(Locale.getDefault().getLanguage()); + //TODO:load in locale from a preference, use default only if none set. + setup(Languages.matchLocale(Locale.getDefault())); } - public static void setup( String region ){ + public static void setup( Languages lang ){ strings = new HashMap<>(); - Locale locale = new Locale(region); //TODO:load in locale from a preference, use default only if none set. + Messages.lang = lang; + Locale locale = new Locale(lang.code()); for (String file : prop_files) { ResourceBundle bundle = ResourceBundle.getBundle( file, locale); @@ -83,6 +152,8 @@ public class Messages { } } + + /** * Resource grabbing methods */ @@ -118,6 +189,8 @@ public class Messages { } } + + /** * String Utility Methods */ @@ -161,4 +234,3 @@ public class Messages { return capitalize(result); } } - diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java b/src/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java index a58deb0d9..731e41e27 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java @@ -54,6 +54,7 @@ public enum Icons { UNCHECKED, EXIT, NOTES, + LANGS, CHALLENGE_OFF, CHALLENGE_ON, RESUME; @@ -149,6 +150,9 @@ public enum Icons { case NOTES: icon.frame( icon.texture.uvRect( 79, 40, 94, 56 ) ); break; + case LANGS: + icon.frame( icon.texture.uvRect( 94, 40, 110, 56 ) ); + break; case CHALLENGE_OFF: icon.frame( icon.texture.uvRect( 78, 16, 102, 40 ) ); break; diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ui/LanguageButton.java b/src/com/shatteredpixel/shatteredpixeldungeon/ui/LanguageButton.java index ef9414612..373b3a625 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ui/LanguageButton.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ui/LanguageButton.java @@ -21,12 +21,10 @@ package com.shatteredpixel.shatteredpixeldungeon.ui; import com.shatteredpixel.shatteredpixeldungeon.Assets; -import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.TitleScene; import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions; -import com.shatteredpixel.shatteredpixeldungeon.windows.WndSettings; import com.watabou.noosa.Image; import com.watabou.noosa.RenderedText; import com.watabou.noosa.audio.Sample; @@ -47,8 +45,23 @@ public class LanguageButton extends Button { protected void createChildren() { super.createChildren(); - image = Icons.INFO.get(); + image = Icons.get(Icons.LANGS); add( image ); + updateIcon(); + } + + private void updateIcon(){ + switch(Messages.lang().status()){ + case UNFINISHED: + image.tint(1, 0, 0, .4f); + break; + case INCOMPLETE: + image.tint(1, .5f, 0, .4f); + break; + case UNREVIEWED: + image.tint(1, 0.5f, 0, .25f); + break; + } } @Override @@ -68,41 +81,29 @@ public class LanguageButton extends Button { @Override protected void onTouchUp() { image.resetColor(); + updateIcon(); } @Override protected void onClick() { - parent.add( new WndOptions("Languages", "Select a language(proper menu soon)", "English", "Русский язык(99%)", "Português(99%)", "中文(99%)", "한국어(99%)", "Deutsch(93%)", "Polski(55%)", "Français(40%)", "Español(40%)" ) { + final Messages.Languages[] langs = Messages.Languages.values(); + final String[] names = new String[langs.length]; + for (int i = 0; i < names.length; i++){ + names[i] = Messages.titleCase(langs[i].nativeName()); + switch(langs[i].status()){ + case UNFINISHED: + names[i] += " - UNFINISHED"; + break; + case INCOMPLETE: + names[i] += " - INCOMPLETE"; + break; + } + } + parent.add( new WndOptions("Languages", "Select a language(proper menu soon)", names ) { @Override protected void onSelect(int index) { - switch(index){ - case 0: - Messages.setup(""); - break; - case 1: - Messages.setup("ru"); - break; - case 2: - Messages.setup("pt"); - break; - case 3: - Messages.setup("zh"); - break; - case 4: - Messages.setup("ko"); - break; - case 5: - Messages.setup("de"); - break; - case 6: - Messages.setup("pl"); - break; - case 7: - Messages.setup("fr"); - break; - case 8: - Messages.setup("es"); - } + Messages.setup(langs[index]); + updateIcon(); ShatteredPixelDungeon.switchNoFade(TitleScene.class); RenderedText.clearCache(); }