2015-06-28 4 views
0

В настоящее время я использую Spree 3.0 и изменил свою валюту на колумбийское песо (COP). Прямо сейчас цены показываются следующим образом: ₱ 80.000,00. Я хочу, чтобы они выглядели так: 80 000 долларов. У меня есть идея о том, как удалить две 0 после запятой, но не удалось изменить символ валюты для $. Это то, что я до сих пор:Невозможно изменить символ валюты на spree 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

Я использовал это решение, но обнаружил проблему при попытке обработать платеж через шлюз полосы, он на самом деле нужна сумма, субъединица быть «Cents» для того, чтобы сделать конвертацию валюты.

С ответом @luisjar вы фактически не используете субъединицы в валюте COP, но они могут понадобиться для некоторых платежных шлюзов, таких как полоса. Чтобы использовать валюту COP (или любую другую валюту) с подразделением, но не показывая ее, вам необходимо установить свойство format no_cents true. Именно так я показываю сумму в валюте Колумбийского песо, например, 10 000 долларов США.

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

Наконец-то я нашел, как удалить два цера после запятой, используйте символ $, но все равно используйте валюту Колумбийского песо. Так я это сделал.

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

Глядя на документацию класса Currency (самоцветов/money_6.9.0/Библиотека/деньги/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  => "," 
}) 

Атрибут «имя» - это название валюты, а не название страны.Пространство между $ и числом проходит внутри «html_entity», а не в символе. Наконец, атрибут «symbol_first» определяет, где разместить символ.

Смежные вопросы