小品:number_to_human 的中英文竟然不同調!

紅寶鐵軌客
來關注...
關注/停止關注:紅寶鐵軌客
關注有什麼好處?:當作者有新文章發佈時,「思書」就會自動通知您,讓您更容易與作者互動。
現在就加入《思書》,你就可以關注本作者了!
《思書》是一個每個人的寫作與論壇平台,特有的隱私管理,讓你寫作不再受限,討論更深入真實,而且免費。 趕快來試試!
還未加入《思書》? 現在就登錄! 已經加入《思書》── 登入
寫程式中、折磨中、享受中 ......
561   0  
·
2020/09/03
·
2分鐘


有人說 Rails 超好用,但也有人說 Rails 要用到精,很難,都對,因為,Rails 的挫折,總是就發生在轉角處。

我很久很久以前,用了 Rails 內建的一個 helper,目的很單純,就是把數字轉成對人類閱讀友善的格式,也就是,例如將:123456 轉成 123K,在 Rails 中,就是:

number_to_human (ActionView::Helpers::NumberHelper)

這功能在現在的電腦構架很常見也常用啦,所以我就直接用了,也沒什麼測試,怕什麼!就這麼小小的一個常見功能......

直到,幾天前,有用戶跟我說,我的中英文介面中,數字是不一樣的,我一看,真是嚇到吃手手,同一個數字:

  • 中文 = 124.395K
  • English = 100K

這...... 嚇死人了,是那個偉大的程式,連數字都會搞錯?這很明顯的是進位有錯,很容易的就查到,問題發生在以下這行:

number_to_human(item.count, :format => '%n%u', :precision => 2, :units => { :thousand => 'K', :million => 'M', :billion => 'B' })

妙的是,我左看右看,API 上看下看,都很正確啊,但是數字就是不對,問題很明顯的出在語言版本上,而剛好,我在 API 上有看到,這個 helper 可以在 i18n 中設定,死馬當活馬醫,在 I18n 中試試看設些不同的值,哇哈,變正確了!

問題解決了,但是我還是不知道,為什麼 Rails 會不尊照 hepler 中的設定,而一定要去讀 I18n中的設定,我也沒時間再查下去,說不定那天 Rails 又改了,但是應該要把這個解決方法記錄下來,不然我下次一定忘記,又要重查一遍,也可以發佈給大家做參考。

解法:

呼叫這 helper 就簡化到只要給變數就好:

number_to_human(item.count)

所有的設定都移到 I18n yml 中,這部分很奇怪,Rails 的文件中都找不到:

# for number_to_human
  number:
    human:
      decimal_units:
       format: "%n%u"
       units:
         unit: ""
         thousand: k
         million: M
         billion: B
         trillion: T
         quadrillion: Q
      format:
        delimiter: ','
        precision: 3
        significant: true
        strip_insignificant_zeros: true

這樣做,問題解決了,程式也清爽多了。 小小的提醒,YML 很重格式,複製貼上要小心!

好啦,老話一句,希望有幫助。

 


喜歡作者的文章嗎?馬上按「關注」,當作者發佈新文章時,思書™就會 email 通知您。

思書是公開的寫作平台,創新的多筆名寫作方式,能用不同的筆名探索不同的寫作內容,無限寫作創意,如果您喜歡寫作分享,一定要來試試! 《 加入思書》

思書™是自由寫作平台,本文為作者之個人意見。


文章資訊

Categories:
Tags:
Total: 550 words


分享這篇文章:
關於作者

很久以前就是個「寫程式的」,其實,什麼程式都不熟⋯⋯
就,這會一點點,那會一點點⋯⋯




參與討論!
現在就加入《思書》,馬上參與討論!
《思書》是一個每個人的寫作與論壇平台,特有的隱私管理,用筆名來區隔你討論內容,讓你的討論更深入,而且免費。 趕快來試試!
還未加入《思書》? 現在就登錄! 已經加入《思書》── 登入


×
登入
申請帳號

需要幫助
關於思書

暗黑模式?
字體大小
成人內容未過濾
更改語言版本?