3

在我的应用程序中,我使用异常来控制流。以多语言(例如英语和法语)应用程序抛出异常

我用的是这样的:

throw new Exception("Unable to add new user, user already exist"); 

这种方法是完美的应用程序中使用一种语言。但是,当我打算做多语言应用程序时,我不知道该怎么做。

上一行代码应该使用用户正在使用的默认语言生成消息。

什么是一些可能的解决方案?

+0

你期望的异常信息显示给用户,或者只在服务器上?无论如何,你正在寻找[internationalization(缩写为i18n)](http://en.wikipedia.org/wiki/I18n)。 – 2011-05-06 14:21:44

+4

您应该_never_向最终用户显示例外情况!改为使用真正的错误页面。 – KingCrunch 2011-05-06 14:22:09

+0

这听起来像你在谈论多种人类语言,而不是(我从标题中想到的)多种编程语言。你可能想澄清。 – 2011-05-06 14:22:09

回答

1

一般的解决方法是,你有一些设置来表示当前的语言,该消息应该被显示出来。然后,你必须一个文件或数据库表(尽管如果有关数据库连接错误的消息存储在数据库中,这可能不太好 - 你想要的错误信息尽可能方便地访问 - 可能是最好的加载它们都变成了一些缓存,当应用程序启动时),其中包含所有的错误字符串的地方,并在多国语言,如:

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的国际化”,或“PHP的国际化”,我发现的第一个链接是这样的:

http://php-flp.sourceforge.net/getting_started_english.htm

5

在将与多种人类语言一起使用的应用程序中,从不硬编码用户可能会暴露的字符串。他们需要在某种资源文件中。如果你愿意,你可以对SQL语句和内部日志信息进行硬编码,但用户可能看不到。我知道如何在Microsoft Windows中使用字符串资源文件(我将两个C#和一个C++应用程序国际化),并且对于Mac OSX,Linux以及您可能使用的任何其他操作系统,必须有类似的东西。

在这样的情况下,最好抛出类似UserAlreadyExists异常的东西,并在抓到它时将它交给某种错误显示例程。否则,你正在处理代码的处理部分中的UI,这通常不是你想要做的。不要担心异常的多重性,因为如果您将应用程序本地化,您将拥有多个字符串资源文件引用。

+0

第二段为+1,第一段为+ -0); – KingCrunch 2011-05-06 14:38:28

相关问题