Как сделать структурированный и локализованный ресурс? - PullRequest
0 голосов
/ 09 января 2012

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

Ответы [ 2 ]

0 голосов
/ 30 января 2012

Я не уверен, что понял ваш вопрос, но что-то писал, потому что это, возможно, поможет вам.

Вы можете поместить ресурсы, которые никогда не хотят быть локализованными, в папку, которая не локализуется как «значения», все вместе только один раз. и

Ресурсы, которые вы хотите локализовать, должны помещаться в папки, которые локализованы в соответствии с папками, такими как 'values-ko_KR'.

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

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

Я неправильно понял?

0 голосов
/ 11 января 2012

Как-то никто не ответил ... И я сам нашел решение. Это не новое и чистое решение. Это только развивает ранее описанный. Но это работает.

Я просто разделил сообщения об ошибках на две категории - они остаются английскими и локализуемыми. В коде я выливаю их в один список. Локализуемые сообщения будут локализованы, английский постоянно будет оставаться английским. Плохая новость заключается в том, что очень трудно контролировать, будут ли все три разделенных (то есть до шести) массива взаимно правильными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...