• 中英文语言转换类


    简介:这是中英文语言转换类的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=343821' scrolling='no'>

    突然想做个中英文的功能试一下,只是把一些常用且有规律的词汇比如 ‘评论’ ,时间单位(几秒几小时前这些)可以自由的转化。

    起初想到制成XML文档形式,这样操作也起来很容易。只是看到说XML效率不怎样

    再者就是不同的模板,可这样也有个小问题,有些词汇比如时间提示是不确定,与可能是minute ,day。也有可能复数加 s

    那好吧,做成数组,可数组就得做成在php文件的变量,很难做些扩展(我所知道所认为的是这样)

    最后做成txt文本文件的形式,同样也为这样的效率担心,打开文件,搜索字符串,截取字符串这些,所幸最后运行了一下,一般机子大概0.0004秒,这让我很惊奇原以为会很慢,毕竟要调用多次。

    好吧,上代码

      class language
    {
    static $lanObject;
    public $type; // unit , dashboard , menu ,other
    public $lan; // language
    private $special; // The common in the file

    private function __construct()
    {
    if( isset($_GET['hl']) || isset($_POST['hl']) )
    {
    switch( isset($_GET['hl'])?$_GET['hl']:$_POST['hl'] )
    {
    case 'en':
    $this->lan = 'en';
    case 'zh':
    $this->lan = 'zh';
    case 'all':
    $this->lan = 'all';
    default:
    $this->error();
    }
    }
    else
    $this->lan = isset($_COOKIE['hl']) ? $_COOKIE['hl']:'zh';
    }
    public static function getObject()
    {
    if( !(self::$lanObject instanceof self) )
    self::$lanObject = new language();

    return self::$lanObject;
    }
    public function lto($key) //$key is English
    {
    if( $this->lan !== 'zh' )
    return $key;

    if( empty($this->special) ) // if the $special is null
    {
    if( isset($this->type) )
    $this->special = file_get_contents($this->type.'.txt');
    else
    return $key;
    }

    echo $this->search($key);
    }
    private function search($searchTozh) // PHP String
    {
    $key_start = strpos($this->special,$searchTozh);
    $key_end = strpos($this->special,' ',$key_start);
    $len_str = strlen($searchTozh);
    $for_sub = $key_start + $len_str + 1;
    return substr($this->special, $for_sub, $key_end - $for_sub);
    }
    }

      strpos(); 是找到字符串第一次出现的位置 比如 ‘wo’ 在 ‘hello world’ 中,返回值为 6

      substr();是截取字符串的一部分  

    接下来是调试时加上的代码

      $la = language::getObject(); 
    $la->type = 'unit';
    $la->lto('min');
    echo '<br/>';
    $la->lto('hello');

        lto(这里面要翻译的英文); 

    unit.txt 文件的内容格式是

        hello-你好 min-小 minute-分钟 minutes-分钟

     

      $special设计为全局也是想到不止一次会调用lto() ,如果反复加载文件太浪费性能了。

      $type设计为公有是考虑到加载的文件的效率问题,有的时候并不需要显示几天前这些,所以不如把这些按使用类型分开,比如有专门负责菜单翻译的menu.txt ,也有专门为操作,比如删除,收藏 翻译的txt文本。这样可以自由设定要加载的文本

    语言也可以自由设定。

    好吧,程序还可以改进,我没有按http请求中的客户端语言来设置$lan,

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/343821.html pageNo:5
  • 相关阅读:
    wapp HTTP Error 404. The requested resource is not found.
    JS 动态修改json字符串
    使用VS2017新建的Web项目报错:Package Microsoft.Composition 1.0.27 is not compatible with netcoreapp1.1
    java park unpark
    DOUHAO
    Thread dump
    线程状态
    https://stackoverflow.com/questions/20795295/why-jstack-out-says-thread-state-is-runnable-while-socketread
    rocketmq-flink
    the-implementation-of-epoll
  • 原文地址:https://www.cnblogs.com/ooooo/p/2241977.html
Copyright © 2020-2023  润新知