Ich experimentiere gerade etwas mit Bundles zur Implementierung von Mehrsprachigkeit in Java.
Mein einfaches Problem:
Ich habe mein File "Language_fr_FR.properties" in einem Ordner rsc gespeichert. Wie sage ich jetzt der ResourceBundle.getBundle wo sie das properties-File her bekommt?
Danke ! das hilft mir schon weiter.
Was wenn der Ordner mit dem Properties-File im Projekt gespeichert ist (hier unter dem Ordner rsc)? kann ich dann irgendwie auf das Rootverzeichnis des Projektes verweisen (und dann auf \rsc\?
Das hier liefert das Verzeichnis zurück, in dem dein .jar liegt. Was danach kommt, z.B. andere Ordner, kannst du dir damit zusammenbauen.
Java:
privatestaticStringacquireHomepath(){//Acquire homeDirectory, result in something like ".../directory/to/jar/."String homeDirectory =newFile(".").getAbsolutePath();//Remove the '.' at the end
homeDirectory = homeDirectory.substring(0, homeDirectory.length()-1);return homeDirectory;}
Was mir noch einfällt: Dein Quellcode liegt zwar im src-Ordner, wird dort aber bestimmt nicht ausgeführt. Das fertige .jar liegt woanders. Das heißt, wenn du es dir so zurechtfummelst daß es innerhalb der IDE funktioniert, dann bekommst du wahrscheinlich ein Problem wenn du es verteilen willst.
Ich hab das so gemacht (ich arbeite aber mit Netbeans), daß ich im Buildskript ein paar Zeilen ergänzt habe, sodaß Netbeans den Ordner mit den .properties-Dateien mit in das Verzeichnis der .jar kopiert, die dann ausgeführt wird. In Netbeans heißt das Verzeichnis "dist", glaube ich.
Nehmen wir an, dein File project.jar liegt im Ordner ../myProj/ und von dort startet.
[CODE lang="java" title="UserDir ../myProj/"]String userDir = System.getProperty("user.dir"); //z.B: D:\myProj
File projDir = new File(userDir);
[/CODE]
[CODE lang="java" title="Subfolder: /myProj/local"]File local = new File(userDir + "/local");
[/CODE]
Hier muss ich mal kurz einhaken. Sprachdateien sind ja normalerweise Programmressourcen und damit Teil der Anwendung. Normalerweise legt man die Sprachdateien in einem resource-Paket ab, das sich je nach verwendetem Build-System an einer bestimmten Stelle befinden muss. Im Fall von Maven/Gradle befindet sich der Spaß in der Regel unter src/main/resources bzw. einem Paket darunter. Alternativ wird das Paket einfach unter src angelegt (funktioniert bei Maven nicht ohne weiteres).
Sagen wir mal, wir verwenden Maven und legen die Language-Dateien unter src/main/resources/lang (und damit im Paket lang) ab, dann erhält man das ResourceBundle mit ResourceBundle.getBundle("lang.Language", locale). Das hat den Vorteil, dass die Sprachdateien ins Jar gepackt werden.
Ich habe es jetzt so gemacht:
- den Ordner rsc als Source-Ordner definiert (in Eclipe unter Configure Build Path)
- dann
Java:
ResourceBundle sprache =ResourceBundle.getBundle("Language", currentLocale);
Dann noch ein Hinweis für allfällige zukünftige Leser.
Ich war mit dem Problem konfrontiert, dass Java mit einigen Zeichen wie "é" in Properties-Files Probleme und nicht korrekt darstellt hat.
Dazu habe ich den Properties-Editor Plugin in Eclipse installiert. Damit lassen sich die Properties-Files direkt in Eclipse schreiben. Bei Verwendung von speziellen Zeichen kümmert sich der Editor selbstständig darum.