2011-12-23 58 views
1

我为我的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']); 

并取而代之打印键

回答

2

打印阵列直接我会创造一个功能(_()是常见的),并使用它像这样:

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

+0

请不要推荐全局变量... – KingCrunch 2011-12-23 11:34:26

+0

实际上,'_()'更常见。它已经是'gettext()'的别名,但不幸的是,一旦定义了函数,就不能覆盖它。 – ThiefMaster 2011-12-23 11:35:47

+0

@KingCrunch:通常我会同意你的看法,但如果它是一个不使用OOP的小应用程序,那么使用全局方法是非常好的,然后你可以简单地包含适当的语言文件。 – ThiefMaster 2011-12-23 11:36:36

0

使用简单:

$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'