"Variable" in String erkennen

Hoppelmann

Mitglied
Hallo erstmal,

ich bin gerade dabei, eine Funktion für einen Lokalisierungsmechanismus zu schreiben. Dieser soll aus einer Datei für einen Schlüssel den zugehörigen Text auslesen. Das klappt auch ganz prima.

Java:
public static String getLanguageValue(String languageKey) {

    try {
        Properties properties = new Properties();
        properties.load(new FileReader(new File(ConstantManager.RESOURCES_LANGUAGES_DIR, currentLanguage + ".lang")));

        String value = properties.getProperty(languageKey);
        return value;
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}

Nun sollen aber auch ein Schlüssel definiert werden, die in sich wiederum auf andere Variablen zugreifen. Das ganze stelle ich mir in der Datei dann z.B. so vor (ist nicht die echte Datei, nur ein Beispiel):

Code:
title=Trains
windowTitle=$title$ - The train simulator!

Wie gesagt, z.B. windowTitle kann ich einfach auslesen. Logisch kommt da aber nur "$title$ - The train simulator!" heraus. Nun soll $title$ automatisch durch den Wert des Schlüssels title ersetzt werden. Ist das möglich?

Danke schon mal im Vorraus
 
Ich hab eine Möglichkeit selbst gefunden. Dabei werden die Variablen in < und > eingeschlossen (geht natürlich auch mit anderen Zeichen, wie das zu Verändern ist, sollte jeder selbst kapieren).

Die Datei sieht demnach so aus (es geht auch rekursiv, deswegen so umständlich):

Code:
name=java-forum
url=<name>.org
title=<url> - Das Java-Forum!

Das ganze wird über diese Methode ausgelesen:

Java:
public static String getValue(File file, String key) {

    try {
        Properties properties = new Properties();
        properties.load(new FileReader(file));

        String value = properties.getProperty(key);

        String variableStringSeperator1 = "<";
        String variableStringSeperator2 = ">";

        for (int counter = 0; counter < value.length(); counter++) {
            String nowChar = String.valueOf(value.charAt(counter));

            if (nowChar.equals(variableStringSeperator1)) {
                String parseString = "";

                for (int counter2 = counter + 1; counter2 < value.length(); counter2++) {
                    String nowChar2 = String.valueOf(value.charAt(counter2));
                    if (nowChar2.equals(variableStringSeperator2)) {
                        break;
                    } else {
                        parseString += nowChar2;
                    }
                }

                String parsedString = getLanguageValue(parseString);
                if (parsedString != null) {
                    value = value.replaceAll(variableStringSeperator1 + parseString + variableStringSeperator2, parsedString);
                }
            }
        }

        return value;
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}

Als Ausgabe kommt heraus:
Code:
java-forum.org - Das Java-Forum!
 

Zurück
Oben