Sha256: f281802a97767c855a00d17e68c561fa62c0fcbc46f0ce54384503c3fb28700e

Contents?: true

Size: 1.96 KB

Versions: 53

Compression:

Stored size: 1.96 KB

Contents

# frozen_string_literal: true

module Worldwide
  class Discounts
    ZH_HANS_GROUP = ([:zh] + Worldwide::Locale.new(:zh).sub_locales).freeze
    KU_GROUP = ([:ku, :ckb] + Worldwide::Locale.new(:ku).sub_locales + Worldwide::Locale.new(:ckb).sub_locales).freeze

    class << self
      def format(discount_percent, locale: I18n.locale)
        locale = locale.to_sym
        if ZH_HANS_GROUP.include?(locale)
          format_zh_hans(discount_percent, locale: locale)
        elsif KU_GROUP.include?(locale)
          format_ku(discount_percent, locale: locale)
        elsif locale == :ja
          format_ja(discount_percent, locale: locale)
        else
          format_default(discount_percent, locale: locale)
        end
      end

      private

      def format_default(discount_percent, locale:)
        Worldwide::Numbers.new(locale: locale).format(discount_percent, percent: true)
      end

      # Discounts in Kurdish are formatted using English percentage conventions in a Latin script context
      def format_ku(discount_percent, locale:)
        Worldwide::Numbers.new(locale: :en).format(discount_percent, percent: true)
      end

      # Discounts in Chinese are formatted as a fraction of the original price (20% Off => 8折, 25% Off => 7.5折)
      def format_zh_hans(discount_percent, locale:)
        decile = ((1 - discount_percent) * 10).round(4)
        decile = decile.to_i if integer?(decile)
        "#{decile}折"
      end

      # Discounts in Japanese are formatted in tenths if applicable (20% Off => 2割引, 25% Off => 25%割引)
      def format_ja(discount_percent, locale:)
        discount_percent = discount_percent.round(4)
        result =
          if (discount_percent % 0.1).zero?
            (discount_percent * 10).to_i
          else
            Worldwide::Numbers.new(locale: locale).format(discount_percent, percent: true)
          end
        "#{result}割引"
      end

      def integer?(num)
        num == num.to_i
      end
    end
  end
end

Version data entries

53 entries across 53 versions & 1 rubygems

Version Path
worldwide-1.14.1 lib/worldwide/discounts.rb
worldwide-1.14.0 lib/worldwide/discounts.rb
worldwide-1.13.0 lib/worldwide/discounts.rb
worldwide-1.12.0 lib/worldwide/discounts.rb
worldwide-1.11.1 lib/worldwide/discounts.rb
worldwide-1.11.0 lib/worldwide/discounts.rb
worldwide-1.10.0 lib/worldwide/discounts.rb
worldwide-1.9.0 lib/worldwide/discounts.rb
worldwide-1.8.0 lib/worldwide/discounts.rb
worldwide-1.7.5 lib/worldwide/discounts.rb
worldwide-1.7.4 lib/worldwide/discounts.rb
worldwide-1.7.3 lib/worldwide/discounts.rb
worldwide-1.7.2 lib/worldwide/discounts.rb
worldwide-1.7.1 lib/worldwide/discounts.rb
worldwide-1.7.0 lib/worldwide/discounts.rb
worldwide-1.6.2 lib/worldwide/discounts.rb
worldwide-1.6.1 lib/worldwide/discounts.rb
worldwide-1.6.0 lib/worldwide/discounts.rb
worldwide-1.5.0 lib/worldwide/discounts.rb
worldwide-1.4.1 lib/worldwide/discounts.rb