I18N bei Jtable Headern

anti43

Grünschnabel
Hi,

Weiss hier einer zufällig, wie man die Internationalisierung bei JTable headern elegant löst? Ich hab mal vorsorglich alle header als enum abgelegt, aber es muss doch auch einen nativen Ansatz geben?

Gruss,

Andreas

So liegts jetzt vor:
PHP:
public enum Headers {

    EXPENSE(new String[]{ "Number", "Description" ,"Account","Value", "Tax Rate"});

    private Headers(String[] header) {
        this.header = header;
    }
    private String[] header;

    public String[] getValue() {
        return header;
    }

    public void setValue(String[] header) {
        this.header = header;
    }
}
 
Irgendwie ist das wie dus zeigst nicht der Sinn und Zweck von enums. Was soll das bringen?

Wie auch immer, statt die Header mit Namen anzugeben, merkst du dir nur die Keys und kannst dann über ein ResourceBundle übersetzen. Oder hab ich irgendwas falsch verstanden an deiner Frage?
 
Na enums kann man wohl verwenden wo es grad passt :-) und so hab ich es gelöst (mit enum):

PHP:
public enum Headers {

    EXPENSE(new String[]{"Number", "Description", "Account", "Value", "Tax Rate"});

    private Headers(String[] header) {
        this.header = header;
    }
    private String[] header;

    public String[] getValue() {
            for (int i = 0; i < header.length; i++) {
                try {
                    header[i] = LanguageManager.getBundle().getString(this.name() + "." + i);
                } catch (Exception e) {
                    Log.Debug(this, e.getMessage());
                }
            }
        return header;
    }

    public void setValue(String[] header) {
        this.header = header;
    }

Das heisst, im ResourceBundle wird nach den Keys

EXPENSE.1
EXPENSE.2
EXPENSE.3

etc gesucht und im Header String[] entsprechend ersetzt (falls vorhanden). Damit hat man auch immer ein Fallback nach Englisch falls der Key fehlt.

Mittlerweile weiss ich aber, dass es im ResourceBundle auch so stehen kann:

jtable1.tableModel.Title1
jtable1.tableModel.Title2 usw

aber da fehlt halt das Fallback (meine Language Dateien können vom Benutzer angepasst werden, da weiss man ja nie :-) ).

Gruss,

Andreas
 
Für das was du da zeigst ist eine normale Klasse aber geeigneter. Wenn es überhaupt was eigenes sein muss. Gehört eigentlich ins TableModel mit rein.

Ein enum soll ja eine Aufzählung sein. Bei dir enthält sie nur ein Element. Das ist auch okay wenn man sich sicher sein will, dass es sich um ein Singleton handelt.

ResourceBundle bietet eigene Fallback-Methoden an. Bitte lies dir mal die Dokumentation dazu durch.

Die Übersetzung wie du sie so machst ist sehr gefährlich. Solltest du zweimal die selbe Tabelle in unterschiedlichen Sprachen anzeigen wollen, geht das nicht, da du die Sprache überschreibst. Eine Übersetzung bei der Erstellung der konkreten Tabelle ist sinnvoller. Im übrigen ist es sehr schwierig Übersetzungen durchzuführen und die Übersetzungsdateien zu verwalten, wenn die Keys keine sinnvollen Namen tragen, sondern durchnummeriert sind.
 

Neue Beiträge

Zurück