2012-01-09 3 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».

Также идентификатор ресурсов должен отличаться от локализованного, а не одного.

Затем вы можете загрузить все ресурсы вместе на одну карту.

Я не понял?

Смежные вопросы