2016-07-28 2 views
0

Пусть у меня ниже enum:Android: перечисления со значениями, которые могут быть переведены в другие места

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() возвращает метки, определенные для различного перечисления. Я использую эти метки в пользовательском интерфейсе, и они будут отображаться для пользователей.

Когда я рассматриваю возможность публикации своего приложения с различными локалями, мне кажется, что я могу определить эти ярлыки, чтобы их можно было перевести на другие языки?

ответ

0

Вместо того, чтобы устанавливать фактическое значение метки в перечислении, вы можете использовать идентификатор ресурса строки.

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

не должен сильно отличаться, чем, как вам обрабатывать локализацию вне перечисления. Просто нужно передать ссылку на ресурсы. Так что-то вроде:

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