2007-12-12

社會組科技須知 - 軟體本地化: gettext (2)

我已經說過gettext為本地化的好處。那時候我提過幾次po檔專用的編輯軟體多好用。那,我們看一下有什麼軟體。最有名的應該是poedit。不管你用的是WindowsOS XLinux,到處都可以用poedit。我自己沒有Windows主機,所以我能放的是OS XLinux的畫面。先OS X:


而這個是Linux版:


兩個版本有讀的po檔不一樣,一個是Drupal的語言檔(華語),另一個是Postnuke(日語)。我們看一下有哪一些比較重要的部分:


我已經說過,源語言的內容沒有辦法改,軟體只會顯示那些視窗。翻譯可以改的是下面的目標語言視窗。在左邊我會寫翻譯,在右邊可以留下說明、意見等。

在狀態列(最下面)軟體會告訴我們總共有多少個記錄,多少個還要翻,多少個模糊。如果有未翻的記錄,poedit會先放那些給我們看。不過,我們的本地化可以開始之前我們一定先要輸入一些設定:


我們一定要告訴poedit誰想使用它,因為poedit讀pot檔(樣本)的時候會自動地把這些資訊放進去。如果你打算較長期做這種本地化的工作,你最好先找一個比較“穩定”的信箱,像GMail或類似的地方。不要換工作或學校就沒有辦法聯絡你,有人可能需要你……

在上面的設定也可以看到一個Translation Memory選項。我希望你知道這種翻譯記憶是多好用的東西…… 所以,高興吧,poedit也提供這個功能。


我們也可能要選語言方面的設定。我希望你知道編碼是什麼東西…… 上面的設定是屬於另外一個軟體,gtranslator。它只有Linux版,而且是為了Gnome做的。


Gtranslator也有TM(翻譯記憶),所以它一段時間有學你的翻譯之後也可以自己提供目標語言版本。這個版本不會完美,但是你用越久,它的版本越準。不對的地方當然可以修改。所以,如果你沒有能力或懶得做翻譯,電腦沒有辦法替你工作,但是它可以讓你的工作輕鬆多了。

這是gtranslator:


而這裡有為了KDE做的軟體,KBabel


你會發現,雖然有三個不同的軟體,兩個作業系統的版本,但是它們在很多方面一樣:它們都會給我們看一個記錄裡面的資訊,讓我們方便地翻,允許我們把狀態改成模糊等。Windows的poedit也一樣,所以不用怕。

你只要先輸入基本資料,包含目標語言跟編碼,下載一個pot檔,讀進去,然後就可以開始翻。翻完後軟體會自己“另存”一個檔案,然後你只需要把那個檔案寄給負責你做本地化的那個軟體的人。這麼簡單……

OK,技術方面的部分其實會這麼簡單。如果你真的是語言方面的專家,我想你應該自己知道在翻譯的過程中要注意什麼。我這裡只想讓你不會怕技術……

以上介紹的其實都是個人使用的軟體。不過,軟體開發有合作的話就更好做,對不對?翻譯也一樣。所以,我在上面談的同樣的功能現在也可以在網路上使用。

一個不錯的軟體是Pootle。你可以用它自己設一個本地化網站。而如果你想看到一個真漂亮的開發(包含本地化)的環境,你一定要逛launchpad。這是Canonical為了Ubuntu開發建的網站。這個網站真棒……

2007-12-11

Conference fun (NKFUST)

Last week I attended a conference in Gaoxiong. While the topic ("Transcending Borders: Innovations in Language Learning and Use" - a little bit too "Web2.0"ish for my taste) was not that exciting, it was still "fun" - from a certain point of view.

First of all, while most presentations revolved around the use of technology (mostly in the form of computers) in language teaching, most of the presenters encountered technical difficulties using a computer to present their findings. Irony, anyone?

It was fun to see the use of PHP and MySQL (pronounced as "my S Q L" during the presentation) declared to be the "optimal choice" for a machine translation web interface. That's like saying the 8051 is the ultimate choice for all controller needs. Let's say it was the only thing the guy who wrote the code could come up with...

