"中文",
"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) . "