Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php gettext安装程序不工作_Php_Internationalization_Translation_Locale_Gettext - Fatal编程技术网

Php gettext安装程序不工作

Php gettext安装程序不工作,php,internationalization,translation,locale,gettext,Php,Internationalization,Translation,Locale,Gettext,我让gettext工作,但现在它突然无法翻译。我想知道发生了什么事。我试图使用/sys/locale/no\u no/LC\u MESSAGES/MESSAGES.po将页面翻译成挪威语 /public/home.php $locale = "en_US"; if (isSet($_COOKIE['lang'])) $locale = $_COOKIE['lang']; putenv("LC_ALL=$locale"); setlocale(LC_ALL, $locale); bindtextd

我让gettext工作,但现在它突然无法翻译。我想知道发生了什么事。我试图使用
/sys/locale/no\u no/LC\u MESSAGES/MESSAGES.po
将页面翻译成挪威语

/public/home.php

$locale = "en_US";
if (isSet($_COOKIE['lang'])) $locale = $_COOKIE['lang'];
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", "../sys/locale");
textdomain("messages");

echo "<p>locale: " . $locale . " "; 
echo gettext("Home"); 
exit(); 
$locale=“en_US”;
如果(isSet($_COOKIE['lang'))$locale=$_COOKIE['lang'];
putenv(“LC_ALL=$locale”);
setlocale(LC_ALL,$locale);
bindtextdomain(“消息“,”./sys/locale”);
文本域(“消息”);
echo“locale:”$场所" "; 
echo gettext(“主页”);
退出();
这是打印出来的


locale:no_no Home
当我应该在
locale:no_no Hjem

使用日语时,我必须执行以下操作:

putenv("LANG=ja_JP.UTF-8");
setlocale(LC_MESSAGES, 'ja_JP.UTF-8');
bindtextdomain('messages', '../locale');
bind_textdomain_codeset('messages', 'UTF-8');
textdomain('messages');
对于其他语言,我发现我并不总是需要添加编码后缀,这是非常不一致的。同样,当“en”工作正常时,我不能只使用“ja”


setlocale
返回false,除非该区域设置列在
/usr/share/i18n/SUPPORTED
中,但即使出现错误,翻译也会正常工作。

对于日语,我必须执行以下操作:

putenv("LANG=ja_JP.UTF-8");
setlocale(LC_MESSAGES, 'ja_JP.UTF-8');
bindtextdomain('messages', '../locale');
bind_textdomain_codeset('messages', 'UTF-8');
textdomain('messages');
对于其他语言,我发现我并不总是需要添加编码后缀,这是非常不一致的。同样,当“en”工作正常时,我不能只使用“ja”


setlocale
返回false,除非该区域设置列在
/usr/share/i18n/SUPPORTED
中,但尽管出现错误,翻译通常仍能正常工作。

我看到您正在与norwegian进行斗争。Debian服务器也有问题,它只支持nb_NO和nn_NO,但不支持NO。 解决方案是使用区域设置名称的确切名称作为文件夹和设置:

确保已安装区域设置:

$ locale -a
C
POSIX
en_US.utf8
nb_NO.utf8
nn_NO.utf8
因此,挪威bokmål的php设置:

setlocale(LC_ALL, 'nb_NO.utf8');
putenv('LANGUAGE=nb_NO.utf8');
采购订单文件的路径应具有相同的名称,例如:

./i18n/nb_NO.utf8/LC_MESSAGES/messages.po

我想同样的解决方案也适用于Ubuntu。

我看到你在和挪威人作战。Debian服务器也有问题,它只支持nb_NO和nn_NO,但不支持NO。 解决方案是使用区域设置名称的确切名称作为文件夹和设置:

确保已安装区域设置:

$ locale -a
C
POSIX
en_US.utf8
nb_NO.utf8
nn_NO.utf8
因此,挪威bokmål的php设置:

setlocale(LC_ALL, 'nb_NO.utf8');
putenv('LANGUAGE=nb_NO.utf8');
采购订单文件的路径应具有相同的名称,例如:

./i18n/nb_NO.utf8/LC_MESSAGES/messages.po

我想同样的解决方案也适用于Ubuntu。

您可能需要重新配置区域设置:

安装debconf(即以root用户身份运行apt-get-update,然后运行apt-get-Install-debconf)

运行dpkg以根用户身份重新配置区域设置

这个代码对我有用:

//Put this in cookie for example

$lang = GetPrefLanguage($_SERVER["HTTP_ACCEPT_LANGUAGE"]);

$language = $lang . '.utf8';

setlocale(LC_ALL, $language);

// Set language
putenv('LANG='.$language);

// Specify location of translation tables
bindtextdomain('traductions', dirname(__FILE__).'/locale');

// Choose domain
textdomain("traductions");

// Translation is looking for in ./locale/xx_XX/LC_MESSAGES/traductions.mo now
/*GET Pref language */
function GetPrefLanguage($str_http_languages)
{
    $lang = substr($str_http_languages, 0, 2);

    switch($lang) {
        case 'fr':
            return 'fr_FR';
        break;
        case 'de':
            return 'de_DE';
        break;
        case 'en':
            return 'en_US';
        break;
        default:
            return 'en_US';
    }
}

您可能需要重新配置区域设置:

安装debconf(即以root用户身份运行apt-get-update,然后运行apt-get-Install-debconf)

运行dpkg以根用户身份重新配置区域设置

这个代码对我有用:

//Put this in cookie for example

$lang = GetPrefLanguage($_SERVER["HTTP_ACCEPT_LANGUAGE"]);

$language = $lang . '.utf8';

setlocale(LC_ALL, $language);

// Set language
putenv('LANG='.$language);

// Specify location of translation tables
bindtextdomain('traductions', dirname(__FILE__).'/locale');

// Choose domain
textdomain("traductions");

// Translation is looking for in ./locale/xx_XX/LC_MESSAGES/traductions.mo now
/*GET Pref language */
function GetPrefLanguage($str_http_languages)
{
    $lang = substr($str_http_languages, 0, 2);

    switch($lang) {
        case 'fr':
            return 'fr_FR';
        break;
        case 'de':
            return 'de_DE';
        break;
        case 'en':
            return 'en_US';
        break;
        default:
            return 'en_US';
    }
}
尝试添加
putenv(“LANG=$locale”)。这是最后一级环境变量gettext Probe,但有时会有所帮助。否则,
LANGUAGE=
具有比
LC\u ALL=
更高的优先级,并允许选择
no\u no:nl\u nl:en\u GB
尝试添加
putenv(“LANG=$locale”)。这是最后一级环境变量gettext Probe,但有时会有所帮助。否则,
LANGUAGE=
具有比
LC\u ALL=
更高的优先级,并允许备选方案
no\u no:nl\u nl:en\u GB