在此将会记录笔者为Typecho添加完整多语言支持的过程。
一个完整的多国语言功能包括:
- 随浏览器语言密林仙踪视频语言(此前博客已经实现)
- 用户可根据实际情况手动密林仙踪视频显示语言
- 文章内容多国语言适配(一篇文章, 多种语言可供密林仙踪视频)
注意:本文所述适用于Typecho 1.1, 其他版本应该不会有太大变化。
9922tv永久地址亚洲日韩
原理:
typecho原生自带了翻译功能, 但不支持随客户端语言自动密林仙踪视频。 因此获取客户端语言, 并替换原生翻译功能所调用的翻译文件即可。
注意:需要先开启Typecho原生的多国语功能。
关于原生的翻译功能 —>
https://www.typechodev.com/case/typecho-language.html
更改Typecho根目录下/var/Typecho/I18n.php里的77行:
private static function init() { if (false === self::$_loaded && self::$_lang && file_exists(self::$_lang)) { self::$_loaded = new Typecho_I18n_GetTextMulti(self::$_lang); } }
更改为如下:
private static function init() { if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $langConfig = substr($lang,0,5); if(preg_match("/zh/i",$lang)){ $langConfig = "zh_TW"; } elseif(preg_match("/zh-cn/i",$lang)){ $lang = "zh_CN"; } else{ $langConfig = "en_US"; } } else{ $langConfig = 'en_US'; } if(Typecho_Cookie::get('__earthlog_autoLang')){ $langConfig = Typecho_Cookie::get('__earthlog_autoLang'); } else{ Typecho_Cookie::set('__earthlog_autoLang', $langConfig); } $dir = defined('__TYPECHO_LANG_DIR__') ? __TYPECHO_LANG_DIR__ : __TYPECHO_ROOT_DIR__ . '/usr/langs'; $langConfig = ($dir . '/' . $langConfig.".mo"); if (false === self::$_loaded && $langConfig && file_exists($langConfig)) { self::$_loaded = new Typecho_I18n_GetTextMulti($langConfig); } }
注意, 这里替换成的代码和前一篇博客中的略有不同。
9922tv人人草app下载安装
原理:
- 通过COOKIE储存用户设置, 再载入时读取
- 用户密林仙踪视频语言后redirect回原网页
设置COOKIE - /admin/autoLang.php
Typecho没有这个文件, 需手动创建。
begin(); Typecho_Widget::widget('Widget_Options')->to($options); Typecho_Widget::widget('Widget_User')->to($user); Typecho_Widget::widget('Widget_Security')->to($security); Typecho_Widget::widget('Widget_Menu')->to($menu); $request = $options->request; $response = $options->response; //localhost/earthlog/admin/autoLang.php?setLang=en_US Typecho_Cookie::set('__earthlog_autoLang', $_GET['setLang']); $response->redirect($_GET['redirect']); ?>
建议添加后测试一下:
浏览器访问:
http://{你的域名/IP}/admin/autoLang.php?setLang=en_US&redirect=http://{你的域名/IP}
如果没有报错, 并且回到了首页, 即没问题。
将一下代码找到适当位置, 并添加到你的主题里的sidebar.php中:
English 简体中文 繁體中文
这是手动密林仙踪视频语言的入口。
9922tv永久地址
原理:
通过再写文章/页面时同时写三种语言, 再在不同语言之间添加表示告诉程序这是什么语言即可。
为了不出现意外, 我们尽可能的从主题上入手。
主题编辑 - function.php(/usr//function.php):
这该文件的末尾添加如下函数(无需改动其他):
function getLang($content, $lang){ $pa = '%@'.$lang.'.*?@(.*?)@/'.$lang.'@%si'; preg_match_all($pa,$content,$match); try{ //return str_replace("@$lang@
" ,"" ,$match[0][0]); //return $match[1][0]; return(str_replace("@/$lang@" , "",str_replace("@$lang@" , "",str_replace("@$lang@
" ,"" ,$match[0][0])))); } catch(Exception $e){ return(False); } } function _en($content){ print('
'); print($content); print(""); } function _et($content, $needNotice = False){ try{ if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $langConfig = substr($lang,0,5); if(preg_match("/zh/i",$lang)){ $langConfig = "zh_TW"; } elseif(preg_match("/zh-cn/i",$lang)){ $lang = "zh_CN"; } else{ $langConfig = "en_US"; } } else{ $langConfig = 'en_US'; } if(Typecho_Cookie::get('__earthlog_autoLang')){ $langConfig = Typecho_Cookie::get('__earthlog_autoLang'); } else{ Typecho_Cookie::set('__earthlog_autoLang', $langConfig); } if($langConfig == "zh_CN"){ $langConfig = "zh_CN"; $alternation = "zh_TW"; $langNotice = array( 0 => "已根据浏览器语言为您展示简体中文。", 1 => "很抱歉, 这篇文章没有提供简中内容。 我们将尝试为您显示繁中译文。", 2 => "很抱歉, 这篇文章没有提供简中内容。 我们将会为您显示英文译文。", 3 => "很抱歉, 这个页面没有启用多语言支持。" ); } elseif($langConfig == "zh_TW"){ $langConfig = "zh_TW"; $alternation = "zh_CN"; $langNotice = array( 0 => "已按照用戶端語言爲您顯示繁中譯文。", 1 => "糟糕, 本文不提供繁體中文譯文。 在此我們將試著展示简体中文譯文。", 2 => "糟糕, 本文不提供繁體中文譯文。 在此我們將會爲您展示英文譯文。", 3 => "抱歉, 此頁面尚未啓用多語言服務。" ); } else{ $langConfig = "en_US"; $alternation = "none"; $langNotice = array( 0 => "We are showing you a translated content by identified your browser.", 1 => "" , 2 => "" , 3 => "We apologize that the translated content is not provided to this page." ); } $trans = getLang($content, $langConfig); if($trans == False){ $trans = getLang($content, $alternation); if($trans == False){ $trans = getLang($content, "en_US"); if($trans == False){ if($needNotice == True){ _en($langNotice[3]); } print($content); } else{ if($needNotice == True){ _en($langNotice[2]); } print($trans); } } else{ if($needNotice == True){ _en($langNotice[1]); } print($trans); } } else{ if($needNotice == True){ _en($langNotice[0]); } print($trans); } } catch(Exception $e){ print($content); if($needNotice == True){ print("*It seems that the translated verison of this content is not supported."); } } }
保存, 关闭。
主题编辑 -> post.php(/usr//post.php)
将所有的
content(); ?>
改为:
content, True); ?>
记住, 是所有!
主题编辑 -> page.php(/usr//page.php)
将所有的
content(); ?>
改为:
content, True); ?>
主题编辑 -> index.php(/usr//index.php)
将所有的
content(); ?>
改为:
content); ?> //注意, 这里和前面不一样了, 没有后面那个True。
主题编辑 -> archive.php(/usr//archive.php)
将所有的
content(); ?>
改为:
content); ?> //注意, 这里和前面不一样了, 没有后面那个True。
9922tv永久地址
到现在, 其实这已经完成了整个多语言支持的搭建。
文章/独立页面的多语言支持需要所有文章使用一下模板编辑:
@zh_CN@ 这里输入文章内容-简体中文 @/zh_CN@ @en_US@ Here to input Article content-English @/en_US@ @zh_TW@ 這裏錄入文章内容-繁體中文 @/zh_TW@ @NOTICE@ 修改引号里的内容, 不要改动其他的。 如果不翻译就把所有东西删掉直接写, 如果其中一个语言不翻译就删掉那行就可。 @/NOTICE@
当然, 可以修改以下文件使这个模板在每次新建文章/页面使显示在编辑器中:
修改/admin/write-post.php 40行:
修改为:
修改/admin/write-page.php 36行:
修改为:
©版权: http://friv-see.net/post/2756.html