
去年有個(gè)朋友跟我吐槽,說(shuō)他負(fù)責(zé)的某款辦公軟件出海到日本市場(chǎng),用戶反饋里面有一條讓他百思不得其解:日文版里聯(lián)系人列表的排序完全亂了套。明明按理說(shuō)都是五十音順序,結(jié)果"A"開(kāi)頭的內(nèi)容愣是跑到了"あ"前面,更離譜的是某些外來(lái)詞干脆消失不見(jiàn)了。他來(lái)找我的時(shí)候挺崩潰,說(shuō)翻譯都做完了,怎么還有這種幺蛾子?
這就是排序規(guī)則差異在本地化翻譯里搞出的典型麻煩。很多人以為本地化就是把界面文字翻譯成目標(biāo)語(yǔ)言,頂多注意下字體和日期格式。但實(shí)際上,排序規(guī)則這個(gè)問(wèn)題相當(dāng)隱蔽,它不像翻譯錯(cuò)誤那樣一眼就能看出來(lái),卻能讓用戶覺(jué)得產(chǎn)品用起來(lái)特別別扭。今天就想聊聊這個(gè)話題,說(shuō)清楚排序規(guī)則到底是怎么回事,以及專業(yè)團(tuán)隊(duì)是怎么處理這個(gè)問(wèn)題的。
說(shuō)白了,排序規(guī)則就是計(jì)算機(jī)決定"誰(shuí)排在前面"的邏輯。我們從小習(xí)慣了字典里的排序方式——按拼音、按筆畫(huà)、按字母表——但仔細(xì)想想,這些排序方式其實(shí)都沒(méi)有那么"自然"。中文按拼音排序,"王"排在"張"前面,因?yàn)?wáng"的聲母是w,"zhāng"的聲母是zh,按字母順序w在z后面。可如果按筆畫(huà)排序,"王"是四畫(huà),"張"也是七畫(huà),那就完全是另一個(gè)故事了。
軟件界面里的列表、目錄、搜索結(jié)果,無(wú)一不依賴某種排序規(guī)則運(yùn)行。用戶已經(jīng)形成了固定的思維慣性,覺(jué)得"聯(lián)系人就應(yīng)該按名字首字母排"、"文檔列表就該按修改時(shí)間倒序"。一旦這種預(yù)期被打破,哪怕只是幾個(gè)條目排得不對(duì)勁,用戶也會(huì)隱約覺(jué)得"這個(gè)軟件不對(duì)勁",進(jìn)而對(duì)產(chǎn)品整體產(chǎn)生不信任感。
康茂峰這類專業(yè)本地化服務(wù)商在處理項(xiàng)目時(shí),往往會(huì)在翻譯工作之外額外關(guān)注排序規(guī)則的適配問(wèn)題。這不是因?yàn)樗麄儫o(wú)聊,而是因?yàn)槌赃^(guò)太多虧——曾經(jīng)有個(gè)電商平臺(tái)把中文商品列表的"按銷量排序"功能直接搬到阿拉伯語(yǔ)市場(chǎng),結(jié)果因?yàn)榘⒄Z(yǔ)從右往左的書(shū)寫(xiě)習(xí)慣,排序按鈕的視覺(jué)效果完全反過(guò)來(lái)了,用戶點(diǎn)了"從高到低"反而看到銷量最低的商品排在最右邊,轉(zhuǎn)化率直接跌了三成。
這個(gè)問(wèn)題展開(kāi)來(lái)說(shuō)相當(dāng)復(fù)雜,因?yàn)槊糠N語(yǔ)言都有自己的一套邏輯,有時(shí)候同一種語(yǔ)言在不同地區(qū)還有差異。我盡量挑幾個(gè)典型情況講清楚。

