正确使用变量变量进行多语言功能

时间:2011-12-23 11:29:32

标签: php

我为我的网络应用程序实现了多语言功能。我通过这个获得了值

echo $lang['the key here'];

我将这些值保存在像这样的单独的文件中

$lang['confirm'] = 'COnfirm the message';
$lang['deny'] = 'Deny the invitation';

所以我想如果有人调用未定义的密钥,比如$ lang ['sdefscfef'],打印空格,我想打印密钥名称,即'sdefscfef'

我想把它作为一个功能

function translate($string) {
if(! isset($string)) {
echo THE KEY;
}
else {
echo $string;
}
}

translate($lang['asdadad']);

并打印密钥

2 个答案:

答案 0 :(得分:2)

我不是直接打印数组而是创建一个函数(_()很常见),并像这样使用它:

echo _('Welcome');

然后_()函数将在$ language数组中查找:

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

答案 1 :(得分: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'