2012-01-09 47 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

不知何故沒有人回答...我自己找到了解決方案。這不是一個新的和乾淨的解決方案。它只是闡述了前面描述的一個。但它的工作。

我簡單地將錯誤消息分爲兩類 - 即英文和可本地化的錯誤消息。在代碼中,我將它們倒入一個列表中。可本地化的消息將被本地化,不斷英語將保持英語。壞消息是,如果所有三個分組(如此,最多六個)陣列相互正確,則非常難控制。

0

我不確定我是否理解了你的問題,但寫了一些東西,因爲這可能會幫助你。

您可以將永遠不需要本地化的資源放到不像「值」本地化的文件夾中,只有一次。和

您想要本地化的資源必須放置在與「values-ko_KR」等本地化匹配文件夾相同的文件夾中。

此外資源的ID必須不同於本地化的而不是一個。

然後,您可以將所有資源一起加載到一個地圖中。

我誤解了嗎?