1

私はtodoアプリを複数の言語に翻訳する必要があります。Android - enumのローカライゼーション

私は3つのレベル(低、中、高)を含む列挙型を持っており、優先ラベルを参照するためにも使用します。これは、それがどのように見えるかです:

public enum Priority { 
    LOW(R.drawable.priority_low), 
    MEDIUM(R.drawable.priority_medium), 
    HIGH(R.drawable.priority_high); 

    private int drawableResource; 

    Priority(int drawableResource) { 
     this.drawableResource = drawableResource; 
    } 

    public int getDrawableResource() { 
     return drawableResource; 
    } 
} 

そして、これは私はいくつかのサンプルのToDo項目を作成する方法である:

private TodoItemDao() { 
    todoItems.add(new TodoItem("pet shop", new Date(), "buy a nice zombie pig", Priority.HIGH)); 
    todoItems.add(new TodoItem("barber", new Date(), "cut lion's hair", Priority.MEDIUM)); 
    todoItems.add(new TodoItem("mine", new Date(), "we need redstones", Priority.LOW)); 
} 

だから、このシーンでは、どのように私は別の言語にTODOの優先順位を翻訳していますか?私は通常

titleEditText = (EditText) findViewById(R.id.et_title); 

のようにそれを行う...しかし列挙し、どの項目の作成時に優先レベルを設定するために内部にそれを行うにはどのようには考えています。何か案が?

EDIT:

私は十分に明確ではなかったaffraidよ。次の行を使用してください:

titleEditText = (EditText) findViewById(R.id.et_title); 

私は既にstrings.xmlを使用していることを示したかったのです。私は列挙型でそれをどのように使うべきか分かりませんでした。

+0

これは、あなたの役に立つかもしれません:http://stackoverflow.com/questions/20287009/how-to-convert-hardcoded-enum-to-different-language –

答えて

1

すでに述べたように、strings.xmlを使用して翻訳を追加します。あなたは多くの言語のためにそれを行います。

提案は、あなたの列挙に次またはどこか他のあなたがそれにアクセスすることができますを追加します:

public String getPriorityName(Priority ref, Context c){ 
    switch(ref){ 
     case Priority.LOW: 
      return c.getString(R.string.priorityLowDescription); 
      break; 

     (Showing only one here, but you can see the pattern) 
    } 
} 

これはあなたの優先インスタンスを取り込み、それに基づいてstrings.xmlから適切な文字列を返します。これは、あなたのデバイスが設定されている言語で文字列を取得することを意味します(または、設定に応じてユーザーが手動で設定します)。

+0

私はあなたの両方に感謝します、皆さんは私をたくさん助けました。 – hellsing

0

列挙型から直接入力しないでください。あなたのstrings.xmlファイルに通常のように翻訳を入れてください。優先度を正しいIDに変換する関数int mapToStringResource(Priority)を作成します。テキストを設定するにはsetText(mapToStringResource(priority))に電話してください。

関連する問題