2016-07-28 5 views
0

に変換できる値を持つ列挙型は、私がenumの下にあるとします。アンドロイド:他のロケール

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; 
    } 
} 

私はそれが異なる列挙のために定義されたラベルを返すその.toString()を呼び出すとき。これらのラベルはUI上で使用され、ユーザーに表示されます。

別のロケールで私のアプリを公開すると思うと、私はこれらのラベルを他の言語に翻訳できるように定義することができますか?

答えて

0

enumのラベルの実際の値を設定する代わりに、文字列resource idを使用できます。

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; 
    } 
} 

この方法でAndroidは、デバイスのロケール与え

をあなたの文字列の正しい翻訳をピックアップしますあなたの用法は、次のようになります。

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

はかなり異なるどのようによりべきではありませんenumの外でローカライゼーションを処理します。リソースを参照して渡すだけです。そうですね、

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); 
    } 
} 
関連する問題