2011-12-23 105 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'