The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ Lang标签 ]

如果我们要在模板中使用语言包功能,那么我们有两个方法,第一个是代码版本,另一个使用Node标签版本。

系统默认有两个语言包,一个是项目语言包位于具体项目下,比如我们的演示中TestApp中:
D:\phpcondition/htdocs/doyouhaobaby/TestApp/Lang/Zh-cn/App.lang.php

系统语言包位于框架内部,我的开发环境下,它的位置如下:
D:\phpcondition/htdocs/doyouhaobaby/DoYouHaoBaby/Resource/Lang/Zh-cn/Dyhb.lang.php

如果,我们没有指定项目默认的App.lang.php,那么我们系统会蹦出一个错误来,也就是说如果系统检测到语言包不存在将会抛出异常。

如图:

1:代码版本的语法规则

我们在模板中写下如下的代码:

  1. {$D.lang.巴嘎 - 嗨.test.japanese}  

程序运行后的编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 01:52:33  */ ?>   
  2. <?php echo( G::L('巴嘎 - 嗨','test','japanese') ); ?>  

如图:

如果我们没有放置语言包文件,那么系统会抛出异常。

  1. Package:Lang   
  2. Class:LangPackage   
  3. Method:getPackage   
  4. parameter:$oThePackage  
  5. Message:We can not find a lang file in these files:   
  6. [ D:\phpcondition/htdocs/doyouhaobaby/DoYouHaoBaby/Resource/Lang/Zh-cn/App.lang.php ]   
  7. [ D:\phpcondition/htdocs/doyouhaobaby/DoYouHaoBaby/Resource/Lang/Japanese/Test.lang.php ]   
  8. [ D:\phpcondition/htdocs/doyouhaobaby/TestApp/Lang/Japanese/Test.lang.php ]  

如图:

这个时候,我们新建一个空白文件 D:\phpcondition/htdocs/doyouhaobaby/TestApp/Lang/Japanese/Test.lang.php。

如图:

程序输出结果如下:

  1. 巴嘎 - 嗨  

如图:

我们打开文件 D:\phpcondition\htdocs\doyouhaobaby\TestApp\Lang\Japanese\Test.lang.php,你会看到:

  1. <?php   
  2. /** DoYouHaoBaby Framework Lang File, Do not to modify it! */  
  3. return array(   
  4. '50d32da92f726789f2667d5b390fe04d' => "巴嘎 - 嗨" ,   
  5. )   
  6.   
  7. ?>  

如图:

注意:经过实例,我们得出结论,代码版本的语法规则为:

  1. {$D.lang.语言内容.语言包.语言}  

语言内容、语言包和语言不能够出现‘.’,因为这个会引起系统判断错误。

当然,我们也可以将语言值写入默认语言包中,即D:\phpcondition/htdocs/doyouhaobaby/TestApp/Lang/Zh-cn/App.lang.php,这个时候就比较简洁了。

我们在模板中写下如下的代码:

  1. {$D.lang.Hi ,welcome to user DoYouHaoBaby Framework !}  


程序运行后的编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 02:12:59  */ ?>   
  2. <?php echo( G::L('Hi ,welcome to user DoYouHaoBaby Framework !',null,null) ); ?>  

如图:


程序运行结果如下:

  1. Hi ,welcome to user DoYouHaoBaby Framework !  

如图:

打开 D:\phpcondition/htdocs/doyouhaobaby/TestApp/Lang/Japanese/App.lang.php 文件,我们可以看到:

  1. <?php   
  2. /** DoYouHaoBaby Framework Lang File, Do not to modify it! */  
  3. return array(   
  4. 'c183fecf1634944665a2f09a3e4a6371' => "Hi ,welcome to user DoYouHaoBaby Framework !" ,   
  5. )   
  6.   
  7. ?>  

如图:

说明:也就是简单的条件下,我们只需要指定语言内容即可。不好意思,'use'写成了'user',这里我们就不更改了,看官你自便,哈哈。


2:节点版本的lang

节点版本的条件和代码版本的差不多,不过用于生成规则不同,节点标签的
语言内容、语言包和语言能够出现‘.’,这个不会像代码版本的lang引起系统判断错误。

我们可以在模板中写下如下的代码:

  1. <lang>   
  2. The DoYouHaoBaby Company in Chengdu - 中国成都   
  3. </lang>  


程序运行后的编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 02:34:37  */ ?>   
  2. <?php print G::L( "The DoYouHaoBaby Company in Chengdu - 中国成都", null, null ) ; ?>  

如图:

程序运行结果如下:

  1. The DoYouHaoBaby Company in Chengdu - 中国成都  

如图:

完整版本的代码节点语法:

  1. <lang package='test' Lang='japanese'>   
  2. The DoYouHaoBaby Company in Japan - 日本分公司   
  3. </lang>  

