Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
Und zwar habe ich ein Programm geschrieben, welches auf einer Konsole läuft. Nun würde ich gerne mehrere Sprachen einbauen z.B. Englisch, Französisch, etc...
Meine Frage ist nun wie man dieses Problem am besten Lösen kann. Mit freudlichen Grüßen
Also, ich mache das bei Universal Android Toolkit so:
Ich habe eine SettingsManager-Klasse, die alle Einstellungen verwaltet. Diese Klasse lädt die Einstellungen aus der settings.cfg-Datei.
Mit den Werten wird die Sprache ausgelesen, z.B. de_de (Deutsch/Deutschland), en_gb (Englisch/Großbritannien) oder sp_la (Spanisch/Latein Amerika) (Das sind alle Sprachen, die ich derzeit habe).
Diese Werte sind auch in einem Enum namens Language.java.
Die ausgelesenen Werte werden dann mit denen, in der Language-Enum verglichen.
Dann habe ich noch eine Klasse, Parser.java, die die Sprach-Datein ausliest. Diese sieht so aus:
Java:
/*
* Copyright (C) 2014 beatsleigher
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package eu.m4gkbeatz.androidtoolkit.language;
import eu.m4gkbeatz.androidtoolkit.logging.*;
import static eu.m4gkbeatz.androidtoolkit.logging.Logger.Level;
import java.io.*;
import java.net.*;
/**
*
* @author beatsleigher
*/
public class LangFileParser {
//# =============== Variables =============== #\\
String translationFile = null;
private Logger logger = null;
public void parse(Language lang, Logger logger, boolean debug) throws IOException {
this.logger = logger;
URL languageFile = this.getClass().getResource("/eu/m4gkbeatz/androidtoolkit/resources/langs/" + lang + ".lang");
if (debug)
logger.log(Logger.Level.DEBUG, "Attempting translation from file: " + languageFile);
BufferedReader reader = new BufferedReader(new InputStreamReader(languageFile.openStream()));
StringBuilder strBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null)
strBuilder.append(line).append("\n");
reader.close();
translationFile = strBuilder.toString();
}
public String parse(String item) {
try {
BufferedReader reader = new BufferedReader(new StringReader(translationFile));
String line = null;
while ((line = reader.readLine()) != null) {
if (line.trim().startsWith("#")) continue;
if (line.contains(item)) {
String[] arr = line.split("=");
String toReturn = "";
arr = arr[1].split("\\n");
for (String str : arr)
toReturn += str + "\n";
return toReturn;
}
}
} catch (IOException ex) {
logger.log(Level.ERROR, "An Error occurred while loading the translation for " + item + ": " + ex.toString());
ex.printStackTrace(System.err);
}
return item + "n/a (507)";
}
}
Mit der Klasse (wo ich die Werte im Constructor übergebe) parse ich dann die .lang-Datein, die ich und meine Übersetzer/Tester schreiben und dann wird die gewünschte Übersetzung gesucht und zurückgegeben.
Ich glaube, dass genau das das ist was ich suche, nur habe ich es nicht verstanden, auch nachdem ich deinen Code mir vor Augen geführt hab. Würdest du es bitte nochmal für :bloed: erklären ^^