Jump to content

Resourcebundle Java


MegaPilot

Recommended Posts

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: door MegaPilot
Link to comment
Delen op andere websites

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").

Link to comment
Delen op andere websites

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: door MegaPilot
Link to comment
Delen op andere websites

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: door Crypteq
Link to comment
Delen op andere websites

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 :puh:)...

Heel erg bedankt voor je reactie, je helpt me ongelofelijk vooruit! :D

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! _O_

Bewerkt: door MegaPilot
Link to comment
Delen op andere websites

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.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...