Общее решение состоит в том, что у вас есть некоторые настройки для указания текущего языка, на котором должно отображаться сообщение. Затем у вас есть файл или таблица базы данных (хотя это может быть не очень хорошо, если сообщения об ошибках подключения к базе данных хранятся в база данных - вы хотите, чтобы сообщения об ошибках были как можно более доступными, - возможно, лучше всего было бы загрузить их ВСЕ в некоторый кеш при запуске приложения) где-нибудь, где содержатся все ваши строки ошибок, и на нескольких языках, например:
userExists.English = "Unable to add new user, user already exist"
userExists.Spanish = "<my Spanish isn't good enough to even try>"
userExists.ClassicalMongolian = ...
Тогда, когда вы выбрасываете исключение, у вас есть что-то вроде
//currentLanguage indicates what the language of the current session is.
//the function lookupExceptionString must be able to look up the
//correct string based on the value of currentLanguage
exceptionString = lookupExceptionString(currentLanguage);
throw new Exception(exceptionString );
... Но, к счастью для вас, есть фреймворки, которые уже многое делают. Выполните поиск в Интернете по запросу "php internationalization" или "php i18n". Первая найденная мной ссылка была такой:
http://php -flp.sourceforge.net / getting_started_english.htm