The same interface still lacks user authentication and permission control. I would have suggested to become familiar with the API of a popular CMS and then make the code into a module for that CMS, but at that time I think nobody would have understood what I was talking about. I'll better try to contact the poor guy who has to write the code directly... (Though he would not like my suggestion, as it means work for him...)

Captain Obvious was also attending. He found out that "students prefer the use of technology in language teaching" over the pure use of textbooks. Surprise, surprise, who would have thought that?

I had asked whether the "technology" in that study would also include cassette tapes, since (depending on the point of view) that is a technology that has been around for about 70 years now. Yes, tapes were included in that "technology". Unfortunately I forgot to ask how students like the tapes (and CDs these days) attached to textbooks. Now that would have been interesting... (Or not, from my experience, as Captain Obvious already knows the answer...)

A few publishing houses presented some of their offers outside. I looked through a few books on "simultaneous interpretation". Quite interesting to see people claiming that there is only one way to properly translate a given example sentence and at the same time calling the own profession "interpretation". The title in Chinese was not much better: 同步翻譯...

There was also a book with the title 專業翻譯. However, contrary to most courses with that title, this book deserved it, as it dealt with many aspects of working as a translator. The publishing company is Bookman (書林).

But the real "fun" came later, in the afternoon. As an interpreter, I am naturally concerned about communication (in whatever ways, as you may have noticed), mutual understanding - and misunderstanding, of course. Although there were some "funny" moments spread over the day, this was not one of those "cheap" conferences only held for a few people to be able to say they presented their research on a conference.

People discussed things at that conference that I will probably never hear even mentioned at other (cough, cough...) schools. But even those supposedly highly qualified experts found it absolutely normal that one can not write Chinese without a "special" keyboard, meaning that people moving to the US have to write in English to their friends in Taiwan.

In another presentation regarding the use of both Chinese and English ("code switching") on a BBS in Taiwan it was not even considered that some of the "English" written there could actually be romanised Chinese. (I admit this is not something I would expect to see on a BBS in Taiwan, but nevertheless it should be correctly identified if it shows up.)

In my opinion this is a pretty sad state, but even for those language experts romanisation is not an issue, it seems not to exist at all. Zhuyin is a phonetic system to write Chinese as is Hanyu Pinyin or even Tongyong, just with a different script. But while people here are quite familiar with Zhuyin, nobody regards a word written in Latin script anything else than "English". And this is sad indeed, as it shows a serious misconception regarding writing systems and even language in general.

Well, I'm looking forward to the next conference at another school, this one a little bit more related to my official field of expertise. Though... IIRC, they too spoke of "interpretation" - and they are asking for "English names", something NKFUST (Thanks!) did not do...

2007-12-10

社會組科技須知 - 軟體本地化: gettext (1)

我蠻確定你沒有聽過gettext這個名稱。那它到底是什麼呢,而為什麼語言方面的人要知道或甚至了解它?

首先,如果你打算自己寫程式,你可能要花一點時間自己看gettext相關的資料。我沒看過華語的手冊,但是你應該有習慣這一件事。不過,如果你是筆譯或另外語言相關的人,我想在這裡解釋你關於gettext可能要知道的部分。

Gettext是一個library,一種功能庫。它不是“某一種”功能庫,它的用途是軟體國際化跟本地化(i18n/l10n)。所以,gettext能夠幫助寫程式的人做出多一些語言的版本。

它也會幫助翻譯人員,因為它會把軟體的語言檔提供在一個特殊的格式。那種檔案叫"po"或"pot"檔。"pot"表示它是范本檔,這兩個的區別跟一般文書處理的檔案一樣。

這些檔案對翻譯那麼有用是因為它們非常適合處理各種各樣的語言,因為它們可以包含許多跟翻譯過程有關的資訊,因為它們專用的編輯軟體保證連電腦使用方面較弱的人(社會組……)不會“破掉”東西。那我們看一下每一點。

