2016-07-28 40 views
0

nehme ich unter enum haben:Android: Aufzählungen mit Werten, die an anderen Orten übersetzt werden kann

public enum Feelings { 
    happy("label1"),sad("label2") 
    private final String name; 
    private Feelings(String s) { 
     name = s; 
    } 
    public boolean equalsName(String otherName) { 
     return (otherName == null) ? false : name.equals(otherName); 
    } 
    public String toString() { 
     return name; 
    } 
} 

, wenn ich rufe seine .toString() es gibt Etiketten für verschiedene Enumeration definiert. Ich verwende diese Bezeichnungen auf der Benutzeroberfläche und sie werden den Benutzern angezeigt.

Wenn ich in Betracht ziehe, meine App mit verschiedenen Gebietsschemas zu veröffentlichen, kommt es mir auf meine Gedanken, wie kann ich diese Bezeichnungen so definieren, dass sie in andere Sprachen übersetzt werden können?

Antwort

0

Anstatt den tatsächlichen Wert der Beschriftung in der Enumeration festzulegen, können Sie die Zeichenfolge-Ressourcen-ID verwenden.

public enum Feelings { 
    happy(R.string.happy_label), sad(R.string.sad_label); 
    private final int strId; 

    private Feelings(int strId) { 
    this.strId = strId; 
    } 

    @StringRes public int getStringId() { 
    return strId; 
    } 
} 

diese Weise Android des Geräts die korrekte Übersetzung Ihrer Strings gegeben locale

Ihre Nutzung könnte dann folgendermaßen aussehen abholt:

textView.setText(Feelings.happy.getStringId()); 
1

Sollte nicht viel anders als wie Sie Handle Lokalisierung außerhalb einer Enum. Muss nur in Bezug auf Ressourcen übergeben werden. So etwas wie:

public enum Feelings { 
    happy(R.string.happy), 
    sad(R.string.sad) 

    private final int nameId; 

    private Feelings(int nameId) { 
     this.nameId = nameId; 
    } 

    public String toString(Resources res) { 
     return res.getString(nameId); 
    } 
}