Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
如果我们要在模板中使用语言包功能,那么我们有两个方法,第一个是代码版本,另一个使用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,那么我们系统会蹦出一个错误来,也就是说如果系统检测到语言包不存在将会抛出异常。
如图:

我们在模板中写下如下的代码:
- {$D.lang.巴嘎 - 嗨.test.japanese}
程序运行后的编译PHP 代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 01:52:33 */ ?>
- <?php echo( G::L('巴嘎 - 嗨','test','japanese') ); ?>
如图:

如果我们没有放置语言包文件,那么系统会抛出异常。
- Package:Lang
- Class:LangPackage
- Method:getPackage
- parameter:$oThePackage
- Message:We can not find a lang file in these files:
- [ D:\phpcondition/htdocs/doyouhaobaby/DoYouHaoBaby/Resource/Lang/Zh-cn/App.lang.php ]
- [ D:\phpcondition/htdocs/doyouhaobaby/DoYouHaoBaby/Resource/Lang/Japanese/Test.lang.php ]
- [ D:\phpcondition/htdocs/doyouhaobaby/TestApp/Lang/Japanese/Test.lang.php ]
如图:

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

程序输出结果如下:
- 巴嘎 - 嗨
如图:

我们打开文件 D:\phpcondition\htdocs\doyouhaobaby\TestApp\Lang\Japanese\Test.lang.php,你会看到:
- <?php
- /** DoYouHaoBaby Framework Lang File, Do not to modify it! */
- return array(
- '50d32da92f726789f2667d5b390fe04d' => "巴嘎 - 嗨" ,
- )
- ?>
如图:

注意:经过实例,我们得出结论,代码版本的语法规则为:
- {$D.lang.语言内容.语言包.语言}
语言内容、语言包和语言不能够出现‘.’,因为这个会引起系统判断错误。
当然,我们也可以将语言值写入默认语言包中,即D:\phpcondition/htdocs/doyouhaobaby/TestApp/Lang/Zh-cn/App.lang.php,这个时候就比较简洁了。
我们在模板中写下如下的代码:
- {$D.lang.Hi ,welcome to user DoYouHaoBaby Framework !}
程序运行后的编译PHP 代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 02:12:59 */ ?>
- <?php echo( G::L('Hi ,welcome to user DoYouHaoBaby Framework !',null,null) ); ?>
如图:

程序运行结果如下:
- Hi ,welcome to user DoYouHaoBaby Framework !
如图:

打开 D:\phpcondition/htdocs/doyouhaobaby/TestApp/Lang/Japanese/App.lang.php 文件,我们可以看到:
- <?php
- /** DoYouHaoBaby Framework Lang File, Do not to modify it! */
- return array(
- 'c183fecf1634944665a2f09a3e4a6371' => "Hi ,welcome to user DoYouHaoBaby Framework !" ,
- )
- ?>
如图:

说明:也就是简单的条件下,我们只需要指定语言内容即可。不好意思,'use'写成了'user',这里我们就不更改了,看官你自便,哈哈。
节点版本的条件和代码版本的差不多,不过用于生成规则不同,节点标签的
语言内容、语言包和语言能够出现‘.’,这个不会像代码版本的lang引起系统判断错误。
我们可以在模板中写下如下的代码:
- <lang>
- The DoYouHaoBaby Company in Chengdu - 中国成都
- </lang>
程序运行后的编译PHP 代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 02:34:37 */ ?>
- <?php print G::L( "The DoYouHaoBaby Company in Chengdu - 中国成都", null, null ) ; ?>
如图:

程序运行结果如下:
- The DoYouHaoBaby Company in Chengdu - 中国成都
如图:

完整版本的代码节点语法:
- <lang package='test' Lang='japanese'>
- The DoYouHaoBaby Company in Japan - 日本分公司
- </lang>
程序运行后的编译PHP 代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 02:47:41 */ ?>
- <?php print G::L( "The DoYouHaoBaby Company in Japan - 日本分公司", 'Test', 'Japanese' ) ; ?>
如图:

程序运行结果如下:
- The DoYouHaoBaby Company in Japan - 日本分公司
如图:

同时,节点语法我们还可以为语言变量指定额外参数:
- <assign name="sLogos" value="NOT TM ,BUT TMD"/>
- <lang package='test' Lang='japanese' '员工第一,客户至上' $sLogos>
- The DoYouHaoBaby Company in Japan - 日本分公司<br>
- 我们的态度:%s。<br>
- 我们的理念:%s。
- </lang>
程序运行后的编译PHP 代码:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 03:13:54 */ ?>
- <?php $sLogos = 'NOT TM ,BUT TMD'; ?>
- <?php print G::L( "The DoYouHaoBaby Company in Japan - 日本分公司<br>
- 我们的态度:%s。<br>
- 我们的理念:%s。", 'Test', 'Japanese',"员工第一,客户至上","$sLogos" ) ; ?>
如图:

程序运行结果如下:
- The DoYouHaoBaby Company in Japan - 日本分公司
- 我们的态度:员工第一,客户至上。
- 我们的理念:NOT TM ,BUT TMD。
如图:

既然这里说到了这个函数,那我们这里就详细地介绍它的用法,首先,这是一个静态函数,位于
D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\LibPHP\App\Lib
中,函数完整代码如下:
- /**
- * 从指定语言的指定语言包取得一条语句
- *
- * @access public
- * @static
- * @param $Value sting 值
- * @param $Package string,LangPackage,null 语言包名称、语言包实例 或 null(使用当前语言包)
- * @param $Lang string,Lang,null 语言名称、语言实例 或 null(使用当前语言)
- * @param Argvs mixed 代入语句的参数
- * @return string
- */
- static public function L( $sValue, $Package=null, $Lang=null /*Argvs*/) {
- // 参数检测
- // 频繁调用,且容易死循环
- $arrArgvs = func_get_args();
- //参数处理
- if(!isset( $arrArgvs[1] ) or $Package ===null or $Package=='')
- $arrArgvs[1] = self::C('APP_LANG_NAME');
- if( !isset( $arrArgvs[2] ) )
- $arrArgvs[2] = self::C('CORE_LANG');
- $sValue = call_user_func_array(array('Lang','setEx'),$arrArgvs);
- return $sValue;
- }
看到函数的原型,你就会发现,如果我们没有指定语言包和语言,那么我们就用系统默认的项目的语言包( App.lang.php )和语言( Zh-cn )来填充,也就是我们的
- 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。
如图:

我们可以使用如下将一个变量写入系统默认语言包:
- G::L( '我是语言内容','dyhb' )
- G::L( '我是语言内容','dyhb',null ) // 等效
程序运行后,返回结果如下:
- 我是语言内容
- 我是语言内容
当然,我们如果要指定参数,这个参数是通过sprint_f 函数来实现的,你也可以参考到,比如我们可以在模板中写下如下代码:
- G::L( '我是语言内容 | %s,%s','dyhb',null,'额外参数1','额外参数2' )
- G::L( '我是语言内容 | %s,%s','dyhb','zh-cn','额外参数1','额外参数2' ) // 等效
程序运行后,返回结果如下:
- 我是语言内容 | 额外参数1,额外参数2
- 我是语言内容 | 额外参数1,额外参数2
说明:这几个都表示将数据写入到默认语言的默认语言包中。当然,要写入其它语言的其它语言包,你可以跟着这个语法来做。不过在指定时候,你需要预先建立一个空白的语言文件,否则会抛出异常。
