我必须开发一个非常简单的 php 网站,所以我不需要框架。
但它必须支持多语言(EN/FR/CHINESE)。
我寻找了 php 内置系统,发现了两种方法:
- php5.3 的 intl 模块(http://php.net/manual/fr/book.intl.php http://php.net/manual/fr/book.intl.php)
- 获取文本(http://php.net/manual/fr/book.gettext.php http://php.net/manual/fr/book.gettext.php)
我没有没有框架的 i18n 经验,所以有什么建议最简单的方法支持多语言?
最后,我只需要一个将翻译搜索到文件中的功能(按语言一个文件)。
情商:trans('hello');
=> en.yaml(无论是否为yaml,这只是一个示例)
hello: "Hello world!"
=> fr.yaml
hello: "Bonjour tout le monde !"
如果可能的话我更喜欢纯 PHP 实现
虽然ext/gettext
and ext/intl
都与 i18(国际化)相关,gettext
处理翻译的同时intl
处理国际化事务,例如数字和日期显示、排序顺序和音译。因此,您实际上需要两者才能获得完整的 i18 解决方案。根据您的需求,您可能会想出一个依赖于上述扩展或使用某些框架提供的组件的自制解决方案:
-
Translation
-
Symfony 2 翻译组件 http://symfony.com/doc/current/book/translation.html: https://github.com/symfony/Translation https://github.com/symfony/Translation
- Zend框架Zend_Translate http://framework.zend.com/manual/en/zend.translate.html
-
Internationalization
- Zend框架Zend_Locale http://framework.zend.com/manual/en/zend.locale.html
如果您只需要翻译并且站点足够简单,那么您的简单解决方案(将翻译配置文件读入 PHP 数组,使用简单的函数检索令牌)可能是最简单的。
我能想到的最简单的解决方案是:
$translation = array(
'Hello world!' => array(
'fr' => 'Bonjour tout le monde!',
'de' => 'Hallo Welt!'
)
);
if (!function_exists('gettext')) {
function _($token, $lang = null) {
global $translation;
if ( empty($lang)
|| !array_key_exists($token, $translation)
|| !array_key_exists($lang, $translation[$token])
) {
return $token;
} else {
return $translation[$token][$lang];
}
}
}
echo _('Hello World!');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)