Joomla!標題別名轉換成為中文的問題?
- jade
- Topic Author
- 訪客
2008-08-13 10:30 #10866
來自 jade
jade created the topic: Joomla!標題別名轉換成為中文的問題?
這裡有個文章說如何把Joomla!空的標題別名轉換為中文拼音,但是試過了好像用不了!
http://www.cnmos.cn/code/component/4961-joomlazhongjiangkongdebiaotibiemingzhuanhuanweihanyupinyin
其實要說的就是Joomla!的標題和別名轉換的問題,
1.標題是純中文,別名自動轉換為日期形式!
2.標題是中英文混合的,別名自動轉換為其中某些英文!
那有沒有可能標題是純中文,別名也是純中文的了?其實Joomla!的別名其實就等於一個網頁的文件/文檔名,但是Joomla!1.5x不會自動識別中文名稱!雖然現在可以把別名轉換為中文拼音,但是希望可以別名也可以自動轉換成為中文,不知道有沒有達人可以修改出來?
這個就是一個把別名也做成中文的例子,[url]好像phpBB也不支持url之間的中文[/url]!
http://ismybestchoice.com/joomla/index.php/component/content/article/128-tongtong/396-可爱迷人小龙女彤彤在Mysql jos_content裡面,有 title 和 alias,其中alias就代表別名了!當然Mysql是支持中文的,只是Joomla!不直接轉換過來!
http://www.cnmos.cn/code/component/4961-joomlazhongjiangkongdebiaotibiemingzhuanhuanweihanyupinyin
其實要說的就是Joomla!的標題和別名轉換的問題,
1.標題是純中文,別名自動轉換為日期形式!
2.標題是中英文混合的,別名自動轉換為其中某些英文!
那有沒有可能標題是純中文,別名也是純中文的了?其實Joomla!的別名其實就等於一個網頁的文件/文檔名,但是Joomla!1.5x不會自動識別中文名稱!雖然現在可以把別名轉換為中文拼音,但是希望可以別名也可以自動轉換成為中文,不知道有沒有達人可以修改出來?
這個就是一個把別名也做成中文的例子,[url]好像phpBB也不支持url之間的中文[/url]!
http://ismybestchoice.com/joomla/index.php/component/content/article/128-tongtong/396-可爱迷人小龙女彤彤
http://ismybestchoice.com/joomla/index.php/component/content/article/128-tongtong/396-可爱迷人小龙女彤彤
Please 登入 to join the conversation.
- kochin
- Offline
- 白金會員
Less
More
- jade
- Topic Author
- 訪客
- kochin
- Offline
- 白金會員
- jade
- Topic Author
- 訪客
- kochin
- Offline
- 白金會員
2008-08-22 04:07 #10989
來自 kochin
kochin replied the topic: Joomla!標題別名轉換成為中文的問題?
抱歉,太懶了所以沒用中文詳細解釋。
Joomla! 的連結其實是用 Alias 欄位。然而這 Alias 欄位並不一定是你輸入的文字或由 Title 欄位複製過來,它是經過轉換的結果。不幸的是,這轉換過程把 Alias 欄位變成只有英文、數字與破折號。
當你儲存一篇文章、單元、分類或選單時,Joomla! 把 Alias 欄位(可能是由 Title 欄位複製過來)送交給 JFilterOutput::stringURLSafe() 處理。而 stringURLSafe() 函式則把這字串餵給 JLanguage::transliterate(),在那裏用上函式 utf8_decode(),然後 htmlentities()。接下來字串中所有奇怪的字元(對英文語系的人來說)都以正常的字元取代。中文或日文字無法經過這些折磨還存活。但是字串還要經過更多的處理。
回到 stringURLSafe(),所有的空白字元及非文數字符號被以破折號取代或被移除。任何中文或日文字都從字串中消失了。並且故事還未結束。
因為在經過了這些虐待後字串極可能只剩下破折號或完全空白,函式 check() (在幾個地方出現)在叫用 stringURLSafe() 後,最後把只剩下破折號或完全空白的字串用時間戳記來取代。
如果要使用中文的連結(也就是在 Alias 欄位裏用中文),需要修改兩個檔案。首先修改 libraries/joomla/filter/filteroutput.php 中的 stringURLSafe() 函式,把其中的改成接下來修改 libraries/joomla/language/language.php,把改成個人在 Joomla! 1.5.x 上只做過簡單測試,目前還都正常。
Joomla! 的連結其實是用 Alias 欄位。然而這 Alias 欄位並不一定是你輸入的文字或由 Title 欄位複製過來,它是經過轉換的結果。不幸的是,這轉換過程把 Alias 欄位變成只有英文、數字與破折號。
當你儲存一篇文章、單元、分類或選單時,Joomla! 把 Alias 欄位(可能是由 Title 欄位複製過來)送交給 JFilterOutput::stringURLSafe() 處理。而 stringURLSafe() 函式則把這字串餵給 JLanguage::transliterate(),在那裏用上函式 utf8_decode(),然後 htmlentities()。接下來字串中所有奇怪的字元(對英文語系的人來說)都以正常的字元取代。中文或日文字無法經過這些折磨還存活。但是字串還要經過更多的處理。
回到 stringURLSafe(),所有的空白字元及非文數字符號被以破折號取代或被移除。任何中文或日文字都從字串中消失了。並且故事還未結束。
因為在經過了這些虐待後字串極可能只剩下破折號或完全空白,函式 check() (在幾個地方出現)在叫用 stringURLSafe() 後,最後把只剩下破折號或完全空白的字串用時間戳記來取代。
如果要使用中文的連結(也就是在 Alias 欄位裏用中文),需要修改兩個檔案。首先修改 libraries/joomla/filter/filteroutput.php 中的 stringURLSafe() 函式,把其中的
$str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'), array('-',''), $str);
$str = preg_replace(array('/\s+/', '/\./'), array('-', '_'), $str);
$string = htmlentities(utf8_decode($string));
$string = htmlentities($string, ENT_COMPAT, 'UTF-8');
Please 登入 to join the conversation.
- jade
- Topic Author
- 訪客
2008-08-23 12:51 #11006
來自 jade
jade replied the topic: Joomla!標題別名轉換成為中文的問題?
可以了,之前沒把這兩行刪除掉,所以轉換不了,現在可以了。
另外提議Joomla!的中文網站都使用這兩個kochin和hoping屬於中文專用的hack,除非你喜歡使用英文別名或者日期的形式。
hoping的別名自動轉換拼音的方法就是打開找到替換成為Chinese.class.php 可以到hoping的網站下載。kochin和hoping的方法一個是直接使用中文別名,另外的是轉換成為拼音別名,喜歡使用哪個隨便你的喜歡了,現在還不知道Google對哪個SEF支持比較好一些!合理的做法是,沒填寫別名的時候自動轉換成為拼音格式,填寫了別名的時候就使用中文的形式。
如果不使用上面兩個中文hack的辦法,當你開啟某些SEF功能的時候可能會出錯,例如:這個時候當然沒問題了,但是如果開啟某些SEF程式功能的時候,(id1)和(id2)是不會出現的,所以兩個文章顯示的都是 joomla-2008 ,這樣就會出錯了,所以說J的標準 別名/Alias 不適合於中文的網站!如果各位達人不同意的,可以說說你的意見!
//$str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'), array('-',''), $str);
//$string = htmlentities(utf8_decode($string));
另外提議Joomla!的中文網站都使用這兩個kochin和hoping屬於中文專用的hack,除非你喜歡使用英文別名或者日期的形式。
hoping的別名自動轉換拼音的方法就是打開
/libraries/joomla/database/table/content.php
if(empty($this->alias)) {
$this->alias = $this->title;
}
if(empty($this->alias)) {
include_once(JPATH_ROOT."/includes/Chinese.class.php");
$cht = new Chinese('UTF-8', 'PINYIN');
$this->alias = $cht->convert($this->title);
//$this->alias = $this->title;
}
如果不使用上面兩個中文hack的辦法,當你開啟某些SEF功能的時候可能會出錯,例如:
1.標題:Joomla 2008 教程,標準J的別名,joomla-2008,顯示形式是(id1)-joomla-2008
2.標題:Joomla 教程 2008,標準J的別名,joomla-2008,顯示形式是(id2)-joomla-2008
Please 登入 to join the conversation.