使用NT$作為貨幣符號
「奇怪,我已經在後台設定了貨幣符號NT$, 也已經清除了快取,為何前台仍顯示$呢?」正在讀這篇文章的您,是否也遇到了這個詭譎的現象?這篇文章將會帶您了解其背後的原因,以及順利套用貨幣符號設定的小撇步。
從這篇文章你會知道:
- 觸發這個現象的條件
- 發生這個現象的原因
- 如何讓台灣繁體中文的前台使用NT$作為貨幣符號
延伸閱讀:
為什麼在後台設定貨幣符號NT$, 前台仍顯示為$呢?
會遇到這個情況,很有可能因為您的前台語系設定為台灣繁體中文,而後台則使用不同語系。這是因為在絕大多數語系裡,台幣標準貨幣符號是「NT$」,唯有繁體中文語系是「$」。
前台語系設定
後台語系界面設定
當您在後台看到貨幣符號為「NT$」時,其實magento將此設定理解為「使用標準」。前台在顯示貨幣符號時根據「使用標準」的設定,顯示出來的貨幣符號就變成了台灣繁體中文語系的標準貨幣符號「$」。
為什麼只有Magento 2.4.3以上才會發生這個現象呢?
Magento 在 2.4.3版以前,是使用 Zend_Currency 處理貨幣符號轉換;2.4.3版以上的Magento 在 \Magento\Directory\Model\Currency::formatTxt 裡有了些變化:若條件允許,將優先使用PHP內建的 \NumberFormatter 套用貨幣格式[1],而 \NumberFormatter 透過國際統一碼部件(ICU)處理多語系貨幣符號轉換。
ICU所使用的通用當地數據儲存庫(CLDR)經過考察後認為台灣國內絕大多數網站都使用$代表台幣[2],因此將繁體中文語系的台幣預設符號由「NT$」改為「$」[3]。ICU 為配合這項改變,也在 v59.1 將繁體中文語系裡的台幣貨幣符號從「NT$」改為「$」[4]。
CLDR將原本的「NT$」改為「$」
CLDR收到使用者建議,並考量到銀行的單位需使用「NT$」,因此為台灣繁體中文語系中的台幣新增了正式貨幣符號「NT$」[5]。然而,ICU 無法使用標準以外的貨幣符號[6];直到 v68.1 才新增了選擇異體符號的功能[7]。
確認ICU版本以及其所使用的CLDR版本:
$ icuinfo | egrep "\"(cldr\.)?version\"" <param name="version">63.1</param> <param name="cldr.version">34.0</param>
我不想改code,也不想改ICU版本,還有辦法解決這個問題嗎?
可以,只要按照以下步驟:
- 將後台語系改成繁體中文
- 取消勾選「使用標準」後,將貨幣符號設為NT$並儲存&清快取
- (選擇性)將後台改回原本的語系
這樣做就可以讓magento將我們的設定理解為「使用自訂貨幣符號」,因此在前台就不會再去使用繁體中文語系的預設貨幣符號了。
〖參考資料來源〗:
- Magento 2.4.3 Currency::formatTxt() 的變化 MCP-288: Replace Zend_Currency with Intl NumberFormatter, MCP-288: Replace Zend_Currency with Intl NumberFormatter
- CLDR 關於NT$和$的討論 CLDR-11190, CLDR-133333
- CLDR 將NT$改為$ CLDR-8774
- ICU 將NT$改為$ ICU-11846 CLDR 28 data integration
- CLDR 新增繁中台幣符號變體 CLDR-11190 New Taiwan Dollar symbol
- ICU 新增選擇異體貨幣符號功能相關討論 ICU-20854
- ICU 新增選擇異體貨幣符號功能 ICU-21173 Add support for more currency variants.
以上就是歐斯瑞本次 使用NT$作為貨幣符號 的分享
我要留言