能夠處理各種各樣的語言:你不只能選你要用什麼編碼,你也可以設定你的目標語言使用幾種(以數量定的)復數。華語沒有復數,但是英語有一種,俄語有兩種,而一些語言甚至有三種復數。

Gettext的手冊也強調軟體輸出詞句的準備,說明怎樣的string才比較適合順利地翻成其它語言。這些是軟體設計的人員或“語言顧問”需要注意的。沒有做到的話,可能沒有辦法翻到一些語言或至少會遇到困難。

可以包含許多跟翻譯過程有關的資訊:po檔開頭已經提供不少資訊,包含翻譯人員相關資訊,像名字,信箱等。Open Source Software在華語雖然被稱呼“自由軟體”,但是它還是會尊敬每一個人的貢獻,所以也會記錄誰有翻哪一個部分。

不過,更有趣的是檔案內容。我先“偷”一下手冊相關的部分

# translator-comments
#. extracted-comments
#: reference...
#, flag...
msgctxt context
msgid untranslated-string
msgid_plural untranslated-string-plural
msgstr translated-string
msgstr[0] translated-string-case-0
...
msgstr[N] translated-string-case-n

一個記錄可以包含這些部分。那我們看一下一個一個有什麼作用:

# 這樣開始的行包含翻譯的意見或說明。

#. 這裡有設計軟體的人在程式碼或在這個檔案留下給翻譯的一些建議或說明。

#: 在這裡,軟體會記錄這一句從哪一個(哪一些)檔案的哪一(些)行來,因為翻完後也要把結果再放回去。人一般看不到這一行的內容,軟體才用得到。

#, 狀態。唯一跟翻譯有關(而翻譯可以改)的狀態是"fuzzy",模糊。如果有人覺得原文跟結果不太相當(因為原文有變,翻譯人不完全了解原文的意思等),他可以把這個記錄的狀態改成“模糊”,所以其他人會知道哪裡還要再看。

msgctxt 如果源語言為了表示不同意思使用同樣的詞,同樣的表現方式,我們可以有幾個同樣內容的msgid,但是經過msgctxt的說明告訴翻譯人員這一句要用在什麼環境,在什麼情況下,所以在目標語言可以選相當而不同的版本。

msgid 這裡終於有源語言的詞句。

msgid_plural 如果也想顯示源語言的復數格式,就會放到這裡。

msgstr 翻出來的,目標語言的版本會在這裡。

msgstr[0] 如果目標語言支援或需要復數,這個復數版本會在這裡。如果一個語言有幾種復數,我們另外也可以看到其它msgstr[n]的行。不過,因為華語沒有復數,我們一般用不到。

現在會怕,對不對?好復雜…… 別怕!不要忘記:專用的編輯軟體保證連電腦使用方面較弱的人(社會組……)不會“破掉”東西!人平常看不到每一行,專用的編輯軟體會處理,會給翻譯人員他們需要的,而不會讓他們弄壞東西。

例如,翻譯雖然(必須)看到源語言的詞句,但是完全沒有辦法改。可以改的只是目標語言的部分。這裡你不可能不小心刪掉源語言的句子,放心!談到亂改,你唯一能夠“亂改”的地方是目標語言,但是因為源語言一直還在,每個人能發現有問題,而能把狀態改成“fuzzy”,所以下一個懂目標語言的人知道他還要看哪裡。

你也不用擔心沒有(不會)翻完。專用的編輯軟體會馬上知道這個檔案包含多少個記錄,其中多少個已經翻好,多少個比較模糊等。所以,如果你想幫忙做一個軟體的本地化,但是沒有很多空或部分不太熟,你也可以翻你有辦法翻的部分,然後把檔案寄回去,讓下一個人繼續翻。(這裡有好一點的方法,改天會談。)

今天我先想談理論。我希望你會大概了解gettext可以為你(翻譯)做什麼。如果你真想了解,你就可能要用po檔做本地化。而如果你之前有做過其它非應用gettext軟體(Firefox擴充套件等)的本地化,你也會了解gettext對軟體國際化與本地化提供多大的貢獻。

