2015-03-03 4 views
1

Я пытаюсь перехватить Exception, брошенный моим алгоритмом в Java, и изменить текст на другой язык и показать его пользователю. Возможно ли это в java?Перехват Исключения для перевода на другой язык

Извините, мой английский.

+0

примерки поймать заявление ..? – DeadChex

ответ

2

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

try { 
    // do something 
} 
catch (Exception e) { 
    throw new Exception(translate(e.getMessage())) 
} 

public String translate(String message) { /* translation code */ } 

Update в ответ на комментарий:

Если вы можете изменить приложение (и, в частности, если приложение использует пользовательские исключения, полученные из нескольких базовых классов) то вы можете изменить их для получения переведенных сообщений (но если вы могли бы это сделать, вы могли бы сгенерировать переведенные сообщения или полностью internationalisation с самого начала!).

Перехватив и замену всех исключений в глобальном масштабе, вероятно, не представляется возможным, хотя это выглядит, как вы можете по крайней мере обнаружить их глобально с помощью отладки крюков - см this answer. Вполне возможно, что вы могли бы модифицировать сообщение об исключении «на лету» с помощью отражения, но это звучит довольно неприятно.

Последней возможностью является использование Aspect-Oriented Programming (AOP) для компиляции дополнительного поведения вокруг кода, который генерирует исключение (см., Например, this question). Вам нужно будет перекомпилировать все приложение, используя инструменты AOP, хотя, вероятно, все равно придется немного изменить код приложения.

+0

Спасибо, DNA, но я ищу что-то другое, я хочу перехватить все исключения, брошенные моим приложением в Runtime, и перевести его. я возьму новый текст из XML, а исходный текст - это ключ или тег, чтобы получить его. Ты понимаешь? –

+0

См. Мой обновленный ответ. – DNA

0

Я думаю, что вы хотите Thread.setDefaultUncaughtExceptionHandler() Этот вопрос был более подробно, если вы нуждаетесь в них ... swing uncaughtexceptionhandler

0

Я решил мой вопрос с этим решением

public class ParamsException extends RuntimeException { 
private static final long serialVersionUID = 7161500238672497882L; 

public ParamsException() { 
    super(); 
} 

public ParamsException(String message) { 
    super(new BaseResourcesBusiness().getException(message)); 
} 

public ParamsException(Throwable cause) { 
    super(cause); 
} 

public ParamsException(String message, Throwable cause) { 
    super(new BaseResourcesBusiness().getException(message), cause); 
} 

}

BaseResourceBusiness.getException(message) получить сообщение из XML или базы данных на конкретный язык. Так что все мое исключение создается в этом режиме

public static final class NotFoundInDatabaseException extends ParamsException { 
    private static final long serialVersionUID = -1595240938885629473L; 

    public NotFoundInDatabaseException() { 
     super("Not found in database"); 
    } 
} 

в коде им, используя при этом режиме throw new NotFoundInDatabaseException()

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