The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ JavaScript语言包 ]

在我们开发模板中,JavaScript是一种必可少提升Web交互的有力工具,为了Web产品国际化,我们肯定要为Javascript
提供语言包。我们看看,一般来说,有不少朋友保存Javascript语言包的方式为,将Javascript语言包保存为一个Javascript文件,
用数组来提供语言包切换功能。

不过,你也许发现了,使用这种方式来保存语言包,那么系统就会有两种语言包,PHP 和Javascript,并且Javascript的功能语言包很难
做到和PHP 的功能一致,这样子十分不好维护。我们是这样想的,如果我们能够使用AJAX 让Javascript的语言包通过Ajax异步与PHP 交互,
将语言包数据传递给 PHP 。通过这种方式,可以做到和PHP 语言包一致。

既然原理是这样子,那我们在模板中测试一下,我们的实现后的效果。

Javascript保存的语言包功能与上一节的语言包标签功能一样,只不过一个 :

  1. // G::L( 语句,语言包,语言,额外参数... )   
  2. G::L( '我是一条语句' ) // 应用项目:默认语言/默认语言包( D:\phpcondition\htdocs\doyouhaobaby\TestApp\Lang\Zh-cn\App.lang.php )   
  3. G::L( ‘我也是一条语句’,'dyhb' ) // 框架内部:默认语言/默认语言包( D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\Resource\Lang\Zh-cn\Dyhb.lang.php )   
  4. G::L( '我还是一条一句,我的额外参数为:%s,%s','other-lang','otherPackage','额外参数','额外参数2' )   
  5. // 上面这个情形复杂一些   
  6. // 系统会从如下的文件查找,找到即将数据写入该文件。   
  7. // 如果系统找不到文件,就会抛出异常   
  8. // 为什么会从如下的文件中查找文件呢,因为系统默认设置了两个语言目录   
  9. //  项目语言目录 D:\phpcondition\htdocs\doyouhaobaby\TestApp\Lang | 系统语言目录 D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\Resource\Lang   
  10. // 如果你要添加一个新的查找目录,可以使用LangPackage::addPackageDir( $sPath ) 来做,这是一个静态方法,注意路径为物理路径,且后面不能带‘/’或者‘\’   
  11. // 关于物理路径,建议使用 DYHB_PATH为系统基地址来构造路径,使用APP_PATH 来作为项目基地址构建路径,DYHB_PATH 和APP_PATH 都是物理路径。   
  12. //  D:\phpcondition\htdocs\doyouhaobaby\TestApp\Lang\other-lang\OtherPackage.lang.php    
  13. //  D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\Resource\Lang\other-lang\OtherPackage.lang.php  

那么这个时候,Javascript对应如下:
  1. // D::L( 语句,语言包,语言,额外参数... )   
  2. D.L( '我是一条语句' ) // 应用项目:默认语言/默认语言包( D:\phpcondition\htdocs\doyouhaobaby\TestApp\Lang\Zh-cn\AppJs.lang.php )   
  3. D.L( ‘我也是一条语句’,'js' ) // 框架内部:默认语言/默认语言包( D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\Resource\Lang\Zh-cn\Js.lang.php )   
  4. D.L( '我还是一条一句,我的额外参数为:%s,%s','other-lang','otherPackage','额外参数','额外参数2' )  

从上面可以看出,Javascript语言包和PHP 语言包就那么几个字符不同而已,保存方式的数据都会放到语言目录下面。下面我们来测试一下。


1:最简单的语言语法



首先我们看看,我们项目JS语言包中为空,如图:



如图:



我们在模板中写下如下的代码:
<lang>    
The DoYouHaoBaby Company in Chengdu - 中国成都<br>
我是PHP 的一条语句
  1. <lang>       
  2. The DoYouHaoBaby Company in Chengdu - 中国成都<br>   
  3. 我是PHP 的一条语句   
  4. </lang>   
  5.   
  6. <br>   
  7.   
  8. <import file="Js.Dyhb#package" />   
  9. {script}   
  10. var sString = D.L( 'The DoYouHaoBaby Company in Chengdu - 中国成都\n我是PHP 的一条语句' );   
  11. alert( sString );   
  12. {/script}  



如图:



