php:用数组实现多语言(php 7.4.2)-编程思维

一,适用的场景:

      旧系统需要增加多语言,不想改变原有的运行环境,
      所以没有使用gettext,选择简单的用数组来实现

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

         对应的源码可以访问这里获取: https://github.com/liuhongdi/
         或: https://gitee.com/liuhongdi

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,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

 

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/architectforest/p/17254350.html

小编亲身实操,教你配置phpstorm与xdebug的调试配置,不成功你骂我-编程思维

开发php,还是找个专业的Ide较好,vscode毕竟在php上不专业,需要下载各种插件才行,还不支持多线程调试,因此小编下载了phpstorm,打算以后用phpstorm来开发php项目,断点调试代码是必不可少的,还是用xdebug吧,可小编在网上搜索了无数篇文章,照着做了一天,竟然没调试成功。最后功夫不负有心人,终

php-编程思维

今天下午一直在捣鼓如何用PhpStorm进行调试,查找了许多资料,零零碎碎的,所以自己弄篇文章记录一下步骤。 安装xdebug 使用brew安装xdebug,语法如下 brew install homebrew/php/php<version number>-xdebug 到https://xdebug.

[gpt] php查询mongo,触发了 operation exceeded time limit-编程思维

  "operation exceeded time limit"错误通常意味着查询所需的时间超过了MongoDB实例配置的操作超时限制。 这可以是由于查询需要处理大量数据或没有正确索引导致的慢查询。 建议使用explain()命令来分析查询计划并确认是否使用了正确的索引。 如果查询仍然需要更长时间才能完成,则可以考虑

[gpt] nginx+php 技术栈 504 gateway time-out 解决方案-编程思维

  1. 504 Gateway Time-out 是什么情况?   504 Gateway Time-out 是一种 HTTP 状态码,表示服务器在作为网关或代理时无法从上游服务器(例如应用程序服务器)接收到请求的响应。 这通常意味着上游服务器在处理请求时花费了太长时间,或者出现了连接问题。 这可能是暂时性问题,因此

记录一次关于cookie、json中文乱码的解决方法-编程思维

今天工作上遇到一个问题,需要把一个对象集合List<Model>存入一个Cookie,按照原来都封装方法存入都ok,但是到取值都时候中文会变成乱码。 首先,我们可以确认Json和Cookie都有可能乱码,我们可以在转换Json和写入写出Cookie的时候都加入调试代码,这样可以看到转换Json和Cookie

php cookie处理函数-编程思维

(o゜▽゜)o☆[BINGO!] ok,我们先看看cookie是什么东东? cookie是服务器留在客户端的用于识别用户或者存储一些数据的小文件(注意,session存储在服务器端,这是两者的区别之一)。我们平时登录某门户时,会有选项“是否保存登录”或者“下次自动登录”,当我们勾选了之后,服务器就会在我们的浏览器创建c

cookie时效无限延长方案-编程思维

作者:京东科技 刘清洁 1、痛点(*) 自动化测试有2种形式,接口自动化和UI自动化。而UI自动化经常会被登录节点堵塞,例如验证码、图形、滑块等,尽管有些方式可以识别图形和定位滑块位置,但成功率都不高,无法真正意义上实现自动化执行;而http接口的自动化测试前置如果依赖cookie,也无法实现自动化执行。 a、怎么样才

看我如何用定值 cookie 实现反爬-编程思维

摘要:本次案例,用定值Cookie实现反爬。 本文分享自华为云社区《我是怎么用一个特殊Cookie,限制住别人的爬虫的》,作者: 梦想橡皮擦 。 Cookie 生成 由于本案例需要用到一个特定的 Cookie ,所以我们需要提前将其生成,你可以直接设置一个固定的字符串,也可以使用 Python 加密模块来加密一段文本,