class ExtractI18n::Slimkeyfy::VueTransformer

Constants

BEFORE
HTML_ARGUMENTS

Public Instance Methods

extract_arguments(translation) click to toggle source
# File lib/extract_i18n/slimkeyfy/vue_transformer.rb, line 73
def extract_arguments(translation)
  args = {}
  translation.scan(/\{\{([^}]*)\}\}/).each_with_index do |stripped_arg, index|
    arg = Regexp.last_match[0]
    key = ExtractI18n.key(arg)
    key = key + index.to_s if index > 0
    translation = translation.gsub(arg, "{#{key}}")
    args[key] = stripped_arg[0]
  end
  [args, translation]
end
parse_html() { |change| ... } click to toggle source
# File lib/extract_i18n/slimkeyfy/vue_transformer.rb, line 20
def parse_html(&_block)
  return @word.line if @word.line.match(TRANSLATED)
  return @word.line if @word.tail.join(" ")[/^{{.*}}$/]

  body = @word.tail.join(" ")
  body, tagged_with_equals = ExtractI18n::Slimkeyfy::Whitespacer.convert_nbsp(body, @word.head)

  tagged_with_equals = "|" if tagged_with_equals == "="

  interpolate_arguments, body = extract_arguments(body)

  change = ExtractI18n::SourceChange.new(
    source_line: @word.line,
    remove: body,
    interpolate_arguments: interpolate_arguments,
    interpolation_type: :vue,
    i18n_key: "#{@file_key}.#{ExtractI18n.key(body)}",
    i18n_string: body,
    t_template: "#{@word.indentation}#{tagged_with_equals} {{ $t('%s'%s) }}"
  )
  yield(change)
end
parse_html_arguments(line, token_skipped_before = nil) { |change| ... } click to toggle source
# File lib/extract_i18n/slimkeyfy/vue_transformer.rb, line 43
def parse_html_arguments(line, token_skipped_before = nil, &block)
  final_line = line
  regex_list.each do |regex|
    line.scan(regex) do |m_data|
      next if m_data == token_skipped_before
      before = m_data[0]
      if before[-1] == ":" # already dynamic attribute
        next
      end
      html_tag = m_data[1]
      translation = match_string(m_data[2])
      after = m_data[3]
      interpolate_arguments, translation = extract_arguments(translation)

      change = ExtractI18n::SourceChange.new(
        source_line: final_line,
        i18n_string: translation,
        i18n_key: "#{@file_key}.#{ExtractI18n.key(translation)}",
        remove: m_data[2],
        interpolate_arguments: interpolate_arguments,
        interpolation_type: :vue,
        t_template: "#{before}:#{html_tag}\"$t('%s'%s)\"#{after}"
      )
      final_line = yield(change)
      return parse_html_arguments(final_line, m_data, &block)
    end
  end
  @word.indentation + final_line
end
regex_list() click to toggle source
# File lib/extract_i18n/slimkeyfy/vue_transformer.rb, line 16
def regex_list
  HTML_ARGUMENTS.map { |_, regex| /#{BEFORE}#{regex}#{TRANSLATION}#{AFTER}/ }
end