查看: 8450|回复: 6
打印 上一主题 下一主题

4.2中英双语的简单实现

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-22 09:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果您感觉模板不错,请点击右侧的“分享”按钮,分享给您的朋友或者分享到自己的空间收藏
演示:http://lvqing.807.sql.sh.cn
谢谢雅风的模板先
基本思路:
1、拷贝一份模板文件,然后将所有 css、php文件前面加上 en_ 前缀,然后上传到当前模板目录下,呵呵,批量修改文件名的工具应该不少吧
2、在 config/dt-config.php 里面加上
define('Lang_En','en');
与后台有关的修改:
3、修改 admini/models/menu.php 中的函数
? ?? ???function menu_power_list_SELECT($name,$select=null)
? ?? ???{
? ?? ?? ?? ?? ? $part_common_path=ABSPATH.SKINROOT.'/'.STYLENAME.'/common/';
? ?? ?? ?? ?? ? $temp_arr=rec_listFiles($part_common_path);
? ?? ?? ?? ?? ? echo '';
? ?? ???}
呵呵,大家不要奇怪改了那么多,除了跟这个双语相关的改动,还有就是 硬编码 "/skins/" 的替换,完善下这个函数
这样修改后,后台频道和栏目的样式选择就会出现双倍的选项,千万记住,如果选了带 en_ 前缀的,就是英文版!

好了,现在需要让前台干活
4、修改根下的 index.php
在 require_once(ABSPATH.'/inc/function.php'); 后面加
if(empty($_SESSION[TB_PREFIX.'dtLanguage']))
{
? ?? ???$_SESSION[TB_PREFIX.'dtLanguage']="";
}
这些语句

$loadSkinIndex=$part_path.'index.php';
$loadSkinCommon=$part_path.'common.php';
替换成
if($_SESSION[TB_PREFIX.'dtLanguage'] != ""){
? ?? ???$loadSkinIndex=$part_path.$_SESSION[TB_PREFIX.'dtLanguage'].'_index.php';
? ?? ???$loadSkinCommon=$part_path.$_SESSION[TB_PREFIX.'dtLanguage'].'_common.php';
}else{
? ?? ???$loadSkinIndex=$part_path.'index.php';
? ?? ???$loadSkinCommon=$part_path.'common.php';
}

修改 function sys_layout_part($style='')
function sys_layout_part($style='')
{
? ?? ???global $request,$params,$tag,$path,$data;
? ?? ???
? ?? ???//如果本次升级影响了parts内sql的执行, 请手动注释destorydb函数体代码,切记不要删除
? ? //destorydb();
? ?? ???if(!checkchannel($params['id'])){
? ?? ?? ?? ?? ? echo '可能分类栏目或频道语系不对,请检查!';
? ?? ???}else{
? ?? ???
? ?? ?? ?? ?? ? if(!empty($style)) $style = '_'.$style;
? ?? ?? ?? ?? ? //$part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/'.$params['model'].'_'.$params['action'].$style.'.php';
? ?? ?? ?? ?? ? if($_SESSION[TB_PREFIX.'dtLanguage'] != ""){
? ?? ?? ?? ?? ?? ?? ?? ?$part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/';
? ?? ?? ?? ?? ?? ?? ?? ?$part_path=$part_path.$_SESSION[TB_PREFIX.'dtLanguage']."_".$params['model'].'_'.$params['action'].$style.'.php';
? ?? ?? ?? ?? ? }else{
? ?? ?? ?? ?? ?? ?? ?? ?$part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/'.$params['model'].'_'.$params['action'].$style.'.php';
? ?? ?? ?? ?? ? }
? ?? ?? ?? ?? ? $content_part_path=ABSPATH.'/content/'.$params['model'].'/parts_'.$params['action'].'.php';
? ?? ?? ?? ?? ? if(is_file($part_path)){
? ?? ?? ?? ?? ?? ?? ?? ?require_once($part_path);
? ?? ?? ?? ?? ? }elseif(is_file($content_part_path)){
? ?? ?? ?? ?? ?? ?? ?? ?require_once($content_part_path);
? ?? ?? ?? ?? ? }else{
? ?? ?? ?? ?? ?? ?? ?? ?echo $part_path."
";
? ?? ?? ?? ?? ?? ?? ?? ?echo $content_part_path."
";
? ?? ?? ?? ?? ?? ?? ?? ?echo '您当前选择的信息所在的分类栏目或频道可能已经被删除或不存在,请检查一下,该信息所在的栏目情况以及栏目是否存在!';
? ?? ?? ?? ?? ? }
? ?? ?? ?? ?? ?
? ?? ?? ?? ?? ? // 如果本次升级影响了parts内sql的执行, 请手动注释如下代码recoverdb函数体代码,切记不要删除
? ?? ?? ?? ?? ? //recoverdb();
? ?? ?? ?? ?? ?
? ?? ?? ?? ?? ? isComments();
? ?? ???}
}



