Я бы всегда предпочитал исключения, а не произвольные возвращаемые значения.
Одним из способов создания многоязычных исключений является создание базового класса, который заботится о переводе, т. Е .:
class TranslatedException : Exception {
private string translationKey = "base_exception";
public string ToString() {
return YourTranslationClass.GetTranslation(this.translationKey);
}
}
Остальные исключения просто необходимо унаследовать от этого класса и соответственно изменить ключ перевода.