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