Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在多语言(如英语和法语)应用程序中引发异常_Php_Exception Handling_Internationalization_Multilingual - Fatal编程技术网

Php 在多语言(如英语和法语)应用程序中引发异常

Php 在多语言(如英语和法语)应用程序中引发异常,php,exception-handling,internationalization,multilingual,Php,Exception Handling,Internationalization,Multilingual,在我的应用程序中,我使用异常来控制流 我用这样的方式: throw new Exception("Unable to add new user, user already exist"); 这种方法在使用一种语言的应用程序中是完美的。然而,当我打算制作一个多语言应用程序时,我不知道该怎么做 前一行代码应以用户正在使用的默认语言生成消息 有哪些可能的解决方案???在一个将与多种人类语言一起使用的应用程序中,永远不要使用用户可能接触到的硬代码字符串。它们需要在某种资源文件中。如果愿意,可以硬编码S

在我的应用程序中,我使用异常来控制流

我用这样的方式:

throw new Exception("Unable to add new user, user already exist");
这种方法在使用一种语言的应用程序中是完美的。然而,当我打算制作一个多语言应用程序时,我不知道该怎么做

前一行代码应以用户正在使用的默认语言生成消息


有哪些可能的解决方案???

在一个将与多种人类语言一起使用的应用程序中,永远不要使用用户可能接触到的硬代码字符串。它们需要在某种资源文件中。如果愿意,可以硬编码SQL语句和内部日志信息,但用户可能看不到任何内容。我知道如何在微软Windows中使用字符串资源文件(我国际化了两个C++和一个C++应用程序),而且对于Mac OSX、Linux和任何其他你可能使用的OS来说都有类似的东西。
在这种情况下,最好抛出UserAlreadyExists异常之类的东西,并在捕获它时将其交给某种错误显示例程。否则,您将在代码的处理部分处理UI,而这通常不是您想要做的。不要担心异常的多样性,因为如果要本地化应用程序,将有多个字符串资源文件引用。

您希望国际化应用程序。这件事已经有很多人了


一般的解决方案是,您有一些设置来指示消息应显示的当前语言。然后,您就有了一个文件或数据库表(尽管如果数据库中存储了有关数据库连接错误的消息,这可能不太好-您希望错误消息尽可能容易访问-最好在应用程序启动时将它们全部加载到某个缓存中),其中包含所有错误字符串,以及多种语言,例如:

userExists.English = "Unable to add new user, user already exist"
userExists.Spanish = "<my Spanish isn't good enough to even try>"
userExists.ClassicalMongolian = ...
…但幸运的是,有些框架已经做了很多。在网上搜索“php国际化”或“php i18n”,我找到的第一个链接是:


您希望异常消息显示给用户,还是仅显示在服务器上?无论如何,您正在寻找。您永远不应该向最终用户显示异常!使用一个真正的错误页面。这听起来像是在谈论多种人类语言,而不是(我从标题中所想的)多种编程语言。您可能需要澄清。@Matt Ball:消息将显示给用户。我只想显示错误消息,如“用户存在”、“找不到结果”等@David Thornley:我编辑了标题thanx。
//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 );