公告:分类目录网(FLML.CC)是一个专业的网站分类目录平台!主要提供收录网站服务,要求网站有ICP备案(违规站勿扰),快审服务请联系:qq1962348884

新站提交
  • 网站: 14523
  • 失效: 3816
  • 文章: 29029
  • 待审: 225

一丶模板目录创建lang.php文件,代码如下:

<?php
$langText = array(
//网站头尾部文案
"langc" => array("zh","tw","en"),//这里对应的是不同语言的缩写
"fullLang1" => array("首页","首頁","Home"),
"fullLang2" => array("技术","技術","Technology"),
"fullLang3" => array("生态","生態","Ecology"),
"fullLang4" => array("新闻","新聞","news"),
"fullLang5" => array("关于","關於","about"),
"fullLang6" => array("输入文章关键字","輸入文章關鍵字","Enter article keywords"),
//网站头尾部文案结束
/*****************************************/
//网站全局文案(单页简介,全站简介)
"mainLang1" => array("","",""),//网站标题
"mainLang2" => array("","",""),//网站关键词,英文逗号隔开
"mainLang3" => array("","",""),//网站简介
//网站全局文案结束
/*****************************************/
//首页文案
//后面省略

);
?>

添加语言的方法很简单,在数组后面继续添加即可。

二丶修改模板的其它文件,将$this->need改为include。将引用头部的代码如下↓

$this->need('header.php');

修改为

include 'header.php';

因为实际的测试发现,typecho自带的$this->need无法传递cookie,导致语言切换失效。

三.编辑全局头部文件header.php,将第一行修改为如下代码:

<?php if (!defined('__TYPECHO_ROOT_DIR__')) exit;
include 'lang.php';
function cookie($var, $value = '', $time = 0, $path = '', $domain = '', $s = false)
{
$_COOKIE[$var] = $value;
if (is_array($value)) {
foreach ($value as $k => $v) {
setcookie($var .'['.$k.']', $v, $time, $path, $domain, $s);
}
} else {
setcookie($var,$value, $time, $path, $domain, $s);
}
}

$cookietime= time()+3600;
$langid = $this->options->langid;
$lang = $langText["langc"][$langid];

if(isset($_COOKIE["lang"])){
if(isset($_GET['lang'])){
if(preg_match("/^[a-zA-Z\s]+$/",$_GET['lang'])){
$lang = $_GET['lang'];
}
cookie("lang", $lang, $cookietime,'/');
$lang = $_COOKIE["lang"];
}else{
$lang = $_COOKIE["lang"];
}
}else{
if(isset($_GET['lang'])){
if(preg_match("/^[a-zA-Z\s]+$/",$_GET['lang'])){
$lang = $_GET['lang'];
}
cookie("lang", $lang, $cookietime,'/');
$lang = $_COOKIE["lang"];
}
}
$langarr = $langText["langc"];
$num = count($langarr);
for($i=0;$i<$num;$i++){
if($langarr[$i]==$lang){
$langid = $i;
}

}
?>

上方的代码引入了lang.php,并且定义了cookie存储方法,以及获取当前语言,切换语言等,其中$langid就是负责在语言数组中定位。

四丶调用多语言字段,这个很简单,因为在lang.php中定义了字段名称和值,所以模板中调用标签如下↓,以fullLang1为例:

<?php echo $langText["fullLang1"][$langid] ?>

至于网站的标题,关键词,简介,则是在function.php中增加如下代码:

先加入如下↓方法

//根据当前语言获取独立页面标题
function pageTitle($title,$langid){
$titleArr = explode( ",",$title);
echo $titleArr[$langid];
}

然后在themeFields方法中,加入如下↓

$SEOtitle = new Typecho_Widget_Helper_Form_Element_Text('SEOtitle', NULL, NULL, _t('SEO标题'), _t('在这里填入当前页面或文章的SEO标题,用于搜索引擎识别(如果不填则自动调用文章或独立页面标题。<font color="red">对于独立页面,请填入英文逗号分割的三种语言,如:中文,繁体,英语</font>)。'));
$layout->addItem($SEOtitle);
$SEOkeywords = new Typecho_Widget_Helper_Form_Element_Text('SEOkeywords', NULL, NULL, _t('SEO关键字'), _t('在这里填入当前文章的SEO关键字,请用英文逗号隔开。(如果是独立页面,则不填)'));
$layout->addItem($SEOkeywords);
$SEOdescription = new Typecho_Widget_Helper_Form_Element_Textarea('SEOdescription', NULL, NULL, _t('SEO简介'), _t('在这里填入当前页面或文章的SEO简介(如果是独立页面,则不填)。'));
$layout->addItem($SEOdescription);

