Ruby
Rails

通貨のI18nは気をつけた方がいい

More than 3 years have passed since last update.

皆さんはRailsの

number_to_currency

という関数をご存知だろうか?

例えば、あるものの金額が、23654200円だったとする。

まったくもって読みにくい。

これを会計風に表示してくれるのがnumber_to_currencyである。

number_to_currency(23654200)

としてみると、

23,654,200円

と表示してくれる。とても優秀な関数である。

ちなみに、これはデフォルトの設定を以下のように指定しておかないとこういう風にはならないかもしれない。


ja.yml

ja:

number:
currency:
format:
delimiter: ","
format: "%n%u"
precision: 0
separator: "."
significant: false
strip_insignificant_zeros: false
unit:

こういった細かいオプションについては

http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html

を参照して欲しい。

で、本題。

これの厄介なところは、いざロケールが英語の人が見てみると、この値段は

$23,654,200.00

と表示される。

素晴らしい機能すぎて涙が出る。。。

ja->enの場合は値段が高くなっているので、モノを販売しているときは多分大きなトラブルにはならないと思うが、値段が高くなって困るケースも多々あるはずなので転ばぬ先の杖として以下のように設定しておくと良い。


en.yml

en:

number:
currency:
format:
delimiter: ","
format: "%n%u"
precision: 0
separator: "."
significant: false
strip_insignificant_zeros: false
unit: " JPY"

もしくは


en.yml

en:

number:
currency:
format:
delimiter: ","
format: "%u%n"
precision: 0
separator: "."
significant: false
strip_insignificant_zeros: false
unit: "¥"

と設定しておくと安全。

自分は、'¥'と書いてあっても通過単位がわからない人は外国では多いと思うので、ググれる'JPY'の方がいいのではないかと思っている。

ちなみに、ドル払いも可能にするときは、普通に何らかの関数を別途作ったほうが無難だと思う。

本来、localeには、地域と言語の2軸あり、今回の場合の円はどちらかと言うとjpという地域に属するもの。

こういうものは他にもあるかも知れないが、お金の話はセンシティブなので、皆さんもなにか問題になる前に設定を見なおしてみてはいかがでしょう?