iT邦幫忙

0

多語系的維護很困難

  • 分享至 

  • xImage

最近專案處理多語系滿困擾的,想請教各位前輩
我是寫 Java,所以多語系是用 ResourceBundle 讀取 .properties 檔案
不過這應該影響不大?

  1. key 的命名

key 通常是小寫英文,所以會遇到以下困難

  • 英文大小寫
    • Today Price
    • Today price
    • today price
  • 符號
    • Today Price
    • Today Price $
  • 中文不同,英文相同
    • 價格、價錢:Price
    • 星期一、週一:Monday

雖然這些情形可以解決,但會讓 key 變得又長又不直觀

label.Today_Price=Today Price
label.Today_price=Today price
label.today_price=today price
label.Today_Price_Dollar=Today Price $
label.Monday1=星期一
label.Monday2=週一
label.Price1=價格
label.Price2=價錢
  1. key 要有意義還是無意義

有意義的話,內容改 key 也必須跟著改否則會越來越困惑
而改 key 就意味著要改程式

label.column.today=Yesterday

無意義的話則是同樣的詞在不同地方都要定義
如果改動要改很多地方

label.sectionA=Today
label.sectionB=Today
label.sectionC=Today
  1. 複合詞

例如時間會有:上線時間、啟用時間、執行時間...
一旦「時間」改為「日期」也是一堆地方要改
當然也可以拆分為單詞再合併,但那也是另外一種工

  1. 面對固有的問題

.properties 檔案

  • 有重複 key
  • 有重複 value
  • 獨有 key(別的語系沒有)
  • key 命名規則不一致
  • 越來越肥大

我好像也只能忽視,繼續新增我的...

總結來說
會希望程式能更好維護、更好擴展
但多語系這塊似乎是個難解的障礙

Albert iT邦高手 1 級 ‧ 2023-11-17 20:35:45 檢舉
這樣設計:power user 無法幫上忙
這是: 系統或程式設計師才能
我們是 java + eclipse/jetty server
切割成 正檔與翻譯檔( 例如L M_Product . M_Product _Trl)
系統會依據登陸語系或指定語系
自動找尋"翻譯檔"
因我們是跨國開發西班牙語印度美國中國台灣等
所以必須賦予"power user " 有協助能力
rew87516 iT邦新手 4 級 ‧ 2023-11-20 12:45:23 檢舉
不然你可以看一下 vue-i18n 怎麼規劃的,應該都有包含你遇到的問題。
https://kazupon.github.io/vue-i18n/
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
海綿寶寶
iT邦大神 1 級 ‧ 2023-11-18 09:12:10

其實這跟「多語系」沒什麼關係
而是跟「Scope」比較有關係

以程式裡宣告變數為例
目前的scope是「整套系統」,就像是 global variable,自然會有很多困擾
只要找到適合的scope,把 key 區隔開來即可

舉最簡單的例子來說:用 page id/function id
首頁的 weekday 顯示為「星期一」-定義為 P000_Weekday
訂單頁的 weekday 顯示為「週一」-定義為 P001_Weekday
匯出訂單的 weekday 顯示為「周一」-定義為 F001_Weekday
這樣子就不用管以後她媽媽要嫁給誰了
/images/emoticon/emoticon06.gif

還有另一種寫法提供參考
P000_MENU_ITEM1
P000_MENU_ITEM1-1
P000_MENU_ITEM2
P000_MENU_ITEM2-1
P000_MENU_ITEM2-2
P001_LABEL_01
P001_LABEL_02
P001_BUTTON_01
P001_BUTTON_02

這就接近我所說的無意義,是根據模組、功能、頁面去切。優點是能做不同內容。缺點是相同的也無法共用。

rew87516 iT邦新手 4 級 ‧ 2023-11-20 12:48:05 檢舉

那就不要共用。
我不太清楚同時會用到「價格」跟「價錢」兩種譯文是什麼狀況,但若是不同情境下要採用不同的翻譯,那就不要共用。

1
sam0407
iT邦大師 1 級 ‧ 2023-11-20 13:37:17

  團隊開發或接手前人維護的程式是這樣子的,初期為了趕進度,溝通時間不足或省時間各作各的,最後這個樣子很正常。

  不知道這系統的生命週期到那裡了?如果已在維護階段而且離大改版還有一段時間,來作這件事就還滿有意義的。如果您們團隊有例會,建議您可以在會議中提出來,由主管來判斷是否有需要去作這部份的改善。

我要發表回答

立即登入回答