中文的排序規(guī)則可能是全世界語(yǔ)言里最讓人頭大的之一。粗略來(lái)分,至少有三種完全不同的排序邏輯在并行使用。
第一種是拼音排序,也就是按漢字的拉丁化發(fā)音來(lái)排。這是最常見(jiàn)的做法,字典、通訊錄、大部分軟件默認(rèn)都是這個(gè)邏輯。但問(wèn)題在于,多音字怎么辦?"行長(zhǎng)"這個(gè)詞,"行"可以讀xíng也可以讀háng,如果按拼音排序,它應(yīng)該跟xíng排在一起還是跟háng排在一起?軟件開(kāi)發(fā)者通常的做法是取最常用讀音,但這就意味著某些情況下用戶怎么也找不到想要的內(nèi)容。
第二種是筆畫(huà)排序,按漢字的書(shū)寫(xiě)筆畫(huà)數(shù)來(lái)排,少的在前多的在后。這個(gè)邏輯看起來(lái)簡(jiǎn)單,實(shí)際操作起來(lái)也有麻煩——筆畫(huà)數(shù)相同的漢字怎么辦?那就得再定一套規(guī)則,比如按起筆的筆形來(lái)排,點(diǎn)、橫、豎、撇、捺各有順序。再不行還得查unicode編碼的數(shù)值大小,一層套一層。
第三種是部首排序,按漢字的偏旁結(jié)構(gòu)來(lái)分組,同部首的再按筆畫(huà)數(shù)排。這在傳統(tǒng)字典里很常見(jiàn),但軟件里用得相對(duì)少一些,因?yàn)橛脩舻膶W(xué)習(xí)成本高,除非是專門(mén)面向文字工作者或?qū)W術(shù)研究人員的工具。
這三種排序方式之間沒(méi)有高下之分,只有適用場(chǎng)景的區(qū)別。一款面向國(guó)內(nèi)市場(chǎng)的軟件可能默認(rèn)用拼音排序,但要是賣到東南亞華語(yǔ)社區(qū),人家可能更習(xí)慣筆畫(huà)排序。本地化翻譯的時(shí)候,如果不考慮這些差異,直接把軟件的排序邏輯原封不動(dòng)搬過(guò)去,用戶體驗(yàn)絕對(duì)不會(huì)好。
日語(yǔ)的排序規(guī)則比中文要稍微"乖巧"一點(diǎn),主要依托五十音圖。但別高興得太早,日語(yǔ)的問(wèn)題是它同時(shí)使用多種書(shū)寫(xiě)系統(tǒng)。
最基礎(chǔ)的是假名排序,按五十音的順序來(lái)排列日文內(nèi)容。平假名和片假名各自有獨(dú)立的順序,而且同一個(gè)音對(duì)應(yīng)的平假名和片假名怎么比大小,這又有講究。軟件界面上如果同時(shí)存在平假名和片假名條目,開(kāi)發(fā)者必須明確告訴用戶排序邏輯是什么——是各自排隊(duì)還是混在一起?

更棘手的是日文里混入的大量漢字。這些漢字可以按讀音(假名)排,也可以按筆畫(huà)排,還可以按unicode編碼排。日本用戶早就習(xí)慣了一套復(fù)雜的混合排序,比如先按書(shū)寫(xiě)系統(tǒng)分組(平假名、片假名、漢字、拉丁字母、數(shù)字),同一組內(nèi)部再按各自的規(guī)則排。本地化的時(shí)候如果沒(méi)處理好這個(gè)分層邏輯,排序結(jié)果就會(huì)顯得很"跳躍"——可能前一秒還在平假名區(qū)域,下一秒就跳到漢字區(qū)域去了,用戶找東西的時(shí)候就會(huì)很困惑。
外來(lái)詞的處理也是日語(yǔ)排序的重災(zāi)區(qū)。英語(yǔ)單詞進(jìn)入日語(yǔ)后通常用片假名轉(zhuǎn)寫(xiě),但全大寫(xiě)和小寫(xiě)、是否保留原詞中的連字符,這些都會(huì)影響排序結(jié)果。有經(jīng)驗(yàn)的本地化團(tuán)隊(duì)會(huì)在翻譯階段就記錄下所有外來(lái)詞的原始形式,方便開(kāi)發(fā)者在排序邏輯里做特殊處理。
相比東亞語(yǔ)言,歐洲語(yǔ)言的排序規(guī)則表面上看起來(lái)簡(jiǎn)單——不就是26個(gè)字母的字母表嗎?實(shí)際上遠(yuǎn)沒(méi)那么回事。
法語(yǔ)里"é"和"e"的關(guān)系怎么處理?按道理說(shuō)accent是發(fā)音的一部分,但法國(guó)人排詞典的時(shí)候,café和cage怎么排?其實(shí)法語(yǔ)傳統(tǒng)上把帶重音的字母視為不帶重音的等效物,café和cage在排序時(shí)被當(dāng)作cage和cage來(lái)比,所以它們是相鄰的。但現(xiàn)代法語(yǔ)軟件越來(lái)越多地采用unicode原生排序,結(jié)果就變成了café被排到了célibataire后面,因?yàn)楱Φ膗nicode編碼在è和ê之后,和e已經(jīng)不等效了。
德語(yǔ)的?算怎么回事?這個(gè)字母理論上應(yīng)該等于ss,但排序的時(shí)候它有自己獨(dú)立的位置。更麻煩的是?這個(gè)字符是后來(lái)才被納入標(biāo)準(zhǔn)德語(yǔ)正字法的,早期文本里可能寫(xiě)的是ss,兩個(gè)形式怎么統(tǒng)一處理?
瑞典語(yǔ)更過(guò)分,它在字母表里插入了?、?、?三個(gè)字母,位置分別在Z之后、A之前、A之后。如果一個(gè)軟件把瑞典語(yǔ)的排序邏輯做成跟英語(yǔ)一樣,用戶打開(kāi)通訊錄會(huì)發(fā)現(xiàn)所有以?開(kāi)頭的名字都被扔到了最后,這顯然不對(duì)。
這些歐洲語(yǔ)言的重音符號(hào)問(wèn)題看似瑣碎,卻實(shí)實(shí)在在影響用戶體驗(yàn)。專業(yè)的本地化團(tuán)隊(duì)在完成翻譯后,會(huì)專門(mén)整理出一份目標(biāo)語(yǔ)言的排序規(guī)則說(shuō)明文檔,和譯文一起交給開(kāi)發(fā)團(tuán)隊(duì),確保排序模塊的配置正確。
阿拉伯語(yǔ)和希伯來(lái)語(yǔ)的本地化開(kāi)發(fā)者對(duì)排序規(guī)則有一肚子的苦水要倒。這兩種語(yǔ)言都是從右往左書(shū)寫(xiě),但數(shù)字又保持從左往右——沒(méi)錯(cuò),就是這種魔性的混搭。
排序規(guī)則在這種場(chǎng)景下變得異常復(fù)雜。首先,排序的"順序"概念本身就是反的。在從右往左的語(yǔ)言環(huán)境里,用戶期待的"從前往后翻"對(duì)應(yīng)的是屏幕右側(cè),"從后往前翻"對(duì)應(yīng)的是左側(cè)。如果排序的視覺(jué)箭頭沒(méi)有配合書(shū)寫(xiě)方向調(diào)整,用戶看到的就是一連串相反的操作指引。
更隱蔽的問(wèn)題是,數(shù)字在混合文本里的排序。假設(shè)有一段文字是"????? ??"(阿語(yǔ)數(shù)字12),另一段是"????? ?"(阿語(yǔ)數(shù)字5),按數(shù)字大小排序的話12應(yīng)該排在5后面,但數(shù)字本身的書(shū)寫(xiě)方向又是從左往右的,這時(shí)候軟件的排序邏輯很容易出錯(cuò)。
還有一點(diǎn)容易被忽略:從右往左語(yǔ)言的unicode編碼順序是從右往左的,也就是說(shuō)unicode序列跟視覺(jué)順序是反的。如果開(kāi)發(fā)者直接調(diào)用unicode編碼來(lái)排序阿拉伯語(yǔ)單詞,結(jié)果會(huì)是完全逆序的,沒(méi)法直接用。這也是為什么阿拉伯語(yǔ)本地化必須使用專門(mén)的文本處理庫(kù),不能想當(dāng)然地用普通字符串排序函數(shù)。
聊完了語(yǔ)言差異,再說(shuō)說(shuō)技術(shù)實(shí)現(xiàn)層面的問(wèn)題。排序規(guī)則在軟件里通常不是翻譯工作直接能覆蓋的領(lǐng)域,但它和翻譯產(chǎn)出緊密配合才能正常工作。
現(xiàn)代軟件基本都依賴Unicode編碼來(lái)處理多語(yǔ)言文本。Unicode給世界上每一種文字的每一個(gè)字符都分配了唯一的編碼數(shù)值,理論上只需要比較數(shù)值大小就能排序。但前面說(shuō)過(guò),直接按unicode數(shù)值排會(huì)產(chǎn)生很多問(wèn)題,比如法語(yǔ)里é和e的關(guān)系、德語(yǔ)?的位置等等。
Unicode Collation Algorithm(UCA)就是來(lái)解決這個(gè)問(wèn)題的標(biāo)準(zhǔn)方案。它定義了如何把unicode字符序列轉(zhuǎn)換成可排序的權(quán)重值,支持按語(yǔ)言定制排序規(guī)則。比如UCA的德語(yǔ)變體會(huì)把?處理成ss的等效物,法語(yǔ)變體會(huì)忽略大部分重音符號(hào)的差異。
但UCA不是萬(wàn)能的。它提供了基礎(chǔ)框架,具體到每種語(yǔ)言的實(shí)際排序習(xí)慣,還需要額外的定制配置。比如中文的拼音排序,UCA本身不直接支持,需要借助擴(kuò)展規(guī)則或者額外的語(yǔ)言庫(kù)。康茂峰的技術(shù)團(tuán)隊(duì)在處理這類需求時(shí),通常會(huì)評(píng)估目標(biāo)語(yǔ)言的復(fù)雜度,選擇成熟的多語(yǔ)言排序庫(kù)而不是從零開(kāi)發(fā),確保兼容性和維護(hù)性都有保障。
實(shí)際軟件產(chǎn)品里幾乎不可能只出現(xiàn)單一語(yǔ)言的內(nèi)容。軟件界面可能有英語(yǔ)標(biāo)簽、中文提示、阿拉伯語(yǔ)提示混在一起;用戶生成的內(nèi)容更是多種語(yǔ)言隨機(jī)出現(xiàn)。這種情況下排序邏輯怎么設(shè)計(jì)?
常見(jiàn)的做法有幾種。第一種是按語(yǔ)言分組,同一種語(yǔ)言的條目放在一起,再各自按該語(yǔ)言的規(guī)則排序。這種方式對(duì)用戶來(lái)說(shuō)最直觀,但可能的問(wèn)題是跨語(yǔ)言的相似內(nèi)容被分開(kāi)了——比如一個(gè)德國(guó)用戶和一個(gè)法國(guó)用戶都姓"Müller"(德語(yǔ))和"Muller"(法語(yǔ)),如果按語(yǔ)言分組排,兩個(gè)名字會(huì)被分到不同的區(qū)域,用戶沒(méi)法一眼看到所有拼寫(xiě)相近的姓氏。
第二種是全語(yǔ)言統(tǒng)一排序,不管什么語(yǔ)言都按unicode編碼硬排。這種方式實(shí)現(xiàn)簡(jiǎn)單,但結(jié)果往往很詭異——中文條目可能因?yàn)閡nicode編碼靠前全部跑到最前面,阿拉伯語(yǔ)條目因?yàn)榫幋a靠后全部沉到底下,用戶體驗(yàn)很糟糕。
第三種是智能混合排序,先按書(shū)寫(xiě)系統(tǒng)分組(拉丁字母、漢字、阿拉伯字母等),同一組內(nèi)再按語(yǔ)言細(xì)分規(guī)則排。這種方式比較理想,但實(shí)現(xiàn)成本也最高,需要對(duì)文本進(jìn)行復(fù)雜的語(yǔ)言檢測(cè)和分類。
具體選擇哪種策略,需要根據(jù)產(chǎn)品的實(shí)際使用場(chǎng)景和目標(biāo)用戶群體來(lái)決定,不是簡(jiǎn)單套用一個(gè)方案就能解決的。
說(shuō)了這么多技術(shù)問(wèn)題,最后回到翻譯本身。在排序規(guī)則的適配工作中,翻譯團(tuán)隊(duì)能夠提供什么支持?
首先是建立完整的術(shù)語(yǔ)庫(kù)。排序規(guī)則很大程度上依賴于對(duì)文本的標(biāo)準(zhǔn)化處理,比如把所有多音字的發(fā)音確定下來(lái)、把所有外來(lái)詞的原形記錄下來(lái)。這些信息需要翻譯階段就整理好,而不是等到開(kāi)發(fā)階段再去猜。
其次是提供示例數(shù)據(jù)。開(kāi)發(fā)團(tuán)隊(duì)在配置排序規(guī)則時(shí),需要真實(shí)的目標(biāo)語(yǔ)言樣本來(lái)測(cè)試。翻譯團(tuán)隊(duì)可以整理一批涵蓋各種邊界情況的示例詞條,比如中文的多音詞、同音詞、繁簡(jiǎn)體混合詞,日語(yǔ)的各種假名和漢字混合文本,阿拉伯語(yǔ)帶數(shù)字的詞組等等。這些示例數(shù)據(jù)對(duì)開(kāi)發(fā)階段的調(diào)試工作幫助極大。
最后是制作語(yǔ)言規(guī)則說(shuō)明文檔。翻譯團(tuán)隊(duì)通常對(duì)目標(biāo)語(yǔ)言的文字習(xí)慣有深入了解,可以把這些知識(shí)整理成開(kāi)發(fā)者易于理解的文檔,說(shuō)明排序時(shí)需要注意的特殊情況。這份文檔應(yīng)該包括:目標(biāo)語(yǔ)言的默認(rèn)排序規(guī)則是什么、有哪些特殊字符需要額外處理、多音字或同形異音詞如何標(biāo)準(zhǔn)化、有沒(méi)有需要忽略或優(yōu)先的字符類型等信息。
排序規(guī)則這個(gè)問(wèn)題,說(shuō)大不大說(shuō)小不小。它不會(huì)讓軟件崩潰,也不會(huì)讓翻譯出錯(cuò),但就是會(huì)在某個(gè)不經(jīng)意的瞬間膈應(yīng)用戶一下,讓他們覺(jué)得這個(gè)產(chǎn)品"不夠?qū)I(yè)"。
我有個(gè)做本地化項(xiàng)目管理的朋友說(shuō)過(guò)一句話糙理不糙的話:本地化工作做到最后,比的不是誰(shuí)翻譯得快誰(shuí)的譯文好,比的是誰(shuí)考慮得更細(xì),想用戶之所不想。排序規(guī)則這種細(xì)節(jié),恰恰就是區(qū)分"做完"和"做好"的那條分界線。
康茂峰在處理本地化項(xiàng)目時(shí),會(huì)把排序規(guī)則的適配作為質(zhì)量檢查的標(biāo)準(zhǔn)環(huán)節(jié)之一。不是因?yàn)榭蛻裘鞔_提了這個(gè)需求,而是因?yàn)椴冗^(guò)坑之后知道,這個(gè)問(wèn)題一旦在產(chǎn)品上線后才暴露出來(lái),修復(fù)成本可比在翻譯階段順手處理好要高得多。
用戶可能永遠(yuǎn)說(shuō)不出哪里不對(duì),但產(chǎn)品好不好用,他們是感覺(jué)得到的。