gettext (2)的文章我會介紹專用的軟體,讓你了解什麼是“方便”……

2007-12-05

口譯的數字麻煩

口譯遇到數字的時候很容易會有一些麻煩。我們在溝通的過程中如果使用具體的數字,我們平常有必要用。假如我去買飲料,下面的會話有可能嗎?

“老板,我要一些真奶。“
”好。“
”老板,這樣多少?“
”很便宜,給我一些些錢就好。“

我想我應該沒有機會遇到這種情況…… 所以,如果我們講話用到數字,我們平常不會隨便做。所以,口譯也必須把那些數字傳到目標語言。數字不一定很好記,所以我平常會建議我的學生把它們記錄一下。為了這種筆記,口譯最好要在身上帶小筆記本。比較強的人還會有另外的方法:他們平常不需要做筆記,所以真需要的時候(電話號碼或其它數字)直接寫在手上。

有時候有人問口譯跟筆譯除了一個講話一個寫字之外還會有什麼區別。這裡有一個:口譯平常(請注意這個“平常“)不需要換算。意思是,如果源語言跟目標語言用的單位不同,口譯平常不需要把數值換算到其它單位。如果美國人說"With a full tank, this car can run 220 miles",口譯可以翻“加滿油,這台車可以跑220英里“,但是筆譯可能要寫"加滿油,這台車可以跑354公里"。

也許,目標語言的人會問口譯“那,220英里是大概多少公里”。那時候可以試試大概予計,但是因為口譯是人而不是電腦,平常沒有人會期待這種換算。不過,在台灣有一種換算一定要做:年份。

沒有離開過台灣這個小島的人可能還沒有發現,但是“外面"的世界不知道現在是民國哪一年,他們大部分根本不知道有人會要用這種算法。所以,如果一個台灣的總經理說“我們民國90年已經跟A公司合并”,我們可能在英語(或原則上任何一個其它的語言)要說“We merged with A company as early as 2001"。在台灣雖然有不少人很喜歡談“全球化”,“ISO”等,但是這個古董還在。

不過,真麻煩的是較大的數字。到千還沒有任何問題,但是如果到萬或更大的數字,口譯可能也要辛苦一點 ── 如果一個語言是華語、韓語或日語而另外的語言不是。原因是華人、韓國人跟日本人用一個(從西方人立場來看)比較“奇怪”的數法,每四位換一個名稱。

其它語言平常會每三位換一次,所以數字越大,口譯好像越辛苦。不過,情況也不一定那麼糟糕。我們先看一下兩邊怎麼數,用華語跟英語為例。在華語,最右邊(而最後聽到)的數字代表一,代表多少次有包含“一”這個數值。下一個代表十,然後百,然後千。

之後,我們會開始談到“萬” - 在第五、第六、第七跟第八位。不過,除了用“萬”,那些數字還會代表什麼?跟前四位一樣代表“一”、“十”、“百”跟“千”,只是現在它們代表“一萬”、“十萬”、“百萬”跟“千萬”。所以,在這裡我想把那些“一”、“十”、“百”跟“千”叫數字的“名”,而把“萬”、“億“、”兆“等當數字的”姓“。

這樣看,我們有一些家庭,姓”萬“、億”、“兆”(加上一個無姓的家)等,而每一個家有一樣的人:“一”、“十”、“百”、“千”。這樣看,一個數字不管多大,它變大其實一直會按照同樣的制度:超過一家的四個人的人數,就要開始談到另外一家,而每次再談到同樣的人,只是屬於不同家庭。

那,英語呢?首先,英語用的一些名稱其實不是來自英語。西方人用的大數字名稱好像要“怪”法國人。在1485年,Nikolas Chuquet想出這個制度:

103 = thousand
106 = Million
109 = thousand million
1012 = Billion
1015 = thousand billion

