Я хотел бы определить возможные сообщения об ошибках из ресурсов кода. Нет проблем, чтобы сделать их локализованными. Но мне нужно также определить для каждого из них места, где они будут отображаться/регистрироваться. Например: 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. Вопрос не содержит слова об отражении, но я думаю, что решение, вероятно, лежит в этой области. Поэтому я тоже отметил это с отражением.