2015-06-28 21 views
0

我目前使用Spree 3.0并将我的货币更改为哥伦比亚比索(COP)。目前价格如下所示:$ 80.000,00。我希望他们看起来像这样:$ 80.000。我有一个关于如何在逗号后删除两个0的想法,但无法更改$的货币符号。这是我到目前为止有:不能更改狂热3.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 

这是莫名其妙地工作,因为₱符号是越来越删除,但$没有显示出来。

我很感谢有人能帮助我。

UPDATE

添加以下,现在我逗号后移除两个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 

回答

3

我用这个解决方案,但发现一个问题,当我尝试处理通过条纹网关支付,其实际所需量亚基是“仙”,以使货币换算。

使用@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 

我希望这帮助任何其他困惑(像我一样)的货币在施普雷。

你可以阅读更多关于货币格式:https://github.com/RubyMoney/money/blob/master/lib/money/money/formatting.rb

2

通过代码,您只需注册其他货币。每种产品( - 变体)都有很多价格,每种货币一种。您应该确保(可能在迁移中)所有变体的所有价格都更新为使用正确的币种。

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是转换系数。

1

我终于找到了如何删除逗号后的两个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 
0

综观类货币的文档(宝石/ money_6.9.0/lib目录/货币/ 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”属性是货币的名称,而不是国家的名称。$和数字之间的空格在“html_entity”中,而不在符号中。最后,“symbol_first”属性控制放置符号的位置。