编程多语言PHP应用程序

mor*_*ear 13 php web-applications internationalization

我正在开发一个PHP应用程序,我想知道为其他国家的用户提供多语言支持的最佳方法.

我精通PHP,但从未开发过任何支持其他语言的东西.

我想将语言放入带有常量的PHP文件中,例如:

en.php可能包含:

define('HZ_DB_CONN_ERR', 'There was an error connecting to the database.');
Run Code Online (Sandbox Code Playgroud)

和fr.php可能包含:

define('HZ_DB_CONN_ERR', 'whatever the french is for the above...');
Run Code Online (Sandbox Code Playgroud)

然后我可以调用一个函数并自动传入正确的语言.

hz_die('HZ_DB_CONN_ERR', $this);
Run Code Online (Sandbox Code Playgroud)

这是一个很好的方式吗?

- morristhebear.

cle*_*tus 11

奇怪的.人们似乎忽略了明显的解决方案.您对区域设置特定文件的想法很好.有en.php:

define('LOGIN_INCORRECT','Your login details are incorrect.');
...
Run Code Online (Sandbox Code Playgroud)

然后,假设你有一个全局配置/常量文件(由于很多原因我建议),请使用以下代码:

if ($language == 'en') {
  reqire_once 'en.php';
} else if ($language == 'de') {
  require_once 'de.php';
}
Run Code Online (Sandbox Code Playgroud)

您可以定义数字和货币显示,比较/排序(即德语,法语和英语都有不同的校对方法)等功能.

人们常常忘记PHP是一种动态语言,所以这样的事情:

if ($language == 'en') {
  function cmp($a, $b) { ... }
} else if ($language == 'de') {
  function cmp($a, $b) { ... }
}
Run Code Online (Sandbox Code Playgroud)

事实上是完全合法的.使用它们.


OIS*_*OIS 8

您可以使用gettext或支持gettext的东西以及Zend_Translate等.

编辑:

仅仅为了精确,Zend_Translate支持没有gettext模块的gettext.您可以在此处看到它支持的许多不同类型的输入.

如果你也建议使用数组,你也可以使用Zend_Translate.关键是,如果你今天使用数组和明天的gettext,xml或其他东西,你只需要更改Zend_Translate的配置.


Rad*_*Rad 2

您可能想要查看像 CakePHP 或 CodeIgniter 这样的框架,它们可以使编写国际化应用程序变得更加容易。您不仅需要考虑字符串,还必须考虑数字格式和日期格式等内容

  • 恕我直言,CakePHP 完全是矫枉过正(并且像 99% 的 MVC 框架一样膨胀)。 (4认同)