你可能覺得這種數法也比較奇怪,因為你沒有看過。其實,沒有人在用這個制度,因為後來Jaques Peletier du Mans有修改它:

103 = thousand
106 = Million
109 = Milliard
1012 = Billion
1015 = Billiard

你也沒有聽過"milliard"或"billiard"?那你除了英語可能沒有學過其它西方語言。以上的制度現在叫"long scale"。從語言數量的角度來看,它可能是這個行球上最流行的制度。英語以前也有用過這個制度,但是例如英國1974年換成"short scale",一個你應該有遇過的制度:

103 = thousand
106 = million
109 = billion
1012 = trillion
1015 = quadrillion

如果繼續用“家庭”的想法,上面的"thousand"、"million"、"billion"等是英語裡數字用的“姓”。不過,這裡每一家只有三個成員:"one"、"ten"、"hundred"。

理論先到這裡,我們開始應用吧。作口譯碰到數字的時候最好要把它們寫下,這我們已經談過。我們要寫的是單純的每一位的數值,不要任何“千”、"million"等。如果中間或後面”缺“一些零,我們也要寫。

像在英語要把5000念"five thousand"。五之後的數字不用念出,因為全部都是零。所以,我們必須知道"thousand"的後面還有三位,所以聽到"thousand"之後沒有聽到其它數字,我們就可能要加三個零。

一個比較麻煩的地方是華語跟英語針對零的不同處理方法。在上面的“5000”的例子,兩個語言一樣,但是如果數字是“5500”,在華語很多人習慣把它念“五千五”,沒有“百”。而且,在英語不用念中間的零。像“5005”變成"five thousand five"。如果我們比較華語的“五千五”跟英語的"five thousand five",我們發現它們詞方面一某一樣,但是它們代表的數字並不是。小心……

那,這樣談,我們如果寫下較大的數字好像要寫一個很長的數字。這樣之後要怎麼知道怎麼念?有方法。在西方語言根本已經有習慣在較大的數字中間加符號“分組”。我們那時候要分的是我上面提到的“家庭”。所以,文件裡面我們平常看到的是123,456,789而不是123456789。在英語,標準符號是逗號,其它語言可能用別的符號。

那些符號的位子剛好在我們念數字的時候會念一家數字的“姓”。在上面的例子,第一個符號代表“million”,第二個代表“thousand”。華語好像沒有這種習慣。不過,我們最好也要分組。因為英語的符號已經在下面,華語的符號最好要寫上面,而且那個符號也要放在我們念“姓”的地方。所以,上面的數字在華語聽到寫下會變成1'2345'6789。這裡,第一個符號代表“億”,第二個代表“萬”。

現在我們終於要動手:不管我們聽到哪一種語言,我們寫下數字,然後在那個語言會念數字的”姓“的地方加符號 - 西方語言的話加在下面,聽到東方語言的時候加在上面。然後,寫完數字之後,我們會再加上目標語言的符號。所以,不管我們從什麼語言翻到什麼語言,如果是東方語言跟西方語言之間,上面當例子的數字會變成這樣:

1'23,45'6,789

現在我們可以用目標語言,較容易把數字念出來 - 過關了!

2007-12-04

It always comes as a surprise

I can't be cool, or nonchalant
Call me an impulsive fool, you're all I want
You may be right, it's too much too soon
To talk of love all night in your bedroom

I don't know why it always comes as a surprise
To find I'm here with you
You smile, and I am rubbing my eyes
At a dream come true

I won't play games or waste your time
But I won't feel ashamed to speak my mind
So just relax, don't question why
For calculated facts will not apply

I don't know why it always comes as a surprise
To find I'm here with you
You smile, and I am rubbing my eyes
At a dream come true

In my life, there've been few
Who affected me the way you do (you do)
You do (you do)

I'll tell no lies, I won't pretend
But if you've got a broken heart, I'll help it mend

I don't know why it always comes as a surprise
To find I'm here with you
You smile, and I am rubbing my eyes
At a dream come true
Smile, and I am rubbing my eyes
At a dream come true