程序运行后的编译PHP 代码如下:
  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-23 01:30:13  */ ?>   
  2. <?php print G::L( "The DoYouHaoBaby Company in Chengdu - 中国成都<br>  
  3. 我是PHP 的一条语句", null, null ) ; ?>   
  4.   
  5. <br>   
  6.   
  7. <script type="text/javascript" src="/doyouhaobaby/DoYouHaoBaby/LibCom/Js/Dyhb.package.js"></script>   
  8. <script type="text/javascript">   
  9. var sString = D.L( 'The DoYouHaoBaby Company in Chengdu - 中国成都\n我是PHP 的一条语句' );   
  10. alert( sString );   
  11. </script>  


如图:



程序最后的运行结果如下:

如图:



我们打开默认项目Js语言包,路径为D:\phpcondition\htdocs\doyouhaobaby\Home\Lang\Zh-cn\AppJs.lang.php:

  1. <?php   
  2. /** DoYouHaoBaby Framework Lang File, Do not to modify it! */  
  3. return array(   
  4. 'dc6223be2f641119e77017da08de6c8b' => "The DoYouHaoBaby Company in Chengdu - 中国成都我是PHP 的一条语句" ,   
  5. )   
  6.   
  7. ?>  


如图:



2:我们向系统默认js语言包写入一条数据



系统默认语言包位于D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\Resource\Lang\Zh-cn\Js.lang.php。

如图:





同样,我们在模板中写下如下的代码:
  1. <import file="Js.Dyhb#package" />   
  2. {script}   
  3. var sString = D.L( '我是一条语句,我将会被写入系统默认Javascript语言包!','js' );   
  4. alert( sString );   
  5. {/script}  


程序运行后的编译PHP 代码如下:
  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-23 01:45:16  */ ?>   
  2. <script type="text/javascript" src="/doyouhaobaby/DoYouHaoBaby/LibCom/Js/Dyhb.package.js"></script>   
  3. <script type="text/javascript">   
  4. var sString = D.L( '我是一条语句,我将会被写入系统默认Javascript语言包!','js' );   
  5. alert( sString );   
  6. </script>  


如图:



程序运行后的结果如下:

如图:



我们打开系统默认语言包,D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\Resource\Lang\Zh-cn\Js.lang.php:

  1.   
  2. <?php   
  3. /** DoYouHaoBaby Framework Lang File, Do not to modify it! */  
  4. return array(   
  5. '81f626796463b0b5804940004c697211' => "我是一条语句,我将会被写入系统默认Javascript语言包!" ,   
  6. )   
  7.   
  8. ?>  


如图:



3:使用额外参数演示


这里,我就不啰嗦了,我直接上代码,我们在模板中写下如下的代码:
  1. <import file="Js.Dyhb#package" />   
  2. {script}   
  3. var sString = D.L( '我是一条语句,我将会被写入项目默认Javascript语言包!\n我的额外参数为( %s,%s )',null,null,'额外参数','额外参数2' );   
  4. alert( sString );   
  5. {/script}  


程序运行编译后的PHP 代码如下:
  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-23 01:52:56  */ ?>   
  2. <script type="text/javascript" src="/doyouhaobaby/DoYouHaoBaby/LibCom/Js/Dyhb.package.js"></script>   
  3. <script type="text/javascript">   
  4. var sString = D.L( '我是一条语句,我将会被写入项目默认Javascript语言包!\n我的额外参数为( %s,%s )',null,null,'额外参数','额外参数2' );   
  5. alert( sString );   
  6. </script>  


如图:



程序运行结果如下:

如图:




我们打开默认项目Js语言包,路径为D:\phpcondition\htdocs\doyouhaobaby\Home\Lang\Zh-cn\AppJs.lang.php:

  1. <?php   
  2. /** DoYouHaoBaby Framework Lang File, Do not to modify it! */  
  3. return array(   
  4. 'dc6223be2f641119e77017da08de6c8b' => "The DoYouHaoBaby Company in Chengdu - 中国成都我是PHP 的一条语句" ,   
  5. '59381f31ec8fa9130e0c592807962db3' => "我是一条语句,我将会被写入项目默认Javascript语言包!我的额外参数为( %s,%s )" ,   
  6. )   
  7.   
  8. ?>  


如图:



4:你的疑惑


或许,你会想,我们为什么要这样做呢,我这样做不好。
  1. {~$sString ='我是一条语句,我将会被写入项目默认Javascript语言包!\n我的额外参数为( %s,%s )'}   
  2. {~$sExtends ='额外参数'}   
  3. {~$sExtends2 ='额外参数2'}   
  4. <import file="Js.Dyhb#package" />   
  5. {script}   
  6. var sString = D.L( '{$sString}',null,null,'{$sExtends}','{$sExtends2}' );   
  7. alert( sString );   
  8. {/script}  


或者
  1. <import file="Js.Dyhb#package" />   
  2. {script}   
  3. var sString = 'G::L( '我是一条语句,我将会被写入项目默认Javascript语言包!\n我的额外参数为( %s,%s )',null,null,'额外参数','额外参数2' )';   
  4. alert( sString );   
  5. {/script}  


你有疑惑,我们早就想好了怎么回答你。

首先,我们演示的事javascript文件潜入到页面,如果我们使用一个外部的javascript文件呢?那么,我们根本无法通过PHP 语法赋值。
其次,将javascript开发的语言和php语言分开,易于管理。

好了,本节到此结束了。