沙发
?楼主| 发表于 2012-9-22 09:46:09 | 只看该作者
最后增加函数
function checkchannel($id)
{
? ?? ???global $db;
? ?? ???if($id==0) return true;
? ?? ???if($_SESSION[TB_PREFIX.'dtLanguage']){
? ?? ?? ?? ?? ? $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
? ?? ?? ?? ?? ? $sql??= "SELECT * FROM ".TB_PREFIX;
? ?? ?? ?? ?? ? $sql .= "menu WHERE id=$id and ";
? ?? ?? ?? ?? ? $sql .= "LCASE(substring(related_common,1,CHARACTER_LENGTH('".$strl."')))=LCASE('".$strl;
? ?? ?? ?? ?? ? $sql .= "') ";
? ?? ???}else{
? ?? ?? ?? ?? ? $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
? ?? ?? ?? ?? ? $sql??= "SELECT * FROM ".TB_PREFIX;
? ?? ?? ?? ?? ? $sql .= "menu WHERE id=$id and ";
? ?? ?? ?? ?? ? $sql .= "INSTR(related_common,'_') = 0 ";
? ?? ???}? ?? ???
? ?? ???if($db->get_row($sql)){
? ?? ?? ?? ?? ? return true;
? ?? ???}else{
? ?? ?? ?? ?? ? return false;
? ?? ???}
}
这里的修改主要是判断语系,加载不同的模板文件和提示语系错误,路由调整处理

5、修改 content/index/index.php
增加函数
function changeLanguage(){
? ?? ???global $request;
? ?? ???$_SESSION[TB_PREFIX.'dtLanguage']=$request['SITELANGUAGE'];
? ?? ???if( $_SESSION[TB_PREFIX.'dtLanguage'] == 'cn' ){
? ?? ?? ?? ?? ? $_SESSION[TB_PREFIX.'dtLanguage'] = '';
? ?? ???}
? ?? ???redirect('./');
}
实现语系切换

6、修改??content/index/common_call_label.php
//$menuRoot=$db->get_results("SELECT * FROM ".TB_PREFIX."menu ORDER BY ordering ASC",ARRAY_A);
if($_SESSION[TB_PREFIX.'dtLanguage']){
? ?? ???$strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
? ?? ???$sql??= "SELECT * FROM ".TB_PREFIX;
? ?? ???$sql .= "menu WHERE LCASE(substring(related_common,1,CHARACTER_LENGTH('".$strl."')))=LCASE('".$strl;
? ?? ???$sql .= "')? ?ORDER BY ordering ASC";
}else{
? ?? ???$sql??= "SELECT * FROM ".TB_PREFIX;
? ?? ???$sql .= "menu WHERE INSTR(related_common,'_') = 0??ORDER BY ordering ASC";
}
$menuRoot=$db->get_results($sql,ARRAY_A);
实现全局 $menuRoot 的导航过滤

