Module: I18n::Backend::Gettext

### Home Classes Methods

### In Files

- lib/i18n/backend/gettext.rb

### Namespace

- CLASS I18n::Backend::Gettext::PoData

### Methods

- #load_po
- #normalize
- #normalize_pluralization
- #parse

### Class/Module Index

Quicksearch

- I18n
- I18n::ArgumentError
- I18n::Backend
- I18n::Backend::Base
- I18n::Backend::Cache
- I18n::Backend::Cascade
- I18n::Backend::Chain
- I18n::Backend::Chain::Implementation
- I18n::Backend::Fallbacks
- I18n::Backend::Flatten
- I18n::Backend::Gettext
- I18n::Backend::Gettext::PoData
- I18n::Backend::InterpolationCompiler
- I18n::Backend::InterpolationCompiler::Compiler
- I18n::Backend::KeyValue
- I18n::Backend::KeyValue::Implementation
- I18n::Backend::Memoize
- I18n::Backend::Metadata
- I18n::Backend::Pluralization
- I18n::Backend::Simple
- I18n::Backend::Simple::Implementation
- I18n::Config
- I18n::ExceptionHandler
- I18n::Gettext
- I18n::Gettext::Helpers
- I18n::InvalidLocale
- I18n::InvalidLocaleData
- I18n::InvalidPluralizationData
- I18n::Locale
- I18n::Locale::Fallbacks
- I18n::Locale::Tag
- I18n::Locale::Tag::Parents
- I18n::Locale::Tag::Rfc4646
- I18n::Locale::Tag::Rfc4646::Parser
- I18n::Locale::Tag::Simple
- I18n::MissingInterpolationArgument
- I18n::MissingTranslation
- I18n::MissingTranslation::Base
- I18n::MissingTranslationData
- I18n::ReservedInterpolationKey
- I18n::Tests
- I18n::Tests::Basics
- I18n::Tests::Defaults
- I18n::Tests::Link
- I18n::Tests::Localization
- I18n::Tests::Lookup
- I18n::Tests::Pluralization
- I18n::Tests::Procs
- I18n::UnknownFileType
- GetText
- GetText::PoParser
- Hash
- Kernel

No matching classes.

# I18n::Backend::Gettext

### Protected Instance Methods

load_po(filename) click to toggle source

    # File lib/i18n/backend/gettext.rb, line 30
    def load_po(filename)
      locale = ::File.basename(filename, '.po').to_sym
      data = normalize(locale, parse(filename))
      { locale => data }
    end

normalize(locale, data) click to toggle source

    # File lib/i18n/backend/gettext.rb, line 40
    def normalize(locale, data)
      data.inject({}) do |result, (key, value)|
        unless key.nil? || key.empty?
          key = key.gsub(I18n::Gettext::CONTEXT_SEPARATOR, '|')
          key, value = normalize_pluralization(locale, key, value) if key.index("\0000")

          parts = key.split('|').reverse
          normalized = parts.inject({}) do |_normalized, part|
            { part => _normalized.empty? ? value : _normalized }
          end

          result.deep_merge!(normalized)
        end
        result
      end
    end

normalize_pluralization(locale, key, value) click to toggle source

    # File lib/i18n/backend/gettext.rb, line 57
    def normalize_pluralization(locale, key, value)
      # FIXME po_parser includes \000 chars that can not be turned into Symbols
      key = key.gsub("\0000", I18n::Gettext::PLURAL_SEPARATOR).split(I18n::Gettext::PLURAL_SEPARATOR).first

      keys = I18n::Gettext.plural_keys(locale)
      values = value.split("\0000")
      raise "invalid number of plurals: #{values.size}, keys: #{keys.inspect} on #{locale} locale for msgid #{key.inspect} with values #{values.inspect}" if values.size != keys.size

      result = {}
      values.each_with_index { |_value, ix| result[keys[ix]] = _value }
      [key, result]
    end

parse(filename) click to toggle source

    # File lib/i18n/backend/gettext.rb, line 36
    def parse(filename)
      GetText::PoParser.new.parse(::File.read(filename), PoData.new)
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.