无法更改 spree 3.0 上的货币符号
Can't change currency symbol on spree 3.0
我目前正在使用 Spree 3.0,并将我的货币更改为哥伦比亚比索 (COP)。现在价格显示如下:₱80.000,00。我希望它们看起来像这样:$ 80.000。我知道如何删除逗号后的两个 0,但无法更改 $ 的货币符号。这是我目前所拥有的:
在/config/initializers/spree.rb
Spree.config do |config|
config.logo = 'templo samadhi logo.png'
config.admin_interface_logo = 'templo samadhi logo.png'
country = Spree::Country.find_by_name('Colombia')
config.default_country_id = country.id if country.present?
config.checkout_zone = country.id
Money::Currency.register({
:priority => 1,
:iso_code => "COP",
:iso_numeric => country.id,
:name => "Colombia",
:symbol => "$ ",
:subunit => "Cent",
:subunit_to_unit => 100,
:separator => ".",
:delimiter => ","
})
end
这在某种程度上起作用了,因为 ₱ 符号被删除但 $ 没有出现。
如果有人能帮助我,我将不胜感激。
更新
我添加了以下内容,现在我删除了逗号后的两个 0,但我在价格后也得到了一个 $,如下所示:80.000 $。
所以现在我不知道如何在价格之前移动 $ 符号。
Spree::Money.class_eval do
def to_s
formatted = @money.format(@options)
formatted.gsub(/,00/, "")
formatted.symbol_position == :before
end
def to_html(options = { :html => true })
to_s
end
end
使用代码,您只需注册另一种货币。每个产品(变体)都有很多价格,一种货币一个。您应该确保(可能在迁移过程中)更新所有变体的所有价格以使用正确的货币。
Spree::Price.update_all(currency: 'COP')
如果您不想放宽美元价格,而是想添加额外的价格,您需要手动或在迁移时编辑每个价格。
Spree::Price.find_each do |price|
Spree::Price.create(variant: price.variant, amount: price.amount * 1.337, currency: 'COP')
end
其中 1.337
是换算系数。
我终于找到了如何去掉逗号后的两个ceros,使用$符号但仍然使用哥伦比亚比索货币。我就是这样做的。
Spree.config do |config|
config.logo = 'templo samadhi logo.png'
config.admin_interface_logo = 'templo samadhi logo.png'
country = Spree::Country.find_by_name('Colombia')
config.default_country_id = country.id if country.present?
config.checkout_zone = country.id
Spree::Money.class_eval do
def to_s
@money.format.gsub(/,00/, "")
@money.format(:symbol_position => :before)
end
def to_html(options = { :html => true })
to_s
end
end
Money::Currency.register({
:priority => 1,
:iso_code => "COP",
:iso_numeric => country.id,
:name => "Colombia",
:symbol => "$ ",
:subunit => "Peso",
:subunit_to_unit => 1,
:separator => ".",
:delimiter => ","
})
end
我正在使用这个解决方案,但当我尝试通过条带网关处理付款时发现一个问题,它实际上需要金额子单位为 "Cents" 才能进行货币转换。
对于@luisjar 的回答,您实际上并没有使用 COP 货币中的子单位,但某些支付网关(如条带)可能需要它们。为了使用带有子单位的 COP 货币(或任何其他货币)但不显示它,您需要设置格式 属性 no_cents true。这是我以哥伦比亚比索货币显示金额的方式,例如 $ 10,000 COP。
Spree.config do |config|
#Change currency symbol for Colombia
country = Spree::Country.find_by_name('Colombia')
config.default_country_id = country.id if country.present?
config.checkout_zone = country.id
Spree::Money.class_eval do
def to_s
@money.format.gsub(/,00/, "")
@money.format(:symbol_position => :before, :with_currency => true, :no_cents => true)
end
def to_html(options = { :html => true })
to_s
end
end
Money::Currency.register({
:priority => 1,
:iso_code => "COP",
:iso_numeric => country.id,
:name => "Colombia",
:symbol => "$ ",
:subunit => "Cent",
:subunit_to_unit => 100,
:separator => ".",
:delimiter => ","
})
Spree::Price.update_all(currency: 'COP')
end
我希望这对其他对 Spree 中的货币感到困惑的人(比如我)有所帮助。
您可以在以下位置阅读有关货币格式的更多信息:https://github.com/RubyMoney/money/blob/master/lib/money/money/formatting.rb
查看 class 货币的文档(在 gems/money_6.9.0/lib/money/currency.rb 中)我发现以下设置更好:
Money::Currency.register({
:priority => 1,
:iso_code => "COP",
:iso_numeric => country.id,
:name => "Peso",
:symbol => "$",
:html_entity => "$ ",
:symbol_first => true,
:subunit => "Cent",
:subunit_to_unit => 100,
:separator => ".",
:delimiter => ","
})
"name"属性是货币名称,不是国家名称。 $ 和数字之间的 space 位于 "html_entity" 内,而不是符号内。最后,"symbol_first" 属性控制放置符号的位置。
我目前正在使用 Spree 3.0,并将我的货币更改为哥伦比亚比索 (COP)。现在价格显示如下:₱80.000,00。我希望它们看起来像这样:$ 80.000。我知道如何删除逗号后的两个 0,但无法更改 $ 的货币符号。这是我目前所拥有的:
在/config/initializers/spree.rb
Spree.config do |config|
config.logo = 'templo samadhi logo.png'
config.admin_interface_logo = 'templo samadhi logo.png'
country = Spree::Country.find_by_name('Colombia')
config.default_country_id = country.id if country.present?
config.checkout_zone = country.id
Money::Currency.register({
:priority => 1,
:iso_code => "COP",
:iso_numeric => country.id,
:name => "Colombia",
:symbol => "$ ",
:subunit => "Cent",
:subunit_to_unit => 100,
:separator => ".",
:delimiter => ","
})
end
这在某种程度上起作用了,因为 ₱ 符号被删除但 $ 没有出现。
如果有人能帮助我,我将不胜感激。
更新
我添加了以下内容,现在我删除了逗号后的两个 0,但我在价格后也得到了一个 $,如下所示:80.000 $。
所以现在我不知道如何在价格之前移动 $ 符号。
Spree::Money.class_eval do
def to_s
formatted = @money.format(@options)
formatted.gsub(/,00/, "")
formatted.symbol_position == :before
end
def to_html(options = { :html => true })
to_s
end
end
使用代码,您只需注册另一种货币。每个产品(变体)都有很多价格,一种货币一个。您应该确保(可能在迁移过程中)更新所有变体的所有价格以使用正确的货币。
Spree::Price.update_all(currency: 'COP')
如果您不想放宽美元价格,而是想添加额外的价格,您需要手动或在迁移时编辑每个价格。
Spree::Price.find_each do |price|
Spree::Price.create(variant: price.variant, amount: price.amount * 1.337, currency: 'COP')
end
其中 1.337
是换算系数。
我终于找到了如何去掉逗号后的两个ceros,使用$符号但仍然使用哥伦比亚比索货币。我就是这样做的。
Spree.config do |config|
config.logo = 'templo samadhi logo.png'
config.admin_interface_logo = 'templo samadhi logo.png'
country = Spree::Country.find_by_name('Colombia')
config.default_country_id = country.id if country.present?
config.checkout_zone = country.id
Spree::Money.class_eval do
def to_s
@money.format.gsub(/,00/, "")
@money.format(:symbol_position => :before)
end
def to_html(options = { :html => true })
to_s
end
end
Money::Currency.register({
:priority => 1,
:iso_code => "COP",
:iso_numeric => country.id,
:name => "Colombia",
:symbol => "$ ",
:subunit => "Peso",
:subunit_to_unit => 1,
:separator => ".",
:delimiter => ","
})
end
我正在使用这个解决方案,但当我尝试通过条带网关处理付款时发现一个问题,它实际上需要金额子单位为 "Cents" 才能进行货币转换。
对于@luisjar 的回答,您实际上并没有使用 COP 货币中的子单位,但某些支付网关(如条带)可能需要它们。为了使用带有子单位的 COP 货币(或任何其他货币)但不显示它,您需要设置格式 属性 no_cents true。这是我以哥伦比亚比索货币显示金额的方式,例如 $ 10,000 COP。
Spree.config do |config|
#Change currency symbol for Colombia
country = Spree::Country.find_by_name('Colombia')
config.default_country_id = country.id if country.present?
config.checkout_zone = country.id
Spree::Money.class_eval do
def to_s
@money.format.gsub(/,00/, "")
@money.format(:symbol_position => :before, :with_currency => true, :no_cents => true)
end
def to_html(options = { :html => true })
to_s
end
end
Money::Currency.register({
:priority => 1,
:iso_code => "COP",
:iso_numeric => country.id,
:name => "Colombia",
:symbol => "$ ",
:subunit => "Cent",
:subunit_to_unit => 100,
:separator => ".",
:delimiter => ","
})
Spree::Price.update_all(currency: 'COP')
end
我希望这对其他对 Spree 中的货币感到困惑的人(比如我)有所帮助。
您可以在以下位置阅读有关货币格式的更多信息:https://github.com/RubyMoney/money/blob/master/lib/money/money/formatting.rb
查看 class 货币的文档(在 gems/money_6.9.0/lib/money/currency.rb 中)我发现以下设置更好:
Money::Currency.register({
:priority => 1,
:iso_code => "COP",
:iso_numeric => country.id,
:name => "Peso",
:symbol => "$",
:html_entity => "$ ",
:symbol_first => true,
:subunit => "Cent",
:subunit_to_unit => 100,
:separator => ".",
:delimiter => ","
})
"name"属性是货币名称,不是国家名称。 $ 和数字之间的 space 位于 "html_entity" 内,而不是符号内。最后,"symbol_first" 属性控制放置符号的位置。