タイトルの通りなのですが、Enum(正確にはEnumのnameプロパティ)をAndroidでローカライズするにはどうすれば良いでしょうか?
string.xmlと結びつける方法がいまいち思い浮かばなかったので質問しました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
リソース取得のstaticな方法がないからこうかな
public enum Gender { MALE(R.string.MALE), FEMALE(R.string.FEMALE); private final int resourceId; private Gender (int resourceId) { this.resourceId = resourceId; } public String toString() { return name(); } public String toString(Resources res) { return res.getString(resourceId); } }
投稿2018/03/11 12:02
退会済みユーザー
総合スコア0
0
enumのname()やvalueOfは言語仕様で「固定」されているのでカスタマイズはできません。
name()の値をResourceBundleのキーとしてtoStringをオーバーライドすることは可能なので
Java
1enum Gender { 2 // mail, // それはメールだ! 3 // femail, // こんな単語ない 4 male, 5 female, 6 ; 7 static ResourceBundle bundle = ResourceBundle.getBundle("GenderResource"); 8 9 @Override 10 public String toString() { 11 return bundle.getString(name()); 12 } 13}
などと書くことはできそうです。String.valueOf(Gender.mail)の結果がローカライズできるのでSystem.out.println(Gender.mail)Lod.d("tag", "gender=" + Gender.mail);
などとすればローカライズ結果に従った内容が出力できますが・・・
name()とGender.valueOfはローカライズ不能ですので、もう少し一貫性を持たせようとするなら自前でGender.localizedValueOfみたいなstaticメソッドを別途定義しなくてはならず今一つ気持ちよくローカライズできるとはいえなさそうです。
投稿2018/03/11 11:49
編集2018/03/11 12:07総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/03/11 12:04 編集
2018/03/11 12:06
退会済みユーザー
2018/03/11 12:08
2018/03/11 12:16
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/11 12:05
2018/03/11 12:15