一,适用的场景:
旧系统需要增加多语言,不想改变原有的运行环境,
所以没有使用gettext,选择简单的用数组来实现
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
或: https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: [email protected]
二,php代码:
1,定义一个功能类
<?php /* 简单实现i18n功能的类, 可适用于旧网站的改造 */ class locale { //日文 var $arr_ja = [ "top"=>[ "magazine"=>"雑誌管理", "source"=>"素材管理", "user"=>"ユーザー管理", "system"=>"システム管理", ],]; //英文 var $arr_en = [ "top"=>[ "magazine"=>"magazine", "source"=>"source", "user"=>"user", "system"=>"system", ],]; //简中 var $arr_zh = [ "top"=>[ "magazine"=>"杂志管理", "source"=>"资源管理", "user"=>"用户管理", "system"=>"系统管理", ],]; //语言数组 var $arr_lang = [ "zh","en","ja" ]; /* 得到当前要显示的语言名字, 先判断是否已保存在cookie 如果cookie中不存在, 则取浏览器的语言 如果都没有,则选择中文 */ public function getLocale(){ $default = "zh"; //判断有无cookie if (isset($_COOKIE['locale'])) { if (in_array($_COOKIE['locale'], $this->arr_lang)){ return $_COOKIE['locale']; } else { //无cookie取浏览器的语言 $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); if (in_array($lang, $this->arr_lang)){ return $lang; } else { return $default; } } } else { //无cookie取浏览器的语言 $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); if (in_array($lang, $this->arr_lang)){ return $lang; } else { return $default; } } } /* 得到语言的数据 */ public function getLanguage($lang){ if ($lang == 'zh') { return $this->arr_zh; } else if ($lang == 'en') { return $this->arr_en; } else if ($lang == 'ja') { return $this->arr_ja; } else { return $this->arr_zh; } } } ?>
2,在通用的controller当中调用locale类
$localeObj = new locale(); $lang = $localeObj->getLocale(); $arr = $localeObj->getLanguage($lang); $smarty->assign("lang", $arr);
3,smarty模板中调用:
<ul class="nav" id="mobile-nav"> <li class="dropdown"> <a id="linkMaga" href="/v/index/"><i id="iconMaga" class="icon-file icon-white"></i> {$lang.top.magazine} </a> </li> <li class="dropdown"> <a id="linkSource" href="/v/imagecenter/"><i id="iconSource" class="icon-th icon-white"></i> {$lang.top.source} </a> </li> <li class="dropdown"> <a id="iconUser" href="/v/usercenter/"><i id="iconUser" class="icon-book icon-white"></i> {$lang.top.user} </a> </li> <li class="dropdown"> <a id="linkSystem" href="/v/syscenter/"><i id="iconSystem" class="icon-th icon-white"></i> {$lang.top.system} </a> </li> </ul>
三,测试效果:
日文
英文
四,查看php的版本:
[lhdop@blog ~]$ /usr/local/soft/php7/bin/php --version PHP 7.4.2 (cli) (built: Apr 20 2022 16:49:58) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies
标签:lang,arr,php,return,top,else,7.4,zh,PHP From: https://www.cnblogs.com/architectforest/p/17254350.html