每天,人們登錄Braze平台向用戶發送高度個性化和相關的信息。Braze的客戶遍布七大洲中的六manbetx万博全站客户端大洲,這些公司的營銷、增長和參與團隊成員說著你能想象到的每一種語言。因此,為了更好地服務於我們現在和未來的用戶,Braze在2020年推出了一項計劃,專注於我們的產品國際化,也就是說,設計和開發Braze平台,以消除在全球有效部署的障礙。
其核心是國際化——通常被表述為“i18n因為在“i”和結尾的“n”之間有18個字符——這不是最終結果,而是一種工作方式。在一個產品經過i18n之後,它可能在表麵上看起來沒有任何不同,但它通常在內部發生了徹底的變化,以允許它在更廣泛的地區發揮作用。另一方麵,本地化(出於類似的原因昵稱為“l10n”)要求軟件提供商采用國際化的產品,並允許對其進行翻譯、格式化和配置,以便特定語言環境中的用戶可以輕鬆地利用它。這通常涉及到一個地區當地語言的文本翻譯和日期格式等表格元素,但也可能需要細微的變化,如貨幣翻譯、處理鍵盤輸入、數字格式或字母排序。一般來說,i18n使您可以在不需要大量額外工程工作的情況下多次執行l10n。
在Braze,成功地將我們的產品國際化是公司範圍內的一項舉措,需要在我們的許多表麵進行更新,從Braze.com對於我們的教學視頻來說,其中最重要的部分就是與我們的核心相關的工作SaaS產品。讓我們來看看這是如何發生的,以及我們是如何做到的。
I18n at Braze:主要挑戰
國際化帶來的困難很大程度上受到您目前所創建的產品的影響。經過近10年的平台建設,我們發現我們所做的一些決定可能會使我們的國際化努力複雜化。在代碼庫中將字符串硬編碼為英語,假設美式日期格式,以及其他隻有在假設Braze隻被美國境內說英語的人使用的情況下才有意義的決定。
解決這些問題是艱巨的。首先,我們需要分析代碼庫中的每一行代碼,以確定它們是否必須作為i18n工作的一部分進行調整。另一方麵,在我們的技術組織中負責這個計劃的內部團隊仍然處於人員補充的過程中。就我個人而言,我認為與項目相關的QA是一場噩夢——畢竟,如何檢查每一個字符串以確保它看起來仍然不錯,並且我們的所有功能在國際化之後都能正常工作?
話雖如此,也不全是厄運和憂鬱。我們很快意識到,我們並不是第一家為了成功地實現產品國際化而不得不解決重大技術債務的SaaS公司,這意味著我們有豐富的資源(例如。Slack分享了本地化的經驗)和框架(例如i18next)供參考。在招聘方麵,我們也很幸運:我們的一些戰略性招聘人員之前曾從事過這種複雜的工作,並能夠將這種經驗應用到我們的項目中。最後,我們剛剛宣布與日本Cloud to成立合資企業在東京開了一家Braze辦事處.這讓我們有機會接觸到Japan Cloud的個人,他們過去曾見證過產品的國際化,並能夠分享他們的觀點和經驗,以幫助我們確保更順利的過程。這也為我們設定了最後期限,並為我們提供了第一個目標語言:日語。
如何使Braze這樣的產品國際化
當您開始i18n之旅時,您希望對您的產品進行許多調整—相信我,確實會有很多調整。但某些方麵的努力必然會比其他方麵更大。在Braze,我們i18n工作中最大的挑戰是在我們的產品中準備翻譯文本。為什麼?好吧,如果你的產品中的文本不容易翻譯,那麼沒有一個國際用戶能夠閱讀儀表板,這意味著你在日期格式、數字格式、字體選擇或選擇國際友好的圖像和顏色方麵所做的所有工作都是徒勞的。
鑒於此,我們知道我們必須優先準備翻譯文本。這一努力(以及下麵的描述)得益於由Gregory Beaver (Braze的員工軟件工程師和我們的常駐i18n專家)編譯的一些令人驚歎的文檔。其中最重要的三個要素是:
移除硬編碼元素
為了使您的產品更容易顯示不同的語言,您需要刪除任何硬編碼或靜態字符串,並用動態引用替換它們。這允許您的產品根據所顯示的語言拉入不同的文本字符串顯示給用戶。為了幫助完成這個過程,有許多可供您選擇的編程語言的i18n庫,您可以將它們合並到您的產品中,以便處理一些繁重的工作。
例如,假設我們有一行代碼讀取“Hello {place}”,其中“Hello”是硬編碼的,而“place”是一個變量。我們可以通過包含Rails i18n庫在我們的項目中。
一旦包含了這個庫,就可以利用它的一些輔助方法。首先引用庫並傳遞一些字段作為參數;第一個參數是這個字符串的鍵:hello-world。這樣,當我們準備好翻譯時,我們就會知道哪個翻譯應該去哪裏。接下來,我們有' Hello {place} '——這是如果我們無法找到上麵的鍵將使用的默認文本——最後是“place”變量的默認值。
然後i18n helper方法可以為每個用戶的當前語言設置(在本例中是英語)查找語言文件,然後返回鍵的翻譯值:
另一方麵,如果用戶將我們產品的語言設置為日語,應用程序將引用翻譯的“ja”文件集,它看起來像:
規劃特定語言的句子結構
在上麵的例子中,修複工作的部分原因是英語和日語恰好使用相同的句子結構來表達像“Hello world”這樣的短語。這並不一定適用於每一種情況或每一種語言——例如,阿拉伯語就是如此單詞複數的三種方式(包括兩種截然不同的方式和其中一種性別分裂),日語有用幾種方法來表示多種事物而俄語有大量的詞形變化,這就導致了複數的種類有很多很多.
當涉及到i18n時,這個問題是如何發揮作用的?考慮一下Braze儀表板上的帳戶設置頁麵——頁麵上有一句話寫著“在公司設置中更改您的訂閱”,並有一個與“公司設置”字樣相關的超鏈接。在英語中,這意味著鏈接在句末
然而,在土耳其語中,詞序互換了,因此鏈接落在句子中間:
考慮到這些類型的複雜性,圍繞DRY的軟件開發的通常最佳實踐(不要重複自己)原則是擁抱反模式。因此,在你的翻譯框架中加入盡可能長的句子是明智的,因為不同語言的上下文是不同的,並且不一定能從英語地區預測到。這種方法為您的翻譯人員(無論是手動翻譯還是自動翻譯)提供了正確翻譯的最佳機會。
處理不同語言的文本擴展
這個過程中我們必須弄清楚如何處理的另一個重要元素是文本展開。通常情況下,一種語言的句子長度明顯比另一種語言的句子長或短,導致產品中文本的外觀和感覺複雜化。對於Braze,我們知道這個因素是我們必須處理的,所以我們希望確保在開始導入翻譯文本時沒有任何東西看起來不穩定。一個抓?我們還沒有翻譯好的文本。
輸入pseudolocalization.這是一個用於轉換英語句子的工具,以顯示文本是否通過翻譯服務運行,同時還將文本擴展30%(某些語言與英語的代表性文本擴展)。通過使用偽定位,我們能夠確保如果由於翻譯而出現顯著的文本擴展,文本不會溢出到其他字段:
雖然這個工具看起來很有趣,但我們發現它非常有用——事實上,它幫助我們標記了產品中需要更改設計以適應文本長度變化的幾個領域。例如,如果不運行偽定位,我們就不會在推送通知設置中捕捉到重疊的行,直到文本已經翻譯完畢:
我們的成果和展望
我們最初審計和更新Braze平台中所有遺留字符串的工作花了大約6個月的時間。這項工作的完成得益於讓所有產品工程團隊同意在多個季度內共享OKR的決定,該決定承諾他們審查他們擁有的代碼區域,並準備翻譯文本,以及其他本地化準備工作。
當這些團隊正在進行這項工作時,我們能夠在日本的翻譯團隊上,讓他們在有可用的字符串時進行工作。這使得我們可以逐步引入新的翻譯(當然是在特性標誌後麵),並在小範圍內測試。通過將我們i18n工作的質量保證分解到幾周內,並與日本的當地團隊分擔責任,我們能夠使任務更易於管理,也不那麼令人生畏。
最終,我們實現了在2021年底之前為我們的日本用戶發布Braze儀表盤的完整翻譯版本的目標,確保我們在該地區越來越多的客戶可以輕鬆使用Braze。manbetx万博全站客户端自發布以來,我們繼續對日文進行本地化調整,同時也努力確保我們的團隊在i18n保持良好的習慣。這包括在估計工作負載時考慮i18n,確保工作在偽定位框架中作為QA的一部分進行審查,並在我們的前端運行自動化測試,以驗證i18n不會引起任何麵向用戶的問題。總有更多的事情要做,但我們很高興成功推出了日本儀表盤,並為未來在這一領域的努力奠定了堅實的基礎。
你有興趣應對這些雄心勃勃的、有益的挑戰嗎?看看上麵的空缺職位Braze職業頁麵.
尼克·羅賓
Nick Robin是Braze的產品經理,在我們的SMS/MMS團隊工作。他專注於通過擴大營銷渠道為我們的客戶創造出色的基於文本的消息體驗。manbetx万博全站客户端當他不寫用戶故事和qa新功能時,你會發現他在教他的老狗新把戲(字麵上說——他現在可以關燈了)。