这里的原理就是,标题写成根据逗号分割的形式,然后再根据当前语言id调用出来,而发布文章的时候,肯定一次只能发布一种语言,但是创建单页的时候,是可以设置单页模板,调用语言标签的,这就是我的思路逻辑,当然实际情况可以自行修改。

最后,在header.php中将原本的标题,关键词,简介的区域,改为如下↓

<?php if($this->is('index')){ ?>
<title><?php $this->archiveTitle(array(
'category' => _t('分类 %s 下的文章'),
'search' => _t('包含关键字 %s 的文章'),
'tag' => _t('标签 %s 下的文章'),
'author' => _t('%s 发布的文章')
), '', ' - '); ?><?php echo $langText["mainLang1"][$langid] ?></title>

<meta name="keywords" content="<?php echo $langText["mainLang2"][$langid] ?>" />
<meta name="description" content="<?php echo $langText["mainLang3"][$langid] ?>" />
<?php }else if($this->is('post')){ ?>
<?php if($this->fields->SEOtitle == ""){ ?>
<title><?php $this->title() ?> - <?php echo $langText["mainLang1"][$langid] ?></title>
<?php }else{ ?>
<title><?php $this->fields->SEOtitle();?> - <?php echo $langText["mainLang1"][$langid] ?></title>
<?php } ?>
<?php if($this->fields->SEOkeywords == ""){ ?>
<meta name="keywords" content="<?php $this->title() ?>,<?php echo $langText["mainLang1"][$langid] ?>" />
<?php }else{ ?>
<meta name="keywords" content="<?php $this->fields->SEOkeywords();?>,<?php echo $langText["mainLang1"][$langid] ?>" />
<?php } ?>
<?php if($this->fields->SEOdescription == ""){ ?>
<meta name="description" content="<?php $this->excerpt(150, '...'); ?>" />
<?php }else{ ?>
<meta name="description" content="<?php $this->fields->SEOdescription();?>" />
<?php } ?>
<?php }else if($this->is('page')){ ?>

<title><?php pageTitle($this->fields->SEOtitle,$langid) ?> - <?php echo $langText["mainLang1"][$langid] ?></title>
<?php }else{ ?>
<title><?php echo $langText["newsLang3"][$langid] ?> - <?php echo $langText["mainLang1"][$langid] ?></title>
<meta name="keywords" content="<?php echo $langText["mainLang2"][$langid] ?>" />
<meta name="description" content="<?php echo $langText["mainLang3"][$langid] ?>" />
<?php } ?>

这样就可以实现单页,首页,和文章的多语言切换了。

五丶如果要在网页的js中获取当前语言,可以在hader.php中写如下↓代码

<script>
var langid = "<?php echo $langid ?>";
var lang = "<?php echo $lang ?>";
</script>

这样后面引入的js就可以直接读取这两个字段获取当前语言和语言id,用来做其它处理了。

六丶实现用户手动语言切换

首页在页面上添加下面代码,或者根据现有模板自己做下拉框。

<div class="lang-list">
<div class="lang-box">
<a href="javascript:;" onclick="changeLang('zh')">简体中文</a>
</div>
<div class="lang-box">
<a href="javascript:;" onclick="changeLang('tw')">繁體中文</a>
</div>
<div class="lang-box">
<a href="javascript:;" onclick="changeLang('en')">English</a>
</div>
</div>

定义一个js方法changeLang,这里我引入了jquery,反正核心只是一个get请求,怎么来都行。

function changeLang(lang){
$.get("?lang="+lang, function(result){
location.reload();
});
}

教程结束,总之最后的效果很不错,后期的扩展也非常方便,基本上不需要写啥if判断什么的。



最近收录

列表网www.liebiao.com

入驻时间:2024-09-25

列表网为您提供生活,商务,教育,宠物,车辆,房

豆包官网www.doubao.com

入驻时间:2024-09-16

豆包是一个AI聊天智能对话问答助手,写作

在线工具网tool.bokequ.com

入驻时间:2024-08-24

博客趣工具网(tool.bokequ.com)提供了7

星空影视www.xkvvv.com

入驻时间:2024-08-21

星空影视,最新最全影视免费在线观看,影

西安好房网www.029hfw.com

入驻时间:2024-07-02

西安好房网为用户提供最新房地产信息,

云盖课堂www.yungai.net

入驻时间:2024-06-27

云盖课堂提供全方位的技能培训教程,以及

315分类目录www.315dir.com

入驻时间:2024-06-26

315分类目录是一款免费收录分享优秀网

5song无损音乐网www.5song.xyz

入驻时间:2024-06-02

5song无损音乐网是一个免费提供全网无