Sha256: 3f01256476b50e935f848b078a6d6019ad32fa938fc1482b648993a0a8789f43

Contents?: true

Size: 1.92 KB

Versions: 14

Compression:

Stored size: 1.92 KB

Contents

module Locomotive
  module Steam

    class TranslatorService

      attr_accessor_initialize :repository, :current_locale

      # Return the translation described by a key.
      #
      # @param [ String ] key The key of the translation.
      # @param [ Hash ] options This includes the following options: count, locale (The locale we want the translation in), scope (If specified, instead of looking in the translations, it will use I18n instead)
      #
      # @return [ String ] the translated text or nil if not found
      #
      def translate(input, options = {})
        locale  = options['locale'] || self.current_locale
        scope   = options.delete('scope')
        key     = scope.present? ? "#{scope.gsub('.', '_')}_#{input}" : input

        key     = "#{key}_#{pluralize_prefix(options['count'])}" if options['count']

        values  = find_values_by_key(key)

        # FIXME: important to check if the returned value is nil (instead of nil + false)
        # false being reserved for an existing key but without provided translation)
        if (translation = values[locale.to_s]).present?
          _translate(translation, options)
        elsif output = I18n.t(input, scope: scope&.split('.'), locale: locale, default: nil)
          output
        else
          Locomotive::Common::Logger.warn "Missing translation '#{input}' for the '#{locale}' locale".yellow
          ActiveSupport::Notifications.instrument('steam.missing_translation', input: input, locale: locale)
          input
        end
      end

      private

      def find_values_by_key(input)
        (@all_values ||= repository.group_by_key)[input] || {}
      end

      def _translate(string, options)
        ::Liquid::Template.parse(string).render(options)
      end

      def pluralize_prefix(count)
        case count.to_i
        when 0 then 'zero'
        when 1 then 'one'
        when 2 then 'two'
        else 'other'
        end
      end

    end

  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
locomotivecms_steam-1.8.0.alpha2 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.8.0.alpha1 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.7.1 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.7.0 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.6.1 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.6.0 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.6.0.rc1 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.6.0.beta1 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.5.3 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.5.2 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.5.1 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.5.0 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.5.0.rc1 lib/locomotive/steam/services/translator_service.rb
locomotivecms_steam-1.5.0.rc0 lib/locomotive/steam/services/translator_service.rb