我正在开发一个PHP应用程序,我想知道为其他国家的用户提供多语言支持的最佳方法.
我精通PHP,但从未开发过任何支持其他语言的东西.
我想将语言放入带有常量的PHP文件中,例如:
en.php可能包含:
define('HZ_DB_CONN_ERR', 'There was an error connecting to the database.');
和fr.php可能包含:
define('HZ_DB_CONN_ERR', 'whatever the french is for the above...');
然后我可以调用一个函数并自动传入正确的语言.
hz_die('HZ_DB_CONN_ERR', $this);
这是一个很好的方式吗?
- morristhebear.
奇怪的.人们似乎忽略了明显的解决方案.您对区域设置特定文件的想法很好.有en.php:
define('LOGIN_INCORRECT','Your login details are incorrect.'); ...
然后,假设你有一个全局配置/常量文件(由于很多原因我建议),请使用以下代码:
if ($language == 'en') { reqire_once 'en.php'; } else if ($language == 'de') { require_once 'de.php'; }
您可以定义数字和货币显示,比较/排序(即德语,法语和英语都有不同的校对方法)等功能.
人们常常忘记PHP是一种动态语言,所以这样的事情:
if ($language == 'en') { function cmp($a, $b) { ... } } else if ($language == 'de') { function cmp($a, $b) { ... } }
事实上是完全合法的.使用它们.
您可以使用gettext或支持gettext的东西以及Zend_Translate等.
编辑:
仅仅为了精确,Zend_Translate支持没有gettext模块的gettext.您可以在此处看到它支持的许多不同类型的输入.
如果你也建议使用数组,你也可以使用Zend_Translate.关键是,如果你今天使用数组和明天的gettext,xml或其他东西,你只需要更改Zend_Translate的配置.