"中文", "vi_VN" => "Việt nam", // "zh_TW" => "繁体", // "en" => "English", // "ko" => "한글", ); /** * 设置语言翻译文件域名 * @param string $domain PO翻译文件域名 */ function setLangDomain($domain) { $lang = getLang(); // 翻译文件修改热更: 由于php有缓存,所以无法热更翻译,故只能用改名字的方式加载不一样的翻译文件版本进行热更 if ($lang) { $poPath = $_SERVER['DOCUMENT_ROOT'] . "/language/" . $lang . "/LC_MESSAGES/"; $poList = glob($poPath . $domain . "*.po"); // 只判断po文件 $verInt = 0; foreach ($poList as $value) { $startIndex = strripos($value, $domain) + strlen($domain); $ver = str_replace(".po", "", substr($value, $startIndex)); if (!$ver || !is_numeric($ver)) { continue; } if ($verInt < intval($ver)) { $verInt = intval($ver); } } if ($verInt > 0) { $domain = $domain . $verInt; } } // I18N 程序范例开始 // define('wwwbase', $domain); // 定义要用的mo文件名称,常规来说,我们都把PACKAGE的名称定义和程序名称相同。 bindtextdomain($domain, './language'); //设置某个域的mo文件路径 textdomain($domain); putenv('LANG=' . $lang); setlocale(LC_ALL, $lang); // 指定要用的语系,如:en_US、zh_CN、zh_TW } /** * 获取php文件po翻译文件域名称 */ function getphppodomain() { return "gmt"; } /** * 获取js脚本文件po翻译文件域名称 */ function getjspodomain() { return "gmtjs"; } /** * 显示选择切换语言 */ function showSelectLang() { global $langArray; $lang = getLang(); echo ""; } function getLangDefault() { // 默认中文或可扩展其他逻辑 return "zh_CN"; } /** * 获取当前页面语言 * @return string 默认中文zh_CN; 越南文vi_VN */ function getLang() { // $lang = $_COOKIE["lang"]; $lang = $_SESSION['lang']; if (!$lang) { $lang = setLang(getLangDefault()); } return $lang; } function setLang($lang) { global $langArray; if (!array_key_exists($lang, $langArray)) { return; } // setcookie("lang", $lang, time() + 99 * 365 * 24 * 3600); \CommFunc\SessionSave(array("lang" => $lang)); setLangDomain(getphppodomain()); return $lang; } setLangDomain(getphppodomain()); #============================================================================ static $pomsg = null; function gettext($text) { // return _($text); // 理论上应该直接使用 _("xxx") 获取,由于php升级5.5后暂时无法正常翻译,不明原因,暂自己写一个解析po翻译文件函数 global $pomsg; if ($pomsg == null) { $lang = getLang(); $pofile = $_SERVER['DOCUMENT_ROOT'] . "/language/" . $lang . "/LC_MESSAGES/" . getphppodomain() . ".po"; $pomsg = array(); if (file_exists($pofile)) { // msgid 及 msgstr 都可能会有多行的情况 $msgid = ""; $msgstr = ""; $msgType = ""; foreach (file($pofile) as $line) { // echo $line . "
"; if (substr($line, 0, 5) == "msgid") { if ($msgid != "" && $msgstr != "") { $pomsg[$msgid] = $msgstr; } $msgid = substr($line, 7, -2); $msgstr = ""; $msgType = "id"; } else if (substr($line, 0, 6) == "msgstr") { if ($msgid == "") { $msgType = ""; } else { $msgstr = substr($line, 8, -2); $msgType = "str"; } } else if (substr($line, 0, 1) == "\"") { if ($msgType == "id") { $msgid .= substr($line, 1, -2); } else if ($msgType == "str") { $msgstr .= substr($line, 1, -2); } } } // 最后一条 if ($msgid != "" && $msgstr != "") { $pomsg[$msgid] = $msgstr; } // echo "pomsg:" . \CommFunc\MyJson_encode($pomsg) . "
"; } } if (array_key_exists($text, $pomsg)) { return $pomsg[$text]; } return $text; }