7、修改??content/common/common.php
function nav_main($str='
  • ||
  • ',$select_str='
  • ||
  • ',$_style='||')
    {
    ? ?? ???global $db,$params,$menu_arr;
    ? ?? ???//$menu = $db->get_results("SELECT *,'0' hassub??FROM ".TB_PREFIX."menu WHERE deep = 0 and isHidden=0 order by ordering");
    ? ?? ???if($_SESSION[TB_PREFIX.'dtLanguage']){
    ? ?? ?? ?? ?? ? $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
    ? ?? ?? ?? ?? ? $sql??= "SELECT *,'0' hassub??FROM ".TB_PREFIX;
    ? ?? ?? ?? ?? ? $sql .= "menu WHERE deep = 0 and isHidden=0??and ";
    ? ?? ?? ?? ?? ? $sql .= "LCASE(substring(related_common,1,CHARACTER_LENGTH('".$strl."')))=LCASE('".$strl;
    ? ?? ?? ?? ?? ? $sql .= "')??order by ordering";
    ? ?? ???}else{
    ? ?? ?? ?? ?? ? $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
    ? ?? ?? ?? ?? ? $sql??= "SELECT *,'0' hassub??FROM ".TB_PREFIX;
    ? ?? ?? ?? ?? ? $sql .= "menu WHERE deep = 0 and isHidden=0??and ";
    ? ?? ?? ?? ?? ? $sql .= "INSTR(related_common,'_') = 0 order by ordering";
    ? ?? ???}
    ? ?? ???$menu = $db->get_results($sql);
    ? ?? ???if(!empty($str))
    ? ?? ???{
    ? ?? ?? ?? ?? ? $strarr= explode('||',$str);
    ? ?? ?? ?? ?? ? if(empty($select_str))$select_str=$str;
    ? ?? ?? ?? ?? ? $select_strarr = explode('||',$select_str);
    ? ?? ?? ?? ?? ? if(!empty($_style))$_stylearr=explode('||',$_style);
    ? ?? ???}
    ? ?? ???if($menu)
    ? ?? ???{
    ? ?? ?? ?? ?? ? foreach ($menu as $o)
    ? ?? ?? ?? ?? ? {
    ? ?? ?? ?? ?? ?? ?? ?? ?menu_links($strarr,$select_strarr,$_stylearr,$params,$menu_arr,$o);? ?? ???
    ? ?? ?? ?? ?? ? }
    ? ?? ???}
    ? ?? ???else
    ? ?? ???echo 'No channel';
    }
    实现导航标签的过滤
    板凳
    ?楼主| 发表于 2012-9-22 09:47:07 | 只看该作者
    8、修改 content/comment/index.php 中的模板文件调用
    function view_comment()
    {
    ? ?? ???global $db;
    ? ?? ???global $params;
    ? ?? ???global $tag;? ?? ???// 标签数组
    ? ?? ???global $request;
    ? ?? ???global $moduleTitle;
    ? ?? ???$sql = "SELECT isComment FROM ".TB_PREFIX."menu WHERE id=".$params['id'];
    ? ?? ???$isComment = $db->get_var($sql);
    ? ?? ???if(($isComment == '1' && $params['action'] == 'view_comment') || ($isComment == '1' && $params['model'] == 'article'))
    ? ?? ???{
    ? ?? ?? ?? ?? ? $moduleTitle =??getModuleTitle();
    ? ?? ?? ?? ?? ?
    ? ?? ?? ?? ?? ? $sql="SELECT a.*,b.nickname FROM ".TB_PREFIX."comment a left join??".TB_PREFIX."user b on a.memberId=b.id WHERE a.channelId=".$params['id']." and a.recordId=".$params['args'];
    ? ?? ?? ?? ?? ?
    ? ?? ?? ?? ?? ? $username=isset($_SESSION[TB_PREFIX.'user']) ? $_SESSION[TB_PREFIX.'user'] : '';
    ? ?? ?? ?? ?? ? $userlevel=isset($_SESSION[TB_PREFIX.'admin_roleId']) ? $_SESSION[TB_PREFIX.'admin_roleId'] : '';
    ? ?? ?? ?? ?? ?
    ? ?? ?? ?? ?? ? if(COMMENTAUDITING)
    ? ?? ?? ?? ?? ? {
    ? ?? ?? ?? ?? ?? ?? ?? ?if(!empty($username) || $userlevel>=8 ){ }else{? ?? ???$sql.=" and auditing=1 ";??}
    ? ?? ?? ?? ?? ? }
    ? ?? ?? ?? ?? ? $sb = new sqlbuilder('comment_mdt',$sql,'id desc',$db,6,true,'./','#commentPosition');
    ? ?? ?? ?? ?? ? if(!empty($sb->results)){
    ? ?? ?? ?? ?? ?? ?? ?? ?$tag['data.results']=$sb->results;
    ? ?? ?? ?? ?? ?? ?? ?? ?if($sb->totalPageNo()>1)
    ? ?? ?? ?? ?? ?? ?? ?? ?{
    ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???$tag['pager.cn']=$sb->get_pager_show();
    ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???$tag['pager.en']=$sb->get_en_pager_show();
    ? ?? ?? ?? ?? ?? ?? ?? ?}
    ? ?? ?? ?? ?? ?? ?? ?? ?$tag['data.other']['username']=$username;
    ? ?? ?? ?? ?? ?? ?? ?? ?$tag['data.other']['userlevel']=$userlevel;
    ? ?? ?? ?? ?? ? }
    ? ?? ?? ?? ?? ? $sb=null;
    ? ?? ?? ?? ?? ? //载入评论模块模版
    ? ?? ?? ?? ?? ?? ?? ?? ?
    ? ?? ?? ?? ?? ? //$part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/comment_'.$params['action'].'.php';
    ? ?? ?? ?? ?? ? if($_SESSION[TB_PREFIX.'dtLanguage'] != ""){
    ? ?? ?? ?? ?? ?? ?? ?? ?$part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/';
    ? ?? ?? ?? ?? ?? ?? ?? ?$part_path=$part_path.$_SESSION[TB_PREFIX.'dtLanguage'].'_comment_'.$params['action'].'.php';
    ? ?? ?? ?? ?? ? }else{
    ? ?? ?? ?? ?? ?? ?? ?? ?$part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/comment_'.$params['action'].'.php';
    ? ?? ?? ?? ?? ? }
    ? ?? ?? ?? ?? ? $content_part_path=ABSPATH.'/content/comment/parts_'.$params['action'].'.php';
    ? ?? ?? ?? ?? ?
    ? ?? ?? ?? ?? ? if(is_file($part_path))
    ? ?? ?? ?? ?? ? require_once($part_path);
    ? ?? ?? ?? ?? ? else
    ? ?? ?? ?? ?? ? require_once($content_part_path);
    ? ?? ???}else{
    ? ?? ?? ?? ?? ? echo 'Comment Forbidden ';
    ? ?? ???}
    ? ?? ???exit();
    }
    经过以上修改后,前台语系就能正常控制,切换时的链接写法
    首页
    Home
    此修改方法主要考虑尽可能不动系统原始的数据库结构,然后尽可能修改少

    演示版本考虑了调用标签时的语系检查,修改量多些,这个不是必须,如果写模板时能细心些,
    保证频道、栏目的调用正确,可以不改。
    先要在??content/index/common_call_label.php 中增加语系判断函数
    function checktag($id){
    ? ?? ???global $db;
    ? ?? ???if($id==0) return false;
    ? ?? ???//$sql = "SELECT * FROM ".TB_PREFIX."menu WHERE id=$id and dtLanguage = '".$_SESSION[TB_PREFIX.'dtLanguage']."'";
    ? ?? ???if($_SESSION[TB_PREFIX.'dtLanguage']){
    ? ?? ?? ?? ?? ? $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
    ? ?? ?? ?? ?? ? $sql??= "SELECT * FROM ".TB_PREFIX;
    ? ?? ?? ?? ?? ? $sql .= "menu WHERE id=$id and ";
    ? ?? ?? ?? ?? ? $sql .= "LCASE(substring(related_common,1,CHARACTER_LENGTH('".$strl."')))=LCASE('".$strl;
    ? ?? ?? ?? ?? ? $sql .= "')??order by ordering";
    ? ?? ???}else{
    ? ?? ?? ?? ?? ? $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
    ? ?? ?? ?? ?? ? $sql??= "SELECT * FROM ".TB_PREFIX;
    ? ?? ?? ?? ?? ? $sql .= "menu WHERE id=$id and ";
    ? ?? ?? ?? ?? ? $sql .= "INSTR(related_common,'_') = 0 order by ordering";
    ? ?? ???}
    ? ?? ???if($db->get_row($sql)){
    ? ?? ?? ?? ?? ? return true;
    ? ?? ???}else{
    ? ?? ?? ?? ?? ? return false;
    ? ?? ???}
    }
    然后修改全部的标签函数,就是 content/index/ 目录下以模组名称命名的php文件。
    article.php
    calllist.php
    download.php
    guestbook.php
    jobs.php
    linkers.php
    list.php
    mapshow.php
    picture.php
    poll.php
    product.php
    rss.php
    video.php
    webmap.php
    以 article.php 中的 function dt_article($channelId,$strcount=0) 为例
    ? ?? ???if( checktag($channelId) ){
    ? ?? ?? ?? ?? ? $opts=array(
    ? ?? ?? ?? ?? ?? ?? ?? ?'hastag' => false,
    ? ?? ?? ?? ?? ?? ?? ?? ?'fun'=>'dt_article'
    ? ?? ?? ?? ?? ? );
    ? ?? ?? ?? ?? ? $o=shl_article(??$channelId, $opts );
    ? ?? ?? ?? ?? ? echo cnSubstr($o->content,0,$strcount);
    ? ?? ???}else{
    ? ?? ?? ?? ?? ? echo "dt_article(".$channelId.",".$strcount.")  语系错误";
    ? ?? ???}
    具体效果,演示网站可以看到。
    有任何批评和建议,欢迎提出或者交流,qq 673055613
    地板
    发表于 2012-9-24 18:35:27 | 只看该作者
    似乎有点复杂哦。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Powered by Discuz! X3.2? 2001-2013 Comsenz Inc. Designed by www.daokecms.com

    GMT+8, 2019-10-13 20:19 , Processed in 0.276129 second(s), 17 queries .