程序运行后的编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 02:47:41  */ ?>   
  2. <?php print G::L( "The DoYouHaoBaby Company in Japan - 日本分公司", 'Test', 'Japanese' ) ; ?>  

如图:


程序运行结果如下:

  1. The DoYouHaoBaby Company in Japan - 日本分公司  

如图:

同时,节点语法我们还可以为语言变量指定额外参数:

  1. <assign name="sLogos" value="NOT TM ,BUT TMD"/>   
  2. <lang package='test' Lang='japanese' '员工第一,客户至上'  $sLogos>   
  3. The DoYouHaoBaby Company in Japan - 日本分公司<br>   
  4. 我们的态度:%s。<br>   
  5. 我们的理念:%s。   
  6. </lang>  


程序运行后的编译PHP 代码:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 03:13:54  */ ?>   
  2. <?php $sLogos = 'NOT TM ,BUT TMD'; ?>   
  3. <?php print G::L( "The DoYouHaoBaby Company in Japan - 日本分公司<br>  
  4. 我们的态度:%s。<br>  
  5. 我们的理念:%s。", 'Test', 'Japanese',"员工第一,客户至上","$sLogos" ) ; ?>  

如图:


程序运行结果如下:

  1. The DoYouHaoBaby Company in Japan - 日本分公司   
  2. 我们的态度:员工第一,客户至上。   
  3. 我们的理念:NOT TM ,BUT TMD。  

如图:


3:G::L(  )函数详解

既然这里说到了这个函数,那我们这里就详细地介绍它的用法,首先,这是一个静态函数,位于
D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\LibPHP\App\Lib
中,函数完整代码如下:

  1. /**  
  2.  * 从指定语言的指定语言包取得一条语句  
  3.  *  
  4.  * @access public  
  5.  * @static  
  6.  * @param   $Value      sting                   值  
  7.  * @param   $Package    string,LangPackage,null 语言包名称、语言包实例 或 null(使用当前语言包)  
  8.  * @param   $Lang       string,Lang,null        语言名称、语言实例 或 null(使用当前语言)  
  9.  * @param   Argvs       mixed                   代入语句的参数  
  10.  * @return  string  
  11.  */  
  12. static public function L(  $sValue, $Package=null,  $Lang=null /*Argvs*/) {   
  13.   
  14.    // 参数检测   
  15.    // 频繁调用,且容易死循环   
  16.   
  17.    $arrArgvs = func_get_args();   
  18.   
  19.    //参数处理   
  20.    if(!isset( $arrArgvs[1] ) or $Package ===null or $Package=='')   
  21.        $arrArgvs[1] = self::C('APP_LANG_NAME');   
  22.   
  23.    if( !isset( $arrArgvs[2] ) )   
  24.        $arrArgvs[2] = self::C('CORE_LANG');   
  25.   
  26.    $sValue = call_user_func_array(array('Lang','setEx'),$arrArgvs);   
  27.   
  28.     return $sValue;   
  29. }  

看到函数的原型,你就会发现,如果我们没有指定语言包和语言,那么我们就用系统默认的项目的语言包( App.lang.php )和语言( Zh-cn )来填充,也就是我们的

  1. G::L( '我是语言内容' )  

这样的语言包将会保存到 D:\phpcondition\htdocs\doyouhaobaby\TestApp\Lang\Zh-cn\App.lang.php。

G::L函数将会返回一个语言值,这里会返回'我是语言内容',但是如果你将我们的中文语言包翻译成了其它语言版本,那么将会返回某种语言版本的内容,而不是中文。其实这样很方便,开发的时候只需要指定中文,系统自动写入语言文件,当然直接翻译,而不用再修改源代码。

从这里你也看出来,语言包和语言首字母会自动转为大写,所以首字母小写和大写都一样。

还有一个系统默认语言包,位于D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\Resource\Lang\Zh-cn\Dyhb.lang.php。

如图:

我们可以使用如下将一个变量写入系统默认语言包:

  1. G::L( '我是语言内容','dyhb' )   
  2. G::L( '我是语言内容','dyhb',null ) // 等效  

程序运行后,返回结果如下:

  1. 我是语言内容   
  2. 我是语言内容  

当然,我们如果要指定参数,这个参数是通过sprint_f 函数来实现的,你也可以参考到,比如我们可以在模板中写下如下代码:

  1. G::L( '我是语言内容 | %s,%s','dyhb',null,'额外参数1','额外参数2' )   
  2. G::L( '我是语言内容 | %s,%s','dyhb','zh-cn','额外参数1','额外参数2' ) // 等效  

程序运行后,返回结果如下:

  1. 我是语言内容 | 额外参数1,额外参数2   
  2. 我是语言内容 | 额外参数1,额外参数2  


说明:这几个都表示将数据写入到默认语言的默认语言包中。当然,要写入其它语言的其它语言包,你可以跟着这个语法来做。不过在指定时候,你需要预先建立一个空白的语言文件,否则会抛出异常。