插件语言包
那么插件里是如何区分不同编码的呢?
如果在php代码或模板里用中文字符,那么你用什么编码设计的,只能显示什么编码的。其它编码的网站安装时会出现乱码。DZ是这样解决编码的。
如下图所示:
新版本兼容的语言编码
如需自动转码,请在文件包中包含下面的文件:
discuz_plugin_it618_onlineserver.xml (简体中文编码)
文件包中已手动转码的请忽略本设置
xml配置文件是可以被DZ自动转码的,所以当你在应用的后台设置里填中文字符,是可以正常显示的。
但是你不能在代码输出中文字符,但是DZ提供了语言包。
可以手工添加语言包到xml配置文件里。
<item id=" language ">
<item id=" scriptlang ">
<item id="it618_copyright"><![CDATA[插件设计:<a href=\"http://www.cnit618.com\" target=\"_blank\" title=\"为站长解决问题的网站\">IT618资讯网</a>]]></item>
</item>
<item id=" templatelang ">
<item id="it618_copyright"><![CDATA[插件设计:<a href="http://www.cnit618.com" target="_blank" title="为站长解决问题的网站">IT618资讯网</a>]]></item>
</item>
</item>
language 是语言包的根结点
scriptlang 是脚本语言包部分 调用方法:lang('plugin/it618_onlineserver', 'it618_copyright')
templatelang 是模板语言包部分 调用方法:{lang it618_onlineserver:it618_copyright}
- /**
- * 加载语言
- * @param $file - 语言文件,可包含路径如 forum/xxx home/xxx
- * @param $langvar - 语言文字索引
- * @param $vars - 变量替换数组
- * @return 语言文字
- */
- function lang($file, $langvar = null, $vars = array())
此函数可加载 Discuz! X 中的所有语言包。
$file 如果写成不包含路径的文件,则代表 source/language 目录下的文件。如果包含目录,如 'forum/misc',则代表 source/language/forum/lang_misc.php 文件。如果写成 plugin/插件id,则会读取插件的语言包文件,即 data/plugindata/lang_plugin.php,此文件是根据安装并启用的插件缓存后生成的。
...[/more]
任何语言内容均可增加可替换的变量
如语言包内容为“你好 {username}”
那么 $vars = array('username' => $username) 时,{username} 会显示成 $username 变量的值。
当插件语言包文件(data/plugindata/lang_plugin.php)内容为:
- <?php
- $lang = array (
- 'test' =>
- array (
- 'name' => '葫芦',
- ),
- );
- ?>
以下代码可调用“葫芦”二字
- echo lang('plugin/test', 'name');
- 创建语言包
给插件创建语言包首先需要创建一个 data/plugindata/identifier.lang.php 文件,文件内容中包含 3 个数组,如下:
<?php $scriptlang['identifier'] = array( 'english' => 'chinese', ... ); $templatelang['identifier'] = array( 'english' => 'chinese', ... ); $installlang['identifier'] = array( 'english' => 'chinese', ... ); ?>
$scriptlang 为程序脚本文件的语言包,$templatelang 为模版文件的语言包,$installlang 为安装、升级、卸载脚本用的语言包。 如果插件不涉及某些类型的语言文字,变量可忽略。
然后在插件基本设置中开启语言包选项后即可。
- 调用语言包
模版中调用模板文件语言包,通过 {lang identifier:english} 方式调用。
程序脚本中调用脚本文件语言包,通过 lang('plugin/identifier', 'english') 方式调用。
安装脚本中调用安装脚本文件语言包,通过 $installlang 变量直接获取。如 $installlang['english']。
- 语言包导出
创建好的语言包在插件导出后会自动导出到 XML 文件中,供插件作者转码后发放多编码版本的插件。如上例中导出的 XML 中会包含以下内容:
<item id="language"> <item id="scriptlang"> <item id="english"><![CDATA[chinese]]></item> </item> <item id="templatelang"> <item id="english"><![CDATA[chinese]]></item> </item> <item id="installlang"> <item id="english"><![CDATA[chinese]]></item> </item> </item>
data/plugindata/identifier.lang.php 文件不必在插件发布的时候导出,此文件仅供插件设计者模式时使用。
插件模板
插件的模板统一放置到 source/plugin/identifier/template 目录下,程序脚本通过以下语句调用插件模板文件,如下例,调用 source/plugin/identifier/template/test.htm
include template('identifier:test');
模版中调用插件模版通过以下方法:
{template identifier:test}
模板的编写详见模板创建、解析原理详解