MegaPilot Geplaatst: 30 maart 2014 Rapport Geplaatst: 30 maart 2014 (bewerkt) Hey, op school maken we een programma dat we onder andere drietalig moeten maken. Hiervoor moeten we gebruik maken van resourcebundles. Helaas, ik heb nog geen uitleg gevonden op internet die me kan verder helpen. Hetgeen me het best zou helpen is een simpele applicatie waarin dit toegepast wordt zodat ik daadwerkelijk zie wat er gebeurt, want met droge theoretische uitleg kom ik niet echt veel verder.. Dit zou dus moeten gebeuren in de programmeertaal Java. Alvast bedankt! Mvg, MP Bewerkt: 30 maart 2014 door MegaPilot Reageren
Hanneswasco Geplaatst: 30 maart 2014 Rapport Geplaatst: 30 maart 2014 Zoek je iets als dit? Gewoon dus .properties bestanden aanmaken met de juiste conventies (vb. BundelNaam_nl_BE.properties), die dan ergens in je code opvragen ResourceBundle bundle = ResourceBundle.getBundle("Bundelnaam", new Locale("nl", "BE")); en dan de strings die je in het properties bestand hebt gedefieneerd opvragen door bundle.getString("naam.van.mijn.string"). Reageren
MegaPilot Geplaatst: 3 april 2014 Auteur Rapport Geplaatst: 3 april 2014 (bewerkt) Neen, ik zoek iets helemaal anders. Niet een klasse die op zichzelf kan runnen.. Kijk, ik heb op dit moment dit als code. Het klopt volgens mij voor geen bal, maar dat komt omdat ik verschillende (onduidelijke) tutorials heb gevolgd. Het helpt natuurlijk niet als de code van de desbetreffende tutorials foutief is volgens NetBeans.. package resource; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; public class ResourceController { private final Map<String, Locale> supportedLanguages = new HashMap<>(); // private Map supportedLanguages; private ResourceBundle translation; // public ResourceBundle getBundle(String baseName) { // return translation; // } public ResourceController(String language) { Locale Dutch = new Locale("Dutch", "België", "nl"); // supportedLanguages = new HashMap(); supportedLanguages.put("French", Locale.FRENCH); supportedLanguages.put("Dutch", Dutch); supportedLanguages.put("English", Locale.ENGLISH); translation = ResourceBundle.getBundle("languages", supportedLanguages.get(language)); } public String getWord(String keyword) { return translation.getString(keyword); } } Alvast bedankt. Bewerkt: 3 april 2014 door MegaPilot Reageren
Crypteq Geplaatst: 3 april 2014 Rapport Geplaatst: 3 april 2014 (bewerkt) Ik heb eerlijk gezegd nog nooit met resourcebundles in java gewerkt, maar wat ik ervan opmaak is dat het gewoon een key-value systeem is. En wat Hanneswasco aanhaalde, dat is nou eenmaal wat een resourcebundle zo ongeveer is, dus je komt toch op zoiets uit. Ik heb even een voorbeeld programmatje gemaakt die een aantal teksten weergeeft in verschillende talen aan de hand van een resourcebundle misschien dat dit je inzicht geeft erin. ResourceBundleExample.java: package mainRoot; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import resourcebundle.LanguageBundle; import resourcebundle.LanguageBundle.Languages; public class ResourceBundleExample { public static void main(String[] args) { //Maak een instancie van de Languagebundle, deze verzorgt alle operations voor de bundle LanguageBundle localBundle; //Even een menu voor visuele shit System.out.println("Select a language below:\r\n"); System.out.println("1. Dutch"); System.out.println("2. German"); System.out.println("3. English"); System.out.println("4. Default"); System.out.println("5. Exit"); System.out.print("\r\nYour choice: "); //Even inlezen e.d. niet echt belangrijk of spannend. int choise = 0; BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in)); try { choise = Integer.parseInt(bufferRead.readLine()); if(choise == 5) { System.exit(0); } //Hier geven we een parameter door aan de constructor die hij kiest aan de hand van de index in de array van de enum Language localBundle = new LanguageBundle(LanguageBundle.Languages.values()[choise -1]); //Vraag aan de LanguageBundle de value bij de desbetreffende key System.out.println("#1: " + localBundle.getValue("subject_1")); System.out.println("#2: " + localBundle.getValue("subject_2")); System.out.println("#3: " + localBundle.getValue("name_1")); System.out.println("#4: " + localBundle.getValue("name_2")); System.out.println("#5: " + localBundle.getValue("subject_3")); waitForKeypress(); } //Error zut catch (NumberFormatException e) { System.out.println("Not an valid number, try again."); waitForKeypress(); } catch (IOException e) { System.out.println("There was an error, try again."); waitForKeypress(); } } private static void waitForKeypress() { try { System.in.read(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } LanguageBundle.java: package resourcebundle; import java.util.Locale; import java.util.ResourceBundle; public class LanguageBundle { //Variable voor de ResourceBundle ResourceBundle localization_Language_bundle; //Enum met daaraan een int gekoppeld (get-set) public enum Languages { DUTCH(1), GERMAN(2), ENGLISH(3), DEFAULT(4); private final int value; private Languages(int value) { this.value = value; } public int getValue() { return value; } } //Constructor, deze vereist als parameter de enum Languages public LanguageBundle(Languages lang) { Locale bundleLocale = Locale.getDefault(); //De juiste Locale laden bij de juiste waarde uit de enum Languages switch(lang) { case DUTCH: bundleLocale = new Locale("nl", "NL"); break; case GERMAN: bundleLocale = new Locale("de", "DE"); break; case ENGLISH: bundleLocale = new Locale("en", "US"); break; case DEFAULT: bundleLocale = Locale.getDefault(); break; } //En hier maken we de ResourcesBundle aan //Je hebt hier een "basename" hiermee hoort elke bundle qua naam mee te beginnen //Daarna heb je nog Locale deze komt achter de basename met _<languag>_<country> //De Resourcesbundle die zoekt in je huidige directory naar de naam <basename>_<languag>_<country>.properties localization_Language_bundle = ResourceBundle.getBundle("LanguageBundle",bundleLocale); } public String getValue(String key) { //Vraag de value op van de bijbehorende key return localization_Language_bundle.getString(key); } } En een van de resourcebundle bestanden met de naam: LanguageBundle_nl_NL.properties (die voor DE, EN zijn makkelijk zelf aan te maken) subject_1=Fietstoch in Belgie en omstreken subject_2=Wandeltocht van Groningen tot Maastricht name_1=Arend hongelbocht name_2=Frits scheven der geitenwol subject_3=En zo kunnen we nog wel even doorgaan En de source verpakt in de bestanden: Link Mocht dit niet zijn wat je zoekt, dan zit je denk ik verkeerd met resourcesbundles. Mocht je er niet uitkomen of het niet snappen, dan horen we het wel Bewerkt: 4 april 2014 door Crypteq Reageren
MegaPilot Geplaatst: 4 april 2014 Auteur Rapport Geplaatst: 4 april 2014 (bewerkt) Welke editor gebruik jij? Ik krijg namelijk een foutje bij het uitvoeren dat aan mij ligt in NetBeans(weet niet goed waar je wat moet zetten snap je )... Heel erg bedankt voor je reactie, je helpt me ongelofelijk vooruit! Edit: Gewoon de properties-files in default package zetten bij NetBeans en het werkte. Heel erg bedankt man, dit is precies wat ik nodig heb! Bewerkt: 4 april 2014 door MegaPilot Reageren
Recommended Posts
Een reactie plaatsen
Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.