2012-01-09 11 views
0

コードインのリソースから考えられるエラーメッセージを定義したいと思います。それらをローカライズするのに問題はありません。 しかし、私はそれらのすべてについて、場所を表示/記録する場所を定義する必要もあります。次に例を示します。screen、localLog、serverLog。 ローカライズせずに私はそれを行うことができます:構造化されローカライズされたリソースを作成するには?

<!-- every error has a message and boolean keys that allows or not to write the message 
     to places serverLog/localLog/Screen --> 

<string-array name="error_names"> 
    <item >no_net</item> 
</string-array>  

<string-array name="error_messages"> 
    <item >There is no internet connection. Check the cables. If they are OK, call your provider.</item> 
</string-array> 

<string-array name="output_keys"> 
    <item >010</item> 
</string-array> 

を私はロードでのエラーメッセージのクラスになるだろうそれらのすべての静的マップに

public class ErrorMessage { 
    private String messageText; 
    private String errorName; 
    private ArrayList<String> messageOutputs; 
    static List<String> messagesPossibleOutputs=Arrays.asList("Server","LocalLog","TV"); 
    static public HashMap<String,ErrorMessage> messagesMap; 

static public int downloadMessages(Context context){ 
    String messages[]=context.getResources().getStringArray(R.array.error_messages); 
    String errorNames[]=context.getResources().getStringArray(R.array.error_names); 
    String outputKeys[]=context.getResources().getStringArray(R.array.output_keys 
    messagesMap=new HashMap<String,ErrorMessage>(); 
    for(int i=0; i<messages.length; i++){ 
     ErrorMessage curErrorMessage=new ErrorMessage(); 
     curErrorMessage.errorName=errorNames[i]; 
     curErrorMessage.messageText=messages[i]; 
     curErrorMessage.messageOutputs=new ArrayList(); 
     for(int iKey=0; iKey<outputKeys[i].length();iKey++){ 
      String curChar=outputKeys[i].substring(iKey, iKey+1); 
      if(curChar.equals("1")){ 
       curErrorMessage.messageOutputs.add(messagesPossibleOutputs.get(iKey)); 
      } 
     } 
     messagesMap.put(curErrorMessage.errorName,curErrorMessage); 
    } 
} 

それはきれいな解決策ではない、だけ私が思った最高のしかし、それは十分ではありません!メッセージをローカライズしたい場合(それもやってください)、すべての言語でメッセージの文字列配列全体を繰り返す/翻訳する必要があります。ローカライズする予定のメッセージのみ。技術的なものは英語のままです。だから、すべてを繰り返すことは悪いです。

XMLリソースは、すべての言語バリアントで全体を繰り返す必要があるため、役に立たないでしょう。だから、さらに悪いです。

リソースを読むためのスマートな構造をお勧めしますか?および/または構造化されローカライズされたリソースを定義するための他の方法?

P.S.この質問には反省の言葉は含まれていませんが、その解決策はおそらくその分野にあると思います。だから、私もそれを反射でタグ付けしました。

答えて

0

何とか誰も答えなかった...そして、自分自身で解決策を見つけました。それは新しい、きれいな解決策ではありません。それは先に説明したものを詳述するだけである。しかし、それは動作します。

私は単純にエラーメッセージを2つのカテゴリに分割しました。これらのカテゴリは英語とローカライズ可能なカテゴリのままです。コードでは、それらを1つのリストに入れます。ローカライズ可能なメッセージはローカライズされ、常に英語は英語のままです。悪いニュースは、3つの分割された(したがって、最大6つの)配列が相互に正しい場合、非常に難しい制御です。

0

私はあなたの質問を理解しているとは思えませんが、おそらくあなたを助けるために何かを書いています。

ローカライズしたくないリソースを、 '値'のようにローカライズされていないフォルダにまとめて1回だけ入れることができます。

リソースをローカライズする必要があるリソースは、 '値-ko_KR'のようなローカライズされたフォルダを持つフォルダに配置する必要があります。

また、リソースのIDは、ローカライズされたものとそうでないものとで異なる必要があります。

次に、すべてのリソースを1つのマップにまとめて読み込むことができます。

私は間違っていますか?

関連する問題