gettext和bindtextdomain不会翻译

问题描述 投票:1回答:1

我正在尝试将一些文本翻译成日语。但是无法翻译。即使没有抛出任何错误。根据https://www.php.net/manual/en/function.gettext.php bindtextdomain()应该寻找.mo文件。当我调试我的代码时,ir返回/var/www/lumber-mill.co.jp/sys/locales是不被翻译的问题吗?

我关注了这些-PHP bindtextdomain fails

Gettext doesn't translate

这些都没有解决我的问题。我该如何解决?

<?php
function __autoload($class) {
    $filename = dirname(__FILE__) . "/../core/" . $class . ".php";
    if (file_exists($filename)) {
        include_once $filename;
    }else{
        $filename = dirname(__FILE__) . "/../toolkit/" . $class . ".php";
        if(file_exists($filename)){
            include_once $filename;
        }
    }
}

// タイムゾーンと言語設定

date_default_timezone_set('Asia/Tokyo');
session_start();

if (isset($_GET["lang"])) {
    // パラメタで直接指定されている場合
    switch ($_GET["lang"]) {
        case "en_US":
        case "ja_JP":
            $_SESSION["LANGUAGE"] = $_GET["lang"];
            break;
        default:
            break;
    }
} else if (!isset($_SESSION["LANGUAGE"])) {
    // セッションに定義されていない場合、リクエストヘッダから判別します
    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
        $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
        $languages = array_reverse($languages);
    } else {
        $languages = array();
    }

    $lang = 'ja_JP'; // 規定値
    foreach ($languages as $language) {
        if (preg_match('/^ja/i', $language)) {
            $lang = 'ja_JP';
        } elseif (preg_match('/^en/i', $language)) {
            $lang = 'en_US';
        }
    }
    $_SESSION["LANGUAGE"] = $lang;
}

// 言語設定
setlocale(LC_ALL, $_SESSION["LANGUAGE"] . '.utf8');
$res = bindtextdomain("messages", $_SERVER["DOCUMENT_ROOT"]."/../sys/locales");
$mes = textdomain("messages");
bind_textdomain_codeset("messages", 'UTF-8');
print_r($res);
print_r($mes);

// 動作環境
if(strpos($_SERVER["SERVER_NAME"],"dev.") === 0){
  define("ENV","staging");
}else{
  define("ENV","production");
}
php gettext
1个回答
0
投票

我的问题在我刚添加以下行时已解决-putenv("LANGUAGE=".$_SESSION["LANGUAGE"].".utf8");

© www.soinside.com 2019 - 2024. All rights reserved.