正确使用多语言功能的变量变量
问题描述:
我为我的Web应用程序实现了多语言功能。我通过这个正确使用多语言功能的变量变量
echo $lang['the key here'];
获取和i的值保持值在一个单独的fiels这样
$lang['confirm'] = 'COnfirm the message';
$lang['deny'] = 'Deny the invitation';
,所以我想,如果有人把像$ LANG [ 'sdefscfef'],一个未定义的关键insted的打印空白的,我想打印键名,即“sdefscfef”
我希望把它作为一个功能
function translate($string) {
if(! isset($string)) {
echo THE KEY;
}
else {
echo $string;
}
}
translate($lang['asdadad']);
并取而代之打印键
答
打印阵列直接我会创造一个功能(_()
是常见的),并使用它像这样:
echo _('Welcome');
而且_()
功能,那么将看在$语言数组:
function _ ($str) {
global $language;
return isset($language[$str]) ? $language[$str] : $str;
}
类似的东西。
如果你想避免使用全局变量,你可以用这一切在这样一个类:
class Lang {
private $lang = array();
public static translate ($str) {
return isset(self::$lang[$str]) self::$lang[$str] : $str;
}
}
然后,以避免键入Lang::translate()
到处都可以做到这一点:
function _ ($str) {
return Lang::translate($str);
}
这里有一个小更先进的语言类的例子:http://code.google.com/p/sleek-php/source/browse/trunk/Core/Lang.php
答
使用简单:
$lang['confirm'] = 'COnfirm the message';
$lang['deny'] = 'Deny the invitation';
....
function getTranslation($key) {
global $lang;
if (isset($lang[$key])) {
return $lang[$key];
} else {
return $key;
}
}
// Usage:
echo getTranslation('confirm'); // Prints 'Confirm the message'
echo getTranslation('sjdhj'); // Prints 'sjdhj'
请不要推荐全局变量... – KingCrunch 2011-12-23 11:34:26
实际上,'_()'更常见。它已经是'gettext()'的别名,但不幸的是,一旦定义了函数,就不能覆盖它。 – ThiefMaster 2011-12-23 11:35:47
@KingCrunch:通常我会同意你的看法,但如果它是一个不使用OOP的小应用程序,那么使用全局方法是非常好的,然后你可以简单地包含适当的语言文件。 – ThiefMaster 2011-12-23 11:36:36