Excel里內嵌在線翻譯


本來尋思着繼續寫點系統運行日志跟蹤技術的,但早晨哥家領導從單位打來電話,讓幫助她的閨蜜搞一個excel翻譯的問題,總部IT搞不定。我過去是用excel做了幾年工作,卻都是些數學計算,跟翻譯也扯不上啊;領導交代的任務,還是要認真對待,要不然下個月零花錢沒着落!幸好,最后被哥順利搞定,晚上領導很開心,話今天倍有面子,公司總部熱烈談論技術男的厲害。唉,哥用十多年時間來揣摩如何做嵌入式系統,沒得到幾個小紅花;而每每耍些雕蟲小技,卻能迎來一堆粉絲,真不知是喜是悲了。拿出來分享下,或許能幫到更多人。

領導交代完不一會,收到具體問題和要求。看上去沒什么,就納悶幾個IT是不是偷懶來着。下面是那個要做的工作的圖:


Excel表里,產品名稱是日文,韓文的,為了方便不懂外文的同事,要增加一列中文翻譯。公式呢,她們從網絡上找到了:
:=FILTERXML(WEBSERVICE("http://fanyi.youdao.com/translate?&i="&A1&"&doctype=xml&version"),"//translation"),
但問題是,英文的蠻好,其它語言日文韓文等都不好使。哥的任務就是解決這個多語言問題。哥平常搞慣了嵌入式系統和后台程序,網絡搞的確實不多,應該還能湊合應對。

直覺告訴我,需要在URL上加上語言選項。於是乎,先將這段http地址放到瀏覽器里,看看得到的xml是什么。

<response type="EN2ZH_CN" errorCode="0" elapsedTime="1">
  <input>
    <![CDATA[ " ]]>
  </input>
  <translation>
    <![CDATA[]]>
  </translation>
</response>

很顯然,EN2ZH_CN就是那個翻譯語言選項,我得先找到其它語言是怎么定義的,然后才能考慮如何提交這些額外參數。

打開有道的在線翻譯,查看它的源碼,找到了這些:

<ul id="customSelectOption">
<li class="on"><a val="AUTO" href="./在線翻譯_有道_files/在線翻譯_有道.html">自動檢測語言</a></li>
<li><a val="ZH_CN2EN" href="./在線翻譯_有道_files/在線翻譯_有道.html">中文 » 英語</a></li>
<li><a val="ZH_CN2JA" href="./在線翻譯_有道_files/在線翻譯_有道.html">中文 » 日語</a></li>
<li><a val="ZH_CN2KR" href="./在線翻譯_有道_files/在線翻譯_有道.html">中文 » 韓語</a></li>
<li><a val="ZH_CN2FR" href="./在線翻譯_有道_files/在線翻譯_有道.html">中文 » 法語</a></li>
<li><a val="ZH_CN2RU" href="./在線翻譯_有道_files/在線翻譯_有道.html">中文 » 俄語</a></li>
<li><a val="ZH_CN2SP" href="./在線翻譯_有道_files/在線翻譯_有道.html">中文 » 西語</a></li>
<li><a val="EN2ZH_CN" href="./在線翻譯_有道_files/在線翻譯_有道.html">英語 » 中文</a></li>
<li><a val="JA2ZH_CN" href="./在線翻譯_有道_files/在線翻譯_有道.html">日語 » 中文</a></li>
<li><a val="KR2ZH_CN" href="./在線翻譯_有道_files/在線翻譯_有道.html">韓語 » 中文</a></li>
<li><a val="FR2ZH_CN" href="./在線翻譯_有道_files/在線翻譯_有道.html">法語 » 中文</a></li>
<li><a val="RU2ZH_CN" href="./在線翻譯_有道_files/在線翻譯_有道.html">俄語 » 中文</a></li>
<li><a val="SP2ZH_CN" href="./在線翻譯_有道_files/在線翻譯_有道.html">西語 » 中文</a></li>
</ul>

就是這些,不費功夫,日文轉中文就是JA2ZH_CN嘛!開始往URL里添加這個額外參數。哥也不知道他們是怎么定義的,只能猜猜猜。這個過程挺無聊的,先對着那個在線翻譯,找可能的定義方式,試了好久也沒成功。最后,看着那個返回xml結果,突然想,他們不會是把請求和結果定義成一個樣子吧?

果然,就是返回結果里的type字段。不過還是沒法高興。日文,韓文,法文全都沒反應。哥開始懷疑,是不是type字段也不是我想象的語言控制字段。

繼續做實驗,於是有了下面兩個url訪問:

http://fanyi.youdao.com/translate?&type=EN2ZH_CN&i="who?誰"&doctype=xml&version
運行結果:

<response type="EN2ZH_CN" errorCode="0" elapsedTime="7">
<input>
<![CDATA[ "who?誰" ]]>
</input>
<translation>
<![CDATA[ “誰?誰” ]]>
</translation>
</response>

 

http://fanyi.youdao.com/translate?&type=ZH_CN2EN&i="who?誰"&doctype=xml&version

運行結果:

<response type="ZH_CN2EN" errorCode="0" elapsedTime="6">
<input>
<![CDATA[ "who?誰" ]]>
</input>
<translation>
<![CDATA[ "Who the who?" ]]>
</translation>
</response>

得,哥被人耍了,有道這個頁面壓根就沒給提供中英之外的選擇;哥需要另外找翻譯服務。首先想到的是百度,查了一下,baidu提供翻譯的API,接口還蠻簡單的;當然,也查了下youdao,他們也有API。對比之后發現,兩家差不多,只是語法上略微差別。於是乎,讓她們申請ID先。很簡單,免費的,幾分鍾后就給我發來了賬戶信息。

繼續開工,做出了下面這個URL(neverland是網上找到的賬戶,人家介紹怎么用有道API,哥借用下。同學們記得謝謝neverland的奉獻,要用的多,自己申請哈):
http://fanyi.youdao.com/openapi.do?keyfrom=neverland&key=969918857&type=data&doctype=xml&version=1.1&q=キラキラリボンカチューシャ
***注意咯,q后面的待翻譯文本,不能用引號,否則不翻譯。***
得到翻譯結果:

 
         
<youdao-fanyi>
 
         
<errorCode>0</errorCode>
<query>
<![CDATA[ キラキラリボンカチューシャ ]]>
</query>
<!-- 有道翻譯 -->
<translation>
<paragraph>
<![CDATA[ 閃閃發光的絲帶發箍 ]]>
</paragraph>
</translation>
 
         
</youdao-fanyi>

萬事俱備,開始修改excel的公式,如下:

=_xlfn.FILTERXML(_xlfn.WEBSERVICE("http://fanyi.youdao.com/openapi.do?keyfrom=neverland&key=969918857&type=data&doctype=xml&version=1.1&q="&F3&""),"//paragraph")

咦,咋還是不好使?英文的可以了,其它的全都不行!嗯,應該是編碼問題。URL是必須ascii八位元的,除了英文,其它文字都是unicode或是其它寬字符編碼的,需要轉換下格式。查了下幫助,URLENCODE函數可以幫助解決,如下:
=_xlfn.ENCODEURL(F3)

再修改翻譯公式,得到:
=_xlfn.FILTERXML(_xlfn.WEBSERVICE("http://fanyi.youdao.com/openapi.do?keyfrom=yamaxun&key=1400504075&type=data&doctype=xml&version=1.1&q="&H3&""),"//paragraph")
注意咯,這里編碼和翻譯沒法合並,具體原因自己思考!

OK,傳改完的excel過去,打完收工。剩下的就是excel的拖動復制工作,不用哥多嘴羅嗦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM