IT產(chǎn)品的國際化,絕不是“支持英文”就足夠

10 評(píng)論 6645 瀏覽 37 收藏 12 分鐘
🔗 B端产品经理需要进行售前演示、方案定制、合同签订等,而C端产品经理需要进行活动策划、内容运营、用户激励等

編輯導(dǎo)語:TI產(chǎn)品的國際化是一大趨勢,但是在轉(zhuǎn)向國際化的過程中,往往會(huì)出現(xiàn)不少的問題,導(dǎo)致走了一些歪路。本文作者總結(jié)了自己做IT產(chǎn)品國際化的經(jīng)驗(yàn),對(duì)“國際化”和“支持英文”這兩個(gè)完全不同的概念進(jìn)行了區(qū)分,并且列舉了一些例子,希望看后能夠?qū)δ阌兴鶈l(fā)。

幾年前在紐倫堡見了個(gè)朋友,吃飯間問起他太太在德國做什么,答曰“國際化”,細(xì)問之下,才發(fā)現(xiàn)光是“中文化”就有一整個(gè)團(tuán)隊(duì)。這個(gè)消息讓我挺吃驚,按照我們之前的理解,“國際化”主要就是要配備好對(duì)應(yīng)的資源文件,針對(duì)不同語言的客戶,顯示不同的語言即可。

按照這種思路,“國際化”里最重要的就是要把所有的文字都抽離出來作為可配置資源,千萬不要寫死??梢哉f,一旦你的產(chǎn)品可以同時(shí)支持中英兩種語言,就邁過了國際化最大的障礙。增加其它語言的支持,就像“多來個(gè)人吃飯,無非多添一雙筷子”。

這幾年自己開始做IT產(chǎn)品的國際化,才深深感覺到,“國際化”和“支持英文”之間相差了十萬八千里,甚至可以說,兩者完全是風(fēng)馬牛的關(guān)系。如果你覺得無法想象,看完下面這些例子就會(huì)明白。

一、例子一:文字

文字大概是許多人提到“國際化”時(shí)最早想到,也唯一能想到的因素了。

沒錯(cuò),國際化的第一步就是要支持多種文字的顯示。業(yè)界通常的辦法是做一份資源文件,包含了各種語言的統(tǒng)一映射。在需要顯示的時(shí)候,直接在資源文件里檢索對(duì)應(yīng)語言的資源,就可以得到對(duì)應(yīng)的文字。

資源文件的結(jié)構(gòu)類似下面這樣:

IT產(chǎn)品的國際化,絕不是“支持英文”就足夠

這種辦法有問題嗎?看起來很直觀,沒問題對(duì)吧?

其實(shí)有問題,問題不在文字的內(nèi)容,而在文本的長度。大部分情況下,中文和對(duì)應(yīng)英文的文本長度是差不多的,所以顯示時(shí)占據(jù)的空間差不多,并不會(huì)影響原有的UI元素。但是有些時(shí)候,中文和英文的長度相差很大,在一些緊密排版的情況下,顯示就會(huì)有問題。

IT產(chǎn)品的國際化,絕不是“支持英文”就足夠

這還不是最麻煩的。如果長度不夠,可以在空格處換行,一般都還可以應(yīng)付,只是高度會(huì)變化。但是對(duì)于其它語言,比如德語,情況就復(fù)雜多了。德語經(jīng)常會(huì)把不同的單詞拼起來,排版時(shí)如果沒有考慮,最終的效果可能特別糟糕。

比如“新天鵝堡”的德文是Neueswanstein,直接替換的話就會(huì)是下面的樣子:

IT產(chǎn)品的國際化,絕不是“支持英文”就足夠

Neueswanstein的長度在德語里其實(shí)不算什么,隨便可以找到更長的,比如下面這個(gè)(不要怕,其實(shí)它的意思只是數(shù)字1532而已):Eintausendfünfhundertzweiunddrei?ig。

所以,如果你只翻譯文字,不在UI布局上考慮,就可能吃大虧。如今流行“出?!埃以诘聡吹搅瞬簧賴鴥?nèi)的電子產(chǎn)品也提供了德文界面,但是實(shí)話說,不少界面堪稱慘不忍睹。

文字方面的問題,除了顯示,查找也會(huì)有問題。英語之外的語言,尤其是歐洲國家的語言,經(jīng)常會(huì)有一些字母看起來有特殊符號(hào)。比如德語中的ü、ü、?、?、?、?(上面的兩點(diǎn)叫Umlaut)。

我們以ü來舉例,看起來它“應(yīng)該是一個(gè)字母”,確實(shí)對(duì)應(yīng)鍵盤上的一個(gè)鍵,而且在Unicode規(guī)范中也確實(shí)分配了對(duì)應(yīng)的Code Point(U+00DC)。那么,如果你在“查找”框里輸入ü,能找到所有出現(xiàn)的ü嗎?

答案是:也許能,也許不能。

什么情況下不能呢?因?yàn)閁nicode規(guī)范中還有許多特殊字符,比如U+0308,這個(gè)字符叫COMBINING DIAERESIS,說白了就是那“兩點(diǎn)”。它可以和元音字母結(jié)合,顯示為一個(gè)字符。

所以你看到一模一樣的ü,既可能是U+00DC,也可能是U+0055 U+0308(U+0055就是大寫的U)。如果開發(fā)軟件時(shí)不考慮這一點(diǎn),就可能被用戶痛罵:明明看到文本里有ü,在搜索框里怎么也搜不到,這是什么破軟件!

二、例子二:時(shí)間

中國的時(shí)區(qū)是非常規(guī)整的,全國統(tǒng)一用北京時(shí)間,所以對(duì)許多程序員來說,時(shí)間“天然”就是統(tǒng)一的,簡單的。如果要換到其它時(shí)區(qū),那也只是增減幾個(gè)小時(shí),多算一個(gè)偏移量就可以。

比如德國使用的是柏林時(shí)間,柏林時(shí)間目前和北京時(shí)間相差6小時(shí),那么如果要在系統(tǒng)里支持柏林時(shí)間,每次存取的時(shí)候都“以北京時(shí)間-6小時(shí)”即可。北京時(shí)間早上6點(diǎn),柏林時(shí)間0點(diǎn);北京時(shí)間下午3點(diǎn),柏林時(shí)間早上9點(diǎn)……

這樣就足夠了嗎?顯然不是。

要知道,許多國家都有“夏令時(shí)”的規(guī)定(其實(shí)中國以前也有)。也就是說,在一年中的不同時(shí)段,柏林時(shí)間和北京時(shí)間的差距是會(huì)變化的。有時(shí)候是7小時(shí)(冬令時(shí)),有時(shí)候是6小時(shí)(夏令時(shí))!

而且,冬令時(shí)和夏令時(shí)的切換日期并不固定。冬令時(shí)是每年10月的最后一個(gè)周日,凌晨3時(shí)將時(shí)鐘撥回去1小時(shí);夏令時(shí)是每年3月的最后一個(gè)周日,凌晨2時(shí)將始終撥快1小時(shí)。

如果自己寫程序處理這種變化,估計(jì)要煩死,還不一定能保證正確。

所以不少系統(tǒng)都內(nèi)置了“時(shí)區(qū)”的設(shè)置和相關(guān)函數(shù),自動(dòng)幫用戶換算時(shí)間。可惜,有不少程序員似乎不理解為何“時(shí)區(qū)”的設(shè)置很重要,還是習(xí)慣自己算偏移值,這可真是不折不扣的“拿金飯碗要飯”。

如果你仔細(xì)觀察上面的例子,還會(huì)發(fā)現(xiàn)一個(gè)問題:在某些系統(tǒng)里,時(shí)間不是連續(xù)的。

比如在冬令時(shí)切換夏令時(shí)的那一刻,其實(shí)有個(gè)空缺,也就是“不存在的一小時(shí)”。具體到今年(2021年),柏林時(shí)間的3月28日,凌晨02:00:00到02:59:59,都是不存在的。所以,盡管2021-03-28 02:30:21看起來是一個(gè)完全正常的時(shí)刻,但是如果時(shí)區(qū)選擇了柏林時(shí)間,它就是非法的。

這種情況不只在德國存在,其實(shí)廣泛存在著。如果你留意的話,各種語言里都有對(duì)應(yīng)的說明。

IT產(chǎn)品的國際化,絕不是“支持英文”就足夠

三、例子三:標(biāo)點(diǎn)

許多開發(fā)人員都知道,系統(tǒng)里有個(gè)重要的變量叫l(wèi)ocale,它代表了與本地化有關(guān)的一組設(shè)置。

最常見的,比如中日韓文字中有許多“看起來一樣”的文字,其實(shí)有細(xì)微差別。但是,為了節(jié)省Unicode中的空間,給它們指定了同樣的Code Point,顯示的時(shí)候就靠locale來區(qū)分。

IT產(chǎn)品的國際化,絕不是“支持英文”就足夠

但是locale的作用不止于此。同樣的標(biāo)點(diǎn)符號(hào),在不同的語言中,作用也是不同的。

比如半角逗號(hào)“,”,在英文里表示逗號(hào),但是在德語和法語里,它表示小數(shù)點(diǎn),所以3.14在德語里應(yīng)當(dāng)寫作3,14,而7.99在德語里應(yīng)當(dāng)寫作7,99。如果你仍然用半角逗號(hào)來切分句子,多半要碰得頭破血流。

相反,如果你懂得locale,能從系統(tǒng)變量里讀取line.separator作為分隔符,就省去了這種煩惱。

IT產(chǎn)品的國際化,絕不是“支持英文”就足夠

更讓人意想不到的是,常見的CSV文件,也就是“逗號(hào)分隔值文件Comma Separated Value”,在德國也會(huì)有完全不一樣的規(guī)定。

因?yàn)榈抡Z里comma是小數(shù)點(diǎn),所以即便CSV叫“逗號(hào)分隔值”,它也不能用逗號(hào)(comma)來分隔,而應(yīng)當(dāng)用分號(hào)(semicolon)來分隔。

IT產(chǎn)品的國際化,絕不是“支持英文”就足夠

所以,如果你的CSV處理程序本來跑得好好的,忽然報(bào)了一大堆錯(cuò),沒準(zhǔn)就是這里出的問題。

不要為這一點(diǎn)“意想不到”吃驚,還有更加“意想不到”的情況:Excel的函數(shù)里,我們會(huì)用逗號(hào)來分隔多個(gè)參數(shù),但是在德語版Excel里,逗號(hào)必須替換為分號(hào),否則一定會(huì)報(bào)錯(cuò)。

IT產(chǎn)品的國際化,絕不是“支持英文”就足夠

上面這些例子,說穿了平淡無奇,但沒有說穿的時(shí)候,往往讓人絞盡腦汁,所以不要問我怎么知道的,這是血淚的教訓(xùn)。

也恰恰是在積累了許多血淚教訓(xùn)之后,我才發(fā)現(xiàn),微軟的國際化真的做得很好,各種情況都考慮到了,甚至可以說是業(yè)界的翹楚——不過,那估計(jì)也是積累了無數(shù)血淚教訓(xùn)的結(jié)果吧。

 

作者:余晟;公眾號(hào):余晟以為(ID:yurii-says)

原文鏈接:https://mp.weixin.qq.com/s/ExkdJuc6zJchtXpYX7Q1Eg

本文由 @余晟以為 授權(quán)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 那產(chǎn)品層面要如何做呢

    來自廣東 回復(fù)
  2. 所以還是表層語言的問題嘛

    來自廣東 回復(fù)
  3. 所以解決方案是什么呢

    來自山東 回復(fù)
  4. 所以解決方案是什么呢

    來自山東 回復(fù)
  5. – -!,這不過就是些明面上的規(guī)范吧了,和產(chǎn)品有啥關(guān)系?就拿最基本的時(shí)區(qū)舉例子,沒有程序員會(huì)去自己寫邏輯,有組件不可能自己寫,還有什么字符長短就更不用說一個(gè)響應(yīng)式就搞定了。你說你說說中西方的一些操作習(xí)慣或者畫像的差異還行,,,,

    來自浙江 回復(fù)
    1. 這個(gè)響應(yīng)式是什么意思啊 ?大佬能幫忙回答一下嗎 正好在做德國的產(chǎn)品。。。

      來自山東 回復(fù)
  6. 這不還是語言么 還以為講產(chǎn)品層面

    回復(fù)
    1. 你做產(chǎn)品設(shè)計(jì)時(shí)候不考慮么?

      來自江蘇 回復(fù)
  7. ??

    回復(fù)
  8. 這就可以了?

    回復(fù)
专题
16426人已学习13篇文章
本专题的文章分享了基础功能的实现原理和设计理解。
专题
31072人已学习11篇文章
来看看别人家是怎么做产品优化的。
专题
12685人已学习13篇文章
通过仪表盘,用户可以查看并分析产品的数据和图表,还可以通过控件来控制数据的显示、过滤等功能。本专题的文章分享了仪表盘设计指南。
专题
12874人已学习12篇文章
OTA,在线旅游(Online Travel Agency)指“旅游消费者通过网络向旅游服务提供商预定旅游产品或服务,并通过网上支付或者线下付费。
专题
45396人已学习10篇文章
什么是社群运营?社群运营怎么做?社群运营哪些坑?
专题
29423人已学习16篇文章
系统如何恰当、清晰、及时地传达给用户操作的结果或者操作对象状态的变更?本专题的文章提供了有效的页面操作反馈设计指南。