去掉CAPTCHA的英文字:2010年03月06日星期六
適用於:Drupal初學者,想更改Drupal theme外觀 的人,對CSS有興趣的人,對PHP有興趣的人,以前用Dreamweaver的人,以前用其他Blog CMS的人。本文用Drupal6.14,想在Drupal中使用Flash,詳見本文的環境。
CAPTCHA在durpaltaiwan.org已有模組介紹,用CAPTCHA 6.x-2.0版本(模組6.x-2.1在此下載),很困擾的是一堆英文字,見圖一,有三句CAPTCHA、Math question、Solve this simple math problem and enter the result. E.g. for 1+3, enter 4. 如何去掉?
在sites/all/modules/captcha下找到captcha MODULES檔案(注意:以下的行數是CAPTCHA 6.x-2.0版本),
- 用CAPTCHA尋找 , 在269 行找到 '#title' => t('CAPTCHA'),將其改為 '#title' => t(''),。
- 用Math question尋找,在538 行找到'#title' => t('Math question'),將其改為'#title' => t('?'),。
- 用Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.尋找,在539 行找到'#description' => t('Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.'),將其改為'#description' => t(''),。
- 改完後存回captcha MODULES檔案,就好了,如圖二。
可能會有人認為沒什麼需要,仍是認為一般的內容網站讀者很可能會很不習慣,最好只放上必需的字,尤其是避免一串英文字,雖然大多數人看得懂英文,但是~~CAPTCHA是啥?我猜是Catch You,"抓到你了"的意思,一般的讀者很可能會不知幹嘛,所以去掉。
以前讀過一些PHP,對Drupal也不熟,信心不是很強,若這作法不好請告知。
圖一:用CAPTCHA,很困擾的是一堆英文字,見下圖,有三句CAPTCHA、Math question、Solve this simple math problem and enter the result. E.g. for 1+3, endter 4.
- Drupal 6.14。
- apache server設在Windows XP上,以http://localhost/drupal為例。
- 所有的檔案在c:/xampp/內,以下的路徑均相對於c:/xampp/。
- 各檔案均用vim editor打開,行數以vim內的行數為準。
- 主機是遠振資訊cPanel環境。
附加檔案 | 大小 |
---|---|
pictire1.JPG | 11.52 KB |
pictire2.JPG | 4.16 KB |
Re: 去掉CAPTCHA的英文字
Completely Automated Public Test to tell Computers and Humans Apart
wiki http://zh.wikipedia.org/wiki/CAPTCHA 上的意思。
Re: 去掉CAPTCHA的英文字
所有在程式裡有被 t('') 包起來的字,例如 t('CAPTCHA'),都是可以被翻譯的。所以,請用內建的介面翻譯功能去調整即可,不要用一堆奇技淫巧啊!!!
Re: 去掉CAPTCHA的英文字
哈哈,看到這幾個字,讓我不禁噗哧大笑 ...
Re: 去掉CAPTCHA的英文字
我覺得這個形容很適切呀~
不過凡事有規則就有例外,奇技淫巧就是專門用來對付例外狀況時用的~
Re: 去掉CAPTCHA的英文字
像這樣直接修改module來改變顯示的方法,我以前也常用,但是每次update模組時, 縂吃盡苦頭 (除非你能保證永遠不update ), 因爲好多模組被我改來改去,都記不得那裏被改了, 結果下場當然很慘。
如果可以,最好是自己建立一個module, 用外加模組的方式來改變。 要不然就用css 的方法. 需要改變字串的話,用翻譯的方式或是string override的模組, 都是不錯的方式。
參考一下咯。
Re: 去掉CAPTCHA的英文字
調整 CSS 隱藏起來不就好了嗎?
.captcha legend {
display:none;
}
如果一定要改翻譯,我建議用 Javascript 的方式來改,使用 JQuery 去定位來作翻譯~
Re: 去掉CAPTCHA的英文字
謝謝Danny及tokimeki的五種方法,都比我的方法好,因為我真正想做的是"將英文改成中文",而又不會JQuery及自建模組,所以大概會用Danny的翻譯的方式。
hello Danny: 試了你的翻譯的方式或是string override的模組,都可成功,偏向用翻譯的方式(可少load string override的模組)。有三問題請問:
謝謝。
Hello tokimeki:謝謝,因為我真正想做的是"將英文改成中文"。而又不會JQuery,所以先用Danny的方法。不過JQuery這東西老是出現,看來是早晚要學,
Re: 去掉CAPTCHA的英文字
如果閱讀英文沒有問題的話,建議直接看 jQuery 的官方網站。
這裡有一些中文的資料 繁體中文教學。
由於 Drupal 本身前端的 Javascript 就是用 jQuery,所以不需要手動載入,你只需要在版型的目錄新增一個 .js 檔案,並在 .info 檔加入該 .js 檔案即可~
至於相關的程式碼當然就是寫在該 .js 檔案裡面~
Re: 去掉CAPTCHA的英文字
正確一點做法:
複製以下到 template.php
function phptemplate_captcha($element) { // 將theme 變為 phptemplate_,最佳是 YourThemeName_
if (!empty($element['#description']) && isset($element['captcha_widgets'])) {
$fieldset = array(
'#type' => 'fieldset',
// '#title' => t('CAPTCHA'), // 刪除或注釋掉這行
'#description' => $element['#description'],
'#children' => $element['#children'],
'#attributes' => array('class' => 'captcha'),
);
return theme('fieldset', $fieldset);
}
else {
return '
';
}
}
CSS 隱藏,小小的內容是不錯,但內容多的話,為網頁增加了無謂的大小,也有SEO問題
jQuery,永遠不要使用它來隱藏東西
至於英文 --> 中文翻譯,應該使用 Locale
Locale / string override,沒有特殊原因,不要同時使用
小修改,使用string override就好,好像我的網站 (notaBlueScreen),只有表面上的數個字詞是中文
---
notaBlueScreen | 訂閱RSS | Plurk
Re: 去掉CAPTCHA的英文字
補充一下
修改 template.php 後要清除 CACHE,否則是沒有效果的
---
notaBlueScreen | 訂閱RSS | Plurk | twitter
Re: 去掉CAPTCHA的英文字
CSS 用來隱藏一些需要被隱藏的東西、jQuery 用來作與預設翻譯不同的翻譯,這兩者的搭配,是邊際效應或是說副作用最小的作法,也是調整起來最簡單的方式。
只要你懂得如何用 CSS 定位到該定位的地方就可以隱藏或翻譯,所需的背景知識也僅止於跟 CSS 相關(jQuery 拿來作翻譯時基本上是一個樣板照抄)。
我不太了解用 CSS 隱藏掉一些隱藏需要被隱藏的東西跟 SEO 有何關連?
string override 如果用在所有的翻譯詞都一致的情況下會比較簡單,不過仍然需要配合 Localization client 來查出原始未翻譯的語句是什麼(有些時候句子中會有 %s 之類的變數)。
Re: 去掉CAPTCHA的英文字
SEO 這種東西,你不相信就不會存在
Drupal 預設沒有載入 jQuery, 為了翻譯數個文字,就載入幾十KB的檔案,不是有點兒沒必要?
即使有載入,除非內容是不重要,否則 JS 替換,某些引擎只會抓取到本身的英文內容
除了省時間、找不到解決方法或(有可能)省到伺服器資源外,想不到有什麼理由將一些垃圾代碼送到客戶端,然後增加一些 CSS / JS 隱藏起來或替代文字
---
notaBlueScreen | 訂閱RSS | Plurk | twitter
Re: 去掉CAPTCHA的英文字
我強調的是最簡單的方式,不是最簡約的方式。
今天你對 Drupal 運作的方式很瞭解,知道如何去寫 theme function 做到最簡約的方式,那是你很了解,不代表其他人也一樣這麼了解。
現在問的是 CAPTCHA 那改天問的是另外一個,是不是又要麻煩你看一下要寫的 theme function 的名稱跟內容應該是什麼呢?
我給出的解法不需要太過於深入了解 Drupal 跟 PHP ,只要你會用 Firebug 去觀察 CSS 該如何定位、了解 CSS 的相關知識,就可以達成一樣的效果。
我並不是不相信 SEO,只是對於個問題而言,我看不出來隱藏一個無關緊要的標籤會對 SEO 產生什麼重大影響?
再說如果你認為 jQuery 是垃圾代碼的話,那整個 Drupal 系統也是,他的效率跟大小絕對比不上你手刻代碼來的快跟小不是嗎?
使用 jQuery 來做翻譯,重點在於有些句子或詞語需要不同的翻譯,例如:Apply 這個字,有些地方我需要他翻成「套用」,而有些地方我需要他翻成「查詢」。
正規的翻譯還是用正規的方法來做,只是因為 Drupal 架構的關係,翻譯是一對一的關係,需要有例外時,要用其他的方式來處理。
節省時間就是我強調的重點,只能說我們側重的方向不一樣~
Re: 去掉CAPTCHA的英文字
立場不同,只是討論,不是說你的提議錯誤,我同意你的部分見解,只是可行的情況下,個人不建議這樣做
垃圾代碼所指是沒用的代碼,就是你”隱藏起來的那些”,不是指jQuery本身,如果白白將jQuery送到客戶端而又用不著的,也是垃圾
先向大家抱歉,可能我寫得不清楚:
"CSS 隱藏,小小的內容是不錯,但內容多的話,為網頁增加了無謂的大小,也有SEO問題"
這句的意思是:用 CSS 隱藏少量內容,是不錯的選擇。但隱藏大量內容,就可能有SEO問題。而增加網頁大小是必定會的
DISPLAY: NONE 隱藏東西,有人說沒有問題,有人說是有問題,看大家相不相信了。由於根本沒法或太難證實,所以我才說 "SEO 這種東西,你不相信就不會存在"
如果我上面有什麼錯誤,或言語不當,在此先說聲抱歉,我一心只是提出意見,歡迎任何正面討論。謝謝各位!
---
notaBlueScreen | 訂閱RSS | Plurk | twitter
Re: 去掉CAPTCHA的英文字
依照你的情況, 應該用 site building - interface translation (要先enable local 模組)
Modify php.ini; change max_execution_time from 30 to 120.
翻譯不多的話,少用外加模組是正確的做法。但是,如果很多字串要翻譯,用string override來管理就很值得。
Re: 去掉CAPTCHA的英文字
實在很感謝先進提供了七、八種姿勢,由這些知識中才發現原來Locale就可做到,所以決定聽從charles的不用"奇技淫巧",採取正常體位,直攻核心(Core)- 可選擇、Locale模組。
多謝了。
drupaltaiwan真是好玩!charles的"奇技淫巧"四字真是高明!
Re: 去掉CAPTCHA的英文字
唉!唉!唉!語言水平不高,刻意查一下 "奇技淫巧" 何解,看了後,還是不懂。
Locale / string override / jQuery 方法修改 / 程式方面修改 都有不同效果
不同時機就該使用不同的以達到最佳的結果
---
notaBlueScreen | 訂閱RSS | Plurk | twitter
Re: 去掉CAPTCHA的英文字
http://dict.idioms.moe.edu.tw/mandarin/fulu/dict/cyd/5/cyd05615.htm
Re: 去掉CAPTCHA的英文字
持續奮戰14週後, 總算有機會專注在 drupal 6 的 theme system了.
14週以來前後東摸西摸地花在探索 drupal 6 的 theme system 時間也不短了, 至少40個小時有吧?
過程當中一樣難以免俗地繞了一大圈子, 才有稍微抓到方向.
即使要改個小地方(ex: exposed filter form 的 輸入框的長度穿出版型框, 需要改短些),
也得花不少時間K文件, 揣摩, 試誤, 過程當中沒出現預期的狀況又要排障, 又要懷疑該不會是用錯方法?
就個人體驗, tokimeki 跟 KAY.L 兩位大大的方法都用到了.
剛開始是從 override theming function 的方式去做, 但是一直搞不定, 想搞定又怕閒工夫不夠,
但是擱著不管也不是辦法, 最後還是直接從css去改, 果然立刻見效, 愈改愈順手,
反而就先不管 theme system 的流程怎麼跑了.
搞懂 theme system 的流程終究是堂堂大道, 只是真的要有用功學好的準備, 時間肯定還是要繼續投下去的.
最後感謝這個討論串的所有參與者, 尤其是 tokimeki 及 KAY.L 兩位大大,
這篇對我而言有指出不少值得注意的思考點. 而且看中文總比硬k英文輕鬆多了. 8D