在 ubiquity 中使用中文命令
Ubiquity 为网络应用带来了创新的使用方式,使我们能更加快捷方便的取得并使用各种资讯与服务。但是由于是外国开发者的作品,使用的命令都是英文,对于我们来说有些命令使用中文更加方便实用(如才发布的饭否脚本)。我这里给出一个根据自带的 google 翻译修改的中文命令脚本,一点都不复杂,大家看一下就会自己改了。[code]// -----------------------------------------------------------------
// TRANSLATE COMMANDS
// -----------------------------------------------------------------
var Languages = {
'阿拉伯文' : 'ar',
'简体中文' : 'zh-CN',
'繁体中文' : 'zh-TW',
'丹麦文' : 'da',
'荷兰文': 'nl',
'英文' : 'en',
'芬兰文' : 'fi',
'法文' : 'fr',
'德文' : 'de',
'希腊文' : 'el',
'印度文' : 'hi',
'意大利文' : 'it',
'日文' : 'ja',
'韩文' : 'ko',
'挪威文' : 'no',
'波兰文' : 'pl',
'葡萄牙文' : 'pt-PT',
'罗马尼亚文' : 'ro',
'俄文' : 'ru',
'西班牙文' : 'es',
'保加利亚文' : 'bg',
'捷克文' : 'cs',
'克罗地亚文' : 'hr',
'瑞典文' : 'sv'
};
var key;
var noun_type_language_zh = new CmdUtils.NounType( "语言", [key for (key in Languages)]);
function translateTo( text, langCodePair, callback ) {
var url = "http://ajax.googleapis.com/ajax/services/language/translate";
if( typeof(langCodePair.from) == "undefined" ) langCodePair.from = "";
if( typeof(langCodePair.to) == "undefined" ) langCodePair.to = "";
var params = Utils.paramsToString({
v: "1.0",
q: text,
langpair: langCodePair.from + "|" + langCodePair.to
});
Utils.ajaxGet( url + params, function(jsonData){
var data = Utils.decodeJson(jsonData);
// The usefulness of this command is limited because of the
// length restriction enforced by Google. A better way to do
// this would be to split up the request into multiple chunks.
// The other method is to contact Google and get a special
// account.
try {
var translatedText = data.responseData.translatedText;
} catch(e) {
// If we get either of these error messages, that means Google wasn't
// able to guess the originating language. Let's assume it was English.
// TODO: Localize this.
var BAD_FROM_LANG_1 = "invalid translation language pair";
var BAD_FROM_LANG_2 = "could not reliably detect source language";
var errMsg = data.responseDetails;
if( errMsg == BAD_FROM_LANG_1 || errMsg == BAD_FROM_LANG_2 ) {
// Don't do infinite loops. If we already have a guess language
// that matches the current forced from language, abort!
if( langCodePair.from != langCodePair.de )
translateTo( text, {from:langCodePair.de, to:langCodePair.to, de:langCodePair.de}, callback );
return;
}
else {
displayMessage( "Translation Error: " + data.responseDetails );
}
return;
}
if( typeof callback == "function" )
callback( translatedText );
else
CmdUtils.setSelection( text + "<br/><b style='color:red'>翻译结果:</b>" + translatedText );
CmdUtils.setLastResult( translatedText );
});
}
var Translated;
CmdUtils.CreateCommand({
name: "翻译(中)",
description: "默认翻译到中文。",
icon: "http://www.google.com/favicon.ico",
help: "You can specify the language to translate to, and the language to translate from. For example," +
" try issuing "translate mother from english to chinese". If you leave out the the" +
" languages, Ubiquity will try to guess what you want. It works on selected text in any web page, but" +
" there's a limit to how much it can translate at once (a couple of paragraphs.)",
takes: {"待翻译文本": noun_arb_text},
modifiers: {"从": noun_type_language_zh, "到": noun_type_language_zh},
execute: function( directObj ) {
// Default to translating to English if no to language
// is specified.
// TODO: Choose the default in a better way.
if( Translated != null )
CmdUtils.setSelection( directObj.text + "<br/><b style='color:red'>翻译结果:</b>" + Translated );
else
translateTo( directObj.text, {to:"zh-CN", de:"en"} );
Translated = null;
},
preview: function( pblock, directObj, modifiers ) {
var toLang = modifiers.到.text || "简体中文";
var fromLang = modifiers.从.text;
var toLangCode = Languages[toLang];
var fromLangCode = Languages[fromLang];
Translated = null;
translateTo( directObj.text, {from:fromLangCode, to:toLangCode, de:"en"}, function( translation ) {
pblock.innerHTML = "将选中的文本替换为" + toLang + "翻译:<br/><small style='padding:10px;color: #CCC;display:block;'>" + translation + "</small>";
Translated = translation;
});
}
});
CmdUtils.CreateCommand({
name: "翻译(英)",
description: "默认翻译到英文。",
icon: "http://www.google.com/favicon.ico",
takes: {"待翻译文本": noun_arb_text},
modifiers: {"从": noun_type_language_zh, "到": noun_type_language_zh},
execute: function( directObj ) {
if( Translated != null )
CmdUtils.setSelection( directObj.text + "<br/><b style='color:red'>翻译结果:</b>" + Translated );
else
translateTo( directObj.text, {to:"en", de:"zh-CN"} );
Translated = null;
},
preview: function( pblock, directObj, modifiers ) {
var toLang = modifiers.到.text || "英文";
var fromLang = modifiers.从.text;
var toLangCode = Languages[toLang];
var fromLangCode = Languages[fromLang];
Translated = null;
translateTo( directObj.text, {from:fromLangCode, to:toLangCode, de:"zh-CN"}, function( translation ) {
pblock.innerHTML = "将选中的文本替换为" + toLang + "翻译:<br/><small style='padding:10px;color: #CCC;display:block;'>" + translation + "</small>";
Translated = translation;
});
}
})[/code]这其中需要注意有这么几个:
1、命令[code]name: "命令"[/code]2、参数提示符[code]modifiers: {"参数提示符1": noun_type_xxxx, "参数提示符2": noun_type_xxxx}[/code]3、参数及描述[code]var xxxx = {'参数1','参数2','参数3'};
var noun_type_xxxx = new CmdUtils.NounType( "参数描述", xxxx]);[/code]如有需要发送的英文参数可以采用以下格式汉化[code]var xxxx = {'参数1':'实际参数1','参数2':'实际参数2','参数3':'实际参数3'};
var key;
var noun_type_xxxx = new CmdUtils.NounType( "参数描述", [key for (key in xxxx)]);[/code][b]modifiers.参数提示符1.text[/b] 中就是根据 [b]noun_type_xxxx[/b] 中定义取得的命令参数。
看到这里大家应该都会了吧,这下大可根据自己的需要尽情地修改。
PS:由于不想配置文件太大(edit 页面添加的命令保存在 prefs.js 中,keyconfig 也是如此,所以我只添加精简实用的命令),我是直接修改的 builtincmds.js 文件,用 UTF-8 保存,不需要重启就可以看到效果。直接修改还有一个好处就是可以删除不许需要的命令。
[[i] 本帖最后由 水鑫日 于 2008-9-9 15:45 编辑 [/i]] 唔,很感兴趣。ubiquity很好很强大。非常喜欢,顶一下了 lz请问keyconfig的设置应该如何备份。 我觉得在 显示 之外的地方, 使用中文书写代码不是非常明智.
不过或许见仁见智 [b]回复 3楼 hillhill 的帖子[/b]
最直接的方法就是备份 prefs.js
[b]回复 4楼 zillac 的帖子[/b]
[i]汉字[/i] 会被编码成 [i]\u6C49\u5B57[/i] 的形式,不会影响代码运行
看帖不顶不厚道~~我顶~~~~
**** 作者被禁止或删除 内容自动屏蔽 ****页:
[1]