tolk 3.0.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/app/assets/javascripts/tolk/actions.js +1 -1
 - data/app/assets/javascripts/tolk/layout.js +1 -1
 - data/app/assets/stylesheets/tolk/screen.scss +432 -0
 - data/app/controllers/tolk/application_controller.rb +1 -1
 - data/app/models/tolk/locale.rb +8 -8
 - data/app/views/layouts/tolk/application.html.erb +16 -7
 - data/app/views/tolk/_blank_canva.svg +1 -0
 - data/app/views/tolk/_empty.svg +1 -0
 - data/app/views/tolk/_houra.svg +1 -0
 - data/app/views/tolk/_nav.html.erb +26 -0
 - data/app/views/tolk/_no_data.svg +1 -0
 - data/app/views/tolk/locales/all.html.erb +76 -57
 - data/app/views/tolk/locales/index.html.erb +40 -23
 - data/app/views/tolk/locales/show.html.erb +58 -45
 - data/app/views/tolk/searches/_form.html.erb +1 -1
 - data/app/views/tolk/searches/show.html.erb +57 -51
 - data/lib/generators/tolk/templates/initializer.erb +1 -0
 - data/lib/tolk/config.rb +16 -0
 - data/lib/tolk/import.rb +12 -12
 - data/lib/tolk/sync.rb +22 -7
 - data/lib/tolk/version.rb +1 -1
 - data/lib/tolk/yaml.rb +1 -1
 - metadata +37 -13
 - data/app/assets/stylesheets/tolk/screen.css +0 -401
 
| 
         @@ -1,62 +1,68 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
              <%= render :partial => "form", :locals => { :locale => @locale } %>
         
     | 
| 
       3 
     | 
    
         
            -
            </h3>
         
     | 
| 
      
 1 
     | 
    
         
            +
            <%= render 'tolk/nav' %>
         
     | 
| 
       4 
2 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            <div class=" 
     | 
| 
       6 
     | 
    
         
            -
              <%=  
     | 
| 
       7 
     | 
    
         
            -
               
         
     | 
| 
       8 
     | 
    
         
            -
              <%= link_to "Completed translations", tolk.all_locale_path(@locale) %>
         
     | 
| 
      
 3 
     | 
    
         
            +
            <div class="search">
         
     | 
| 
      
 4 
     | 
    
         
            +
              <%= render partial: "form", locals: { locale: @locale } %>
         
     | 
| 
       9 
5 
     | 
    
         
             
            </div>
         
     | 
| 
       10 
6 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
               
     | 
| 
      
 7 
     | 
    
         
            +
            <% if @phrases.any? %>
         
     | 
| 
      
 8 
     | 
    
         
            +
              <div class="translations">
         
     | 
| 
       13 
9 
     | 
    
         
             
                 <%= form_for @locale do |locale_form| %>
         
     | 
| 
       14 
     | 
    
         
            -
                  <table 
     | 
| 
       15 
     | 
    
         
            -
                    < 
     | 
| 
       16 
     | 
    
         
            -
                      < 
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
                  <table>
         
     | 
| 
      
 11 
     | 
    
         
            +
                    <thead>
         
     | 
| 
      
 12 
     | 
    
         
            +
                      <tr>
         
     | 
| 
      
 13 
     | 
    
         
            +
                        <th><%= @locale.language_name -%></th>
         
     | 
| 
      
 14 
     | 
    
         
            +
                        <th class="actions"></th>
         
     | 
| 
      
 15 
     | 
    
         
            +
                        <th><%= Tolk::Locale.primary_language_name -%></th>
         
     | 
| 
      
 16 
     | 
    
         
            +
                      </tr>
         
     | 
| 
      
 17 
     | 
    
         
            +
                    </thead>
         
     | 
| 
      
 18 
     | 
    
         
            +
                    <tbody>
         
     | 
| 
      
 19 
     | 
    
         
            +
                      <% @phrases.each do |phrase| %>
         
     | 
| 
      
 20 
     | 
    
         
            +
                        <% if translation = phrase.translations.where(locale_id: @locale.id).first || Tolk::Translation.new(locale: @locale, phrase: phrase) %>
         
     | 
| 
      
 21 
     | 
    
         
            +
                          <tr>
         
     | 
| 
      
 22 
     | 
    
         
            +
                            <td class="translation">
         
     | 
| 
      
 23 
     | 
    
         
            +
                              <%= hidden_field_tag :"translations[][id]", translation.id, id: "#{translation.object_id}_id" %>
         
     | 
| 
      
 24 
     | 
    
         
            +
                              <%= hidden_field_tag :"translations[][phrase_id]", phrase.id, id: "#{translation.object_id}_phrase_id" %>
         
     | 
| 
      
 25 
     | 
    
         
            +
                              <%= hidden_field_tag :"translations[][locale_id]", translation.locale_id, id: "#{translation.object_id}_locale_id" %>
         
     | 
| 
      
 26 
     | 
    
         
            +
                              <%= text_area_tag :"translations[][text]", format_i18n_text_area_value(translation.text),
         
     | 
| 
      
 27 
     | 
    
         
            +
                                    class: "locale",
         
     | 
| 
      
 28 
     | 
    
         
            +
                                    id: "#{translation.object_id}_text",
         
     | 
| 
      
 29 
     | 
    
         
            +
                                    onfocus: "$(this).up('tr').addClassName('active');",
         
     | 
| 
      
 30 
     | 
    
         
            +
                                    onblur: "$(this).up('tr').removeClassName('active');" %>
         
     | 
| 
      
 31 
     | 
    
         
            +
                            </td>
         
     | 
| 
      
 32 
     | 
    
         
            +
                            <td class="actions">
         
     | 
| 
      
 33 
     | 
    
         
            +
                              <a class="copy" href="#" tabindex="-1" title="Copy original translation">←</a><br>
         
     | 
| 
      
 34 
     | 
    
         
            +
                              <span class="warning" title="Interpolation keys don't match">⚠</span>
         
     | 
| 
      
 35 
     | 
    
         
            +
                            </td>
         
     | 
| 
      
 36 
     | 
    
         
            +
                            <td class="original">
         
     | 
| 
      
 37 
     | 
    
         
            +
                              <%= text_area_tag :"translations[][original_text]", format_i18n_text_area_value(phrase.translations.primary.text), disabled: true %>
         
     | 
| 
       21 
38 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                            <%= text_area_tag :"translations[][text]", format_i18n_text_area_value(translation.text), :class => "locale", :id => "#{translation.object_id}_text", :onfocus => "$(this).up('tr').addClassName('active');", :onblur => "$(this).up('tr').removeClassName('active');" %>
         
     | 
| 
       29 
     | 
    
         
            -
                          </td>
         
     | 
| 
       30 
     | 
    
         
            -
                          <td class="actions">
         
     | 
| 
       31 
     | 
    
         
            -
                            <a class="copy" href="#" tabindex="-1" title="Copy original translation">←</a><br>
         
     | 
| 
       32 
     | 
    
         
            -
                            <span class="warning" title="Interpolation keys don't match">⚠</span>
         
     | 
| 
       33 
     | 
    
         
            -
                          </td>
         
     | 
| 
       34 
     | 
    
         
            -
                          <td class="original">
         
     | 
| 
       35 
     | 
    
         
            -
                            <%= text_area_tag :"translations[][original_text]", format_i18n_text_area_value(phrase.translations.primary.text), :disabled => true %>
         
     | 
| 
      
 39 
     | 
    
         
            +
                              <% if params[:q].present? -%>
         
     | 
| 
      
 40 
     | 
    
         
            +
                                <%= highlight(format_i18n_value(phrase.translations.primary.text), params[:q]) -%>
         
     | 
| 
      
 41 
     | 
    
         
            +
                              <% else -%>
         
     | 
| 
      
 42 
     | 
    
         
            +
                                <%= format_i18n_value(phrase.translations.primary.text) -%>
         
     | 
| 
      
 43 
     | 
    
         
            +
                              <% end -%>
         
     | 
| 
      
 44 
     | 
    
         
            +
                              <%= boolean_warning if phrase.translations.primary.boolean? -%>
         
     | 
| 
       36 
45 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                               
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                            <span class="key" title="<%= phrase.key %>"><%= params[:k].present? ?
         
     | 
| 
       45 
     | 
    
         
            -
                            highlight(h(truncate(phrase.key, :length => 100)), params[:k]) :
         
     | 
| 
       46 
     | 
    
         
            -
                            h(truncate(phrase.key, :length => 100)) %></span>
         
     | 
| 
       47 
     | 
    
         
            -
                          </td>
         
     | 
| 
       48 
     | 
    
         
            -
                        </tr>
         
     | 
| 
      
 46 
     | 
    
         
            +
                              <span class="translation-key" title="<%= phrase.key %>"><%= params[:k].present? ?
         
     | 
| 
      
 47 
     | 
    
         
            +
                              highlight(h(truncate(phrase.key, length: 100)), params[:k]) :
         
     | 
| 
      
 48 
     | 
    
         
            +
                              h(truncate(phrase.key, length: 100)) %></span>
         
     | 
| 
      
 49 
     | 
    
         
            +
                            </td>
         
     | 
| 
      
 50 
     | 
    
         
            +
                          </tr>
         
     | 
| 
      
 51 
     | 
    
         
            +
                        <% end %>
         
     | 
| 
       49 
52 
     | 
    
         
             
                      <% end %>
         
     | 
| 
       50 
     | 
    
         
            -
                     
     | 
| 
      
 53 
     | 
    
         
            +
                    </tbody>
         
     | 
| 
       51 
54 
     | 
    
         
             
                  </table>
         
     | 
| 
       52 
55 
     | 
    
         
             
                  <div class="table_submit">
         
     | 
| 
       53 
     | 
    
         
            -
                    <p><%= locale_form.submit "Save changes", : 
     | 
| 
      
 56 
     | 
    
         
            +
                    <p><%= locale_form.submit "Save changes", class: 'save-translations btn btn--large' %></p>
         
     | 
| 
       54 
57 
     | 
    
         
             
                  </div>
         
     | 
| 
       55 
58 
     | 
    
         
             
                <% end %>
         
     | 
| 
       56 
     | 
    
         
            -
                 
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
               
     | 
| 
       60 
     | 
    
         
            -
                 
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
      
 59 
     | 
    
         
            +
                <%= tolk_paginate @phrases %>
         
     | 
| 
      
 60 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 61 
     | 
    
         
            +
            <% else %>
         
     | 
| 
      
 62 
     | 
    
         
            +
              <div class="empty-state">
         
     | 
| 
      
 63 
     | 
    
         
            +
                <%= render 'tolk/no_data.svg' %>
         
     | 
| 
      
 64 
     | 
    
         
            +
                <p class="empty-state__msg">
         
     | 
| 
      
 65 
     | 
    
         
            +
                  No search results.
         
     | 
| 
      
 66 
     | 
    
         
            +
                </p>
         
     | 
| 
      
 67 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 68 
     | 
    
         
            +
            <% end %>
         
     | 
    
        data/lib/tolk/config.rb
    CHANGED
    
    | 
         @@ -23,6 +23,16 @@ module Tolk 
     | 
|
| 
       23 
23 
     | 
    
         
             
                  # strip translation texts automatically
         
     | 
| 
       24 
24 
     | 
    
         
             
                  attr_accessor :strip_texts
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
                  # specify line width which Yaml.dump will use to break lines. -1 for not breaking
         
     | 
| 
      
 27 
     | 
    
         
            +
                  attr_accessor :yaml_line_width
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  # specify controller to inherit from to keep Tolk controllers
         
     | 
| 
      
 30 
     | 
    
         
            +
                  # in the same context than the rest of your app
         
     | 
| 
      
 31 
     | 
    
         
            +
                  attr_accessor :base_controller
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  # Ignore specific keys
         
     | 
| 
      
 34 
     | 
    
         
            +
                  attr_accessor :ignore_keys
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
       26 
36 
     | 
    
         
             
                  def reset
         
     | 
| 
       27 
37 
     | 
    
         
             
                    @exclude_gems_token = false
         
     | 
| 
       28 
38 
     | 
    
         | 
| 
         @@ -78,6 +88,12 @@ module Tolk 
     | 
|
| 
       78 
88 
     | 
    
         
             
                      'zh-CN' => 'Chinese (Simplified)',
         
     | 
| 
       79 
89 
     | 
    
         
             
                      'zh-TW' => 'Chinese (Traditional)'
         
     | 
| 
       80 
90 
     | 
    
         
             
                    }
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                    @yaml_line_width = Psych::Handler::OPTIONS.line_width # Psych::Handler::DumperOptions uses 0 as "default" for unset
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                    @base_controller =  'ActionController::Base'
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                    @ignore_keys = []
         
     | 
| 
       81 
97 
     | 
    
         
             
                  end
         
     | 
| 
       82 
98 
     | 
    
         
             
                end
         
     | 
| 
       83 
99 
     | 
    
         | 
    
        data/lib/tolk/import.rb
    CHANGED
    
    | 
         @@ -24,27 +24,27 @@ module Tolk 
     | 
|
| 
       24 
24 
     | 
    
         
             
                    data = locale.read_locale_file
         
     | 
| 
       25 
25 
     | 
    
         
             
                    return unless data
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                     
     | 
| 
      
 27 
     | 
    
         
            +
                    phrases_by_key = Tolk::Phrase.all.index_by(&:key)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    translated_phrase_ids = Set.new(locale.translations.pluck(:phrase_id))
         
     | 
| 
       28 
29 
     | 
    
         
             
                    count = 0
         
     | 
| 
       29 
30 
     | 
    
         | 
| 
       30 
31 
     | 
    
         
             
                    data.each do |key, value|
         
     | 
| 
       31 
     | 
    
         
            -
                      phrase =  
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                      if phrase
         
     | 
| 
       34 
     | 
    
         
            -
                        translation = locale.translations.new(:text => value, :phrase => phrase)
         
     | 
| 
       35 
     | 
    
         
            -
                        if translation.save
         
     | 
| 
       36 
     | 
    
         
            -
                          count = count + 1
         
     | 
| 
       37 
     | 
    
         
            -
                        elsif translation.errors[:variables].present?
         
     | 
| 
       38 
     | 
    
         
            -
                          puts "[WARN] Key '#{key}' from '#{locale_name}.yml' could not be saved: #{translation.errors[:variables].first}"
         
     | 
| 
       39 
     | 
    
         
            -
                        end
         
     | 
| 
       40 
     | 
    
         
            -
                      else
         
     | 
| 
      
 32 
     | 
    
         
            +
                      phrase = phrases_by_key[key]
         
     | 
| 
      
 33 
     | 
    
         
            +
                      unless phrase
         
     | 
| 
       41 
34 
     | 
    
         
             
                        puts "[ERROR] Key '#{key}' was found in '#{locale_name}.yml' but #{Tolk::Locale.primary_language_name} translation is missing"
         
     | 
| 
      
 35 
     | 
    
         
            +
                        next
         
     | 
| 
      
 36 
     | 
    
         
            +
                      end
         
     | 
| 
      
 37 
     | 
    
         
            +
                      next if translated_phrase_ids.include?(phrase.id)
         
     | 
| 
      
 38 
     | 
    
         
            +
                      translation = locale.translations.new(:text => value, :phrase => phrase)
         
     | 
| 
      
 39 
     | 
    
         
            +
                      if translation.save
         
     | 
| 
      
 40 
     | 
    
         
            +
                        count = count + 1
         
     | 
| 
      
 41 
     | 
    
         
            +
                      elsif translation.errors[:variables].present?
         
     | 
| 
      
 42 
     | 
    
         
            +
                        puts "[WARN] Key '#{key}' from '#{locale_name}.yml' could not be saved: #{translation.errors[:variables].first}"
         
     | 
| 
       42 
43 
     | 
    
         
             
                      end
         
     | 
| 
       43 
44 
     | 
    
         
             
                    end
         
     | 
| 
       44 
45 
     | 
    
         | 
| 
       45 
46 
     | 
    
         
             
                    puts "[INFO] Imported #{count} keys from #{locale_name}.yml"
         
     | 
| 
       46 
47 
     | 
    
         
             
                  end
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
48 
     | 
    
         
             
                end
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
       50 
50 
     | 
    
         
             
                def read_locale_file
         
     | 
    
        data/lib/tolk/sync.rb
    CHANGED
    
    | 
         @@ -30,7 +30,8 @@ module Tolk 
     | 
|
| 
       30 
30 
     | 
    
         
             
                      I18n.backend.send :init_translations unless I18n.backend.initialized? # force load
         
     | 
| 
       31 
31 
     | 
    
         
             
                    end
         
     | 
| 
       32 
32 
     | 
    
         
             
                    translations = flat_hash(I18n.backend.send(:translations)[primary_locale.name.to_sym])
         
     | 
| 
       33 
     | 
    
         
            -
                    filter_out_i18n_keys(translations.merge(read_primary_locale_file))
         
     | 
| 
      
 33 
     | 
    
         
            +
                    filtered = filter_out_i18n_keys(translations.merge(read_primary_locale_file))
         
     | 
| 
      
 34 
     | 
    
         
            +
                    filter_out_ignored_keys(filtered)
         
     | 
| 
       34 
35 
     | 
    
         
             
                  end
         
     | 
| 
       35 
36 
     | 
    
         | 
| 
       36 
37 
     | 
    
         
             
                  def read_primary_locale_file
         
     | 
| 
         @@ -62,30 +63,44 @@ module Tolk 
     | 
|
| 
       62 
63 
     | 
    
         
             
                    primary_locale = self.primary_locale
         
     | 
| 
       63 
64 
     | 
    
         | 
| 
       64 
65 
     | 
    
         
             
                    # Handle deleted phrases
         
     | 
| 
       65 
     | 
    
         
            -
                     
     | 
| 
      
 66 
     | 
    
         
            +
                    Tolk::Phrase.where.not(:key => translations.keys).destroy_all
         
     | 
| 
       66 
67 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
                     
     | 
| 
      
 68 
     | 
    
         
            +
                    phrases_by_key = Tolk::Phrase.all.index_by(&:key)
         
     | 
| 
      
 69 
     | 
    
         
            +
                    primary_translation_by_phrase_id = primary_locale.translations.index_by(&:phrase_id)
         
     | 
| 
       68 
70 
     | 
    
         | 
| 
       69 
71 
     | 
    
         
             
                    translations.each do |key, value|
         
     | 
| 
       70 
72 
     | 
    
         
             
                      next if value.is_a?(Proc)
         
     | 
| 
       71 
73 
     | 
    
         
             
                      # Create phrase and primary translation if missing
         
     | 
| 
       72 
     | 
    
         
            -
                       
     | 
| 
       73 
     | 
    
         
            -
                      translation =  
     | 
| 
      
 74 
     | 
    
         
            +
                      phrase = phrases_by_key[key] || Tolk::Phrase.create!(:key => key)
         
     | 
| 
      
 75 
     | 
    
         
            +
                      translation = primary_translation_by_phrase_id[phrase.id]
         
     | 
| 
      
 76 
     | 
    
         
            +
                      translation ||= primary_locale.translations.build(:phrase => phrase)
         
     | 
| 
       74 
77 
     | 
    
         
             
                      translation.text = value
         
     | 
| 
       75 
78 
     | 
    
         | 
| 
       76 
79 
     | 
    
         
             
                      if translation.changed? && !translation.new_record?
         
     | 
| 
       77 
80 
     | 
    
         
             
                        # Set the primary updated flag if the primary translation has changed and it is not a new record.
         
     | 
| 
       78 
     | 
    
         
            -
                         
     | 
| 
      
 81 
     | 
    
         
            +
                        phrase.translations.where.not(:locale_id => primary_locale.id).update_all({ :primary_updated => true })
         
     | 
| 
       79 
82 
     | 
    
         
             
                      end
         
     | 
| 
       80 
83 
     | 
    
         | 
| 
       81 
84 
     | 
    
         
             
                      translation.primary = true
         
     | 
| 
       82 
     | 
    
         
            -
                      translation.save!
         
     | 
| 
      
 85 
     | 
    
         
            +
                      translation.save! if translation.changed?
         
     | 
| 
       83 
86 
     | 
    
         
             
                    end
         
     | 
| 
       84 
87 
     | 
    
         
             
                  end
         
     | 
| 
       85 
88 
     | 
    
         | 
| 
       86 
89 
     | 
    
         
             
                  def filter_out_i18n_keys(flat_hash)
         
     | 
| 
       87 
90 
     | 
    
         
             
                    flat_hash.reject { |key, value| key.starts_with? "i18n" }
         
     | 
| 
       88 
91 
     | 
    
         
             
                  end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                  def filter_out_ignored_keys(flat_hash)
         
     | 
| 
      
 94 
     | 
    
         
            +
                    ignored = Tolk.config.ignore_keys
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                    return flat_hash unless ignored.any?
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                    ignored_escaped = ignored.map { |key| Regexp.escape(key) }
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                    regexp = Regexp.new(/\A(#{ignored_escaped.join('|')})(:?\.|\Z)/)
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                    flat_hash.reject { |key, _| regexp === key }
         
     | 
| 
      
 103 
     | 
    
         
            +
                  end
         
     | 
| 
       89 
104 
     | 
    
         
             
                end
         
     | 
| 
       90 
105 
     | 
    
         
             
              end
         
     | 
| 
       91 
106 
     | 
    
         
             
            end
         
     | 
    
        data/lib/tolk/version.rb
    CHANGED
    
    
    
        data/lib/tolk/yaml.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: tolk
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version:  
     | 
| 
      
 4 
     | 
    
         
            +
              version: 4.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - David Heinemeier Hansson
         
     | 
| 
         @@ -9,10 +9,10 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            - Emilio Tagua
         
     | 
| 
       10 
10 
     | 
    
         
             
            - Thomas Darde
         
     | 
| 
       11 
11 
     | 
    
         
             
            - Ferran Basora
         
     | 
| 
       12 
     | 
    
         
            -
            autorequire: 
     | 
| 
      
 12 
     | 
    
         
            +
            autorequire:
         
     | 
| 
       13 
13 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       14 
14 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       15 
     | 
    
         
            -
            date:  
     | 
| 
      
 15 
     | 
    
         
            +
            date: 2020-07-22 00:00:00.000000000 Z
         
     | 
| 
       16 
16 
     | 
    
         
             
            dependencies:
         
     | 
| 
       17 
17 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       18 
18 
     | 
    
         
             
              name: rails
         
     | 
| 
         @@ -42,6 +42,20 @@ dependencies: 
     | 
|
| 
       42 
42 
     | 
    
         
             
                - - ">="
         
     | 
| 
       43 
43 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       44 
44 
     | 
    
         
             
                    version: 0.8.6
         
     | 
| 
      
 45 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 46 
     | 
    
         
            +
              name: sassc
         
     | 
| 
      
 47 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 48 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 49 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 50 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 51 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 52 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 53 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 54 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 55 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 56 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 57 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 58 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       45 
59 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       46 
60 
     | 
    
         
             
              name: capybara
         
     | 
| 
       47 
61 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -60,16 +74,22 @@ dependencies: 
     | 
|
| 
       60 
74 
     | 
    
         
             
              name: sqlite3
         
     | 
| 
       61 
75 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       62 
76 
     | 
    
         
             
                requirements:
         
     | 
| 
       63 
     | 
    
         
            -
                - - " 
     | 
| 
      
 77 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       64 
78 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       65 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 79 
     | 
    
         
            +
                    version: '1.3'
         
     | 
| 
      
 80 
     | 
    
         
            +
                - - "<"
         
     | 
| 
      
 81 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 82 
     | 
    
         
            +
                    version: '1.5'
         
     | 
| 
       66 
83 
     | 
    
         
             
              type: :development
         
     | 
| 
       67 
84 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       68 
85 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       69 
86 
     | 
    
         
             
                requirements:
         
     | 
| 
       70 
     | 
    
         
            -
                - - " 
     | 
| 
      
 87 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       71 
88 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       72 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 89 
     | 
    
         
            +
                    version: '1.3'
         
     | 
| 
      
 90 
     | 
    
         
            +
                - - "<"
         
     | 
| 
      
 91 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 92 
     | 
    
         
            +
                    version: '1.5'
         
     | 
| 
       73 
93 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       74 
94 
     | 
    
         
             
              name: mocha
         
     | 
| 
       75 
95 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -128,7 +148,7 @@ files: 
     | 
|
| 
       128 
148 
     | 
    
         
             
            - app/assets/javascripts/tolk/libraries.js
         
     | 
| 
       129 
149 
     | 
    
         
             
            - app/assets/stylesheets/tolk/application.css
         
     | 
| 
       130 
150 
     | 
    
         
             
            - app/assets/stylesheets/tolk/reset.css
         
     | 
| 
       131 
     | 
    
         
            -
            - app/assets/stylesheets/tolk/screen. 
     | 
| 
      
 151 
     | 
    
         
            +
            - app/assets/stylesheets/tolk/screen.scss
         
     | 
| 
       132 
152 
     | 
    
         
             
            - app/controllers/tolk/application_controller.rb
         
     | 
| 
       133 
153 
     | 
    
         
             
            - app/controllers/tolk/locales_controller.rb
         
     | 
| 
       134 
154 
     | 
    
         
             
            - app/controllers/tolk/searches_controller.rb
         
     | 
| 
         @@ -137,6 +157,11 @@ files: 
     | 
|
| 
       137 
157 
     | 
    
         
             
            - app/models/tolk/phrase.rb
         
     | 
| 
       138 
158 
     | 
    
         
             
            - app/models/tolk/translation.rb
         
     | 
| 
       139 
159 
     | 
    
         
             
            - app/views/layouts/tolk/application.html.erb
         
     | 
| 
      
 160 
     | 
    
         
            +
            - app/views/tolk/_blank_canva.svg
         
     | 
| 
      
 161 
     | 
    
         
            +
            - app/views/tolk/_empty.svg
         
     | 
| 
      
 162 
     | 
    
         
            +
            - app/views/tolk/_houra.svg
         
     | 
| 
      
 163 
     | 
    
         
            +
            - app/views/tolk/_nav.html.erb
         
     | 
| 
      
 164 
     | 
    
         
            +
            - app/views/tolk/_no_data.svg
         
     | 
| 
       140 
165 
     | 
    
         
             
            - app/views/tolk/locales/all.html.erb
         
     | 
| 
       141 
166 
     | 
    
         
             
            - app/views/tolk/locales/index.html.erb
         
     | 
| 
       142 
167 
     | 
    
         
             
            - app/views/tolk/locales/show.atom.builder
         
     | 
| 
         @@ -163,7 +188,7 @@ homepage: https://github.com/tolk/tolk 
     | 
|
| 
       163 
188 
     | 
    
         
             
            licenses:
         
     | 
| 
       164 
189 
     | 
    
         
             
            - MIT
         
     | 
| 
       165 
190 
     | 
    
         
             
            metadata: {}
         
     | 
| 
       166 
     | 
    
         
            -
            post_install_message: 
     | 
| 
      
 191 
     | 
    
         
            +
            post_install_message:
         
     | 
| 
       167 
192 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       168 
193 
     | 
    
         
             
            require_paths:
         
     | 
| 
       169 
194 
     | 
    
         
             
            - lib
         
     | 
| 
         @@ -171,16 +196,15 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       171 
196 
     | 
    
         
             
              requirements:
         
     | 
| 
       172 
197 
     | 
    
         
             
              - - ">="
         
     | 
| 
       173 
198 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       174 
     | 
    
         
            -
                  version: 2. 
     | 
| 
      
 199 
     | 
    
         
            +
                  version: 2.5.0
         
     | 
| 
       175 
200 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       176 
201 
     | 
    
         
             
              requirements:
         
     | 
| 
       177 
202 
     | 
    
         
             
              - - ">="
         
     | 
| 
       178 
203 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       179 
204 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       180 
205 
     | 
    
         
             
            requirements: []
         
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
       183 
     | 
    
         
            -
            signing_key: 
         
     | 
| 
      
 206 
     | 
    
         
            +
            rubygems_version: 3.1.4
         
     | 
| 
      
 207 
     | 
    
         
            +
            signing_key:
         
     | 
| 
       184 
208 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       185 
209 
     | 
    
         
             
            summary: Rails engine providing web interface for managing i18n yaml files
         
     | 
| 
       186 
210 
     | 
    
         
             
            test_files: []
         
     | 
| 
         @@ -1,401 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            /*-------------------------------------------------
         
     | 
| 
       2 
     | 
    
         
            -
            Defaults
         
     | 
| 
       3 
     | 
    
         
            -
            -------------------------------------------------*/
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            acronym, abbr {
         
     | 
| 
       6 
     | 
    
         
            -
              font-variant: small-caps;
         
     | 
| 
       7 
     | 
    
         
            -
              text-transform: lowercase;
         
     | 
| 
       8 
     | 
    
         
            -
              font-weight: bold;
         
     | 
| 
       9 
     | 
    
         
            -
            }
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            .center {text-align: center;}
         
     | 
| 
       12 
     | 
    
         
            -
            .large {font-size: larger;}
         
     | 
| 
       13 
     | 
    
         
            -
            .small {font-size: smaller;}
         
     | 
| 
       14 
     | 
    
         
            -
            strong {font-weight: bold;}
         
     | 
| 
       15 
     | 
    
         
            -
            em {font-style: italic;}
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            .clear {clear: both;}
         
     | 
| 
       18 
     | 
    
         
            -
            .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
         
     | 
| 
       19 
     | 
    
         
            -
            .clearfix { display: inline-block; }
         
     | 
| 
       20 
     | 
    
         
            -
            .clearfix{ display: block; }
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
            a {color: #888;}
         
     | 
| 
       23 
     | 
    
         
            -
            a:hover {color: #000;}
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
            /*-------------------------------------------------
         
     | 
| 
       26 
     | 
    
         
            -
            Layout
         
     | 
| 
       27 
     | 
    
         
            -
            -------------------------------------------------*/
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
            body {
         
     | 
| 
       30 
     | 
    
         
            -
              font-family: "Lucida Sans", "Lucida Grande", "Lucida Sans Unicode", sans-serif;
         
     | 
| 
       31 
     | 
    
         
            -
              background: #e5e5e5;
         
     | 
| 
       32 
     | 
    
         
            -
              color: #333;
         
     | 
| 
       33 
     | 
    
         
            -
              margin: 0;
         
     | 
| 
       34 
     | 
    
         
            -
              padding: 0;
         
     | 
| 
       35 
     | 
    
         
            -
              font-size: 14px;
         
     | 
| 
       36 
     | 
    
         
            -
              line-height: 21px;
         
     | 
| 
       37 
     | 
    
         
            -
              text-align: left;
         
     | 
| 
       38 
     | 
    
         
            -
            }
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
            div#container {
         
     | 
| 
       41 
     | 
    
         
            -
              margin: 2% 4%;
         
     | 
| 
       42 
     | 
    
         
            -
              padding: 25px;
         
     | 
| 
       43 
     | 
    
         
            -
              background: #fff;
         
     | 
| 
       44 
     | 
    
         
            -
              -webkit-border-radius: 20px;
         
     | 
| 
       45 
     | 
    
         
            -
              -moz-border-radius: 20px;
         
     | 
| 
       46 
     | 
    
         
            -
              border-radius: 20px;
         
     | 
| 
       47 
     | 
    
         
            -
              box-shadow: 0px 0px 15px rgba(00,00,00,0.5);
         
     | 
| 
       48 
     | 
    
         
            -
              -moz-box-shadow: 0px 0px 15px rgba(00,00,00,0.5);
         
     | 
| 
       49 
     | 
    
         
            -
              -webkit-box-shadow: 0px 0px 15px rgba(00,00,00,0.5);
         
     | 
| 
       50 
     | 
    
         
            -
            }
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
            div#head {
         
     | 
| 
       53 
     | 
    
         
            -
              margin: -25px -25px 0;
         
     | 
| 
       54 
     | 
    
         
            -
              background: #111;
         
     | 
| 
       55 
     | 
    
         
            -
              color: #999;
         
     | 
| 
       56 
     | 
    
         
            -
              padding: 25px 25px 20px 15px;
         
     | 
| 
       57 
     | 
    
         
            -
              -webkit-border-top-left-radius: 20px;
         
     | 
| 
       58 
     | 
    
         
            -
              -webkit-border-top-right-radius: 20px;
         
     | 
| 
       59 
     | 
    
         
            -
              -moz-border-radius-topleft: 20px;
         
     | 
| 
       60 
     | 
    
         
            -
              -moz-border-radius-topright: 20px;
         
     | 
| 
       61 
     | 
    
         
            -
              border-top-left-radius: 20px;
         
     | 
| 
       62 
     | 
    
         
            -
              border-top-right-radius: 20px;
         
     | 
| 
       63 
     | 
    
         
            -
              font-size: 18px;
         
     | 
| 
       64 
     | 
    
         
            -
            }
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
            div#head a {
         
     | 
| 
       67 
     | 
    
         
            -
              color: #2fadcf;
         
     | 
| 
       68 
     | 
    
         
            -
              font-weight: bold;
         
     | 
| 
       69 
     | 
    
         
            -
              text-decoration: none;
         
     | 
| 
       70 
     | 
    
         
            -
            }
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
            div#head span {
         
     | 
| 
       73 
     | 
    
         
            -
              padding: 8px 6px;
         
     | 
| 
       74 
     | 
    
         
            -
              margin-right: 1px;
         
     | 
| 
       75 
     | 
    
         
            -
            }
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
            div#head span.home {
         
     | 
| 
       78 
     | 
    
         
            -
              background: #333;
         
     | 
| 
       79 
     | 
    
         
            -
            }
         
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
            div#head span.locale {
         
     | 
| 
       82 
     | 
    
         
            -
              background: #444;
         
     | 
| 
       83 
     | 
    
         
            -
            }
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
            div#head span.locale a {
         
     | 
| 
       86 
     | 
    
         
            -
              color: #fff;
         
     | 
| 
       87 
     | 
    
         
            -
            }
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
            div#head span.locale form.button_to {
         
     | 
| 
       90 
     | 
    
         
            -
              display: inline;
         
     | 
| 
       91 
     | 
    
         
            -
            }
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
            div#head span.locale form.button_to div {
         
     | 
| 
       94 
     | 
    
         
            -
              display: inline;
         
     | 
| 
       95 
     | 
    
         
            -
            }
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
            div#head span.locale form.button_to div input {
         
     | 
| 
       98 
     | 
    
         
            -
              color: #fff;
         
     | 
| 
       99 
     | 
    
         
            -
              background: none;
         
     | 
| 
       100 
     | 
    
         
            -
              border: 0;
         
     | 
| 
       101 
     | 
    
         
            -
              font-weight: bold;
         
     | 
| 
       102 
     | 
    
         
            -
              text-decoration: none;
         
     | 
| 
       103 
     | 
    
         
            -
              font-size: 18px;
         
     | 
| 
       104 
     | 
    
         
            -
              color: #2fadcf;
         
     | 
| 
       105 
     | 
    
         
            -
              cursor: pointer;
         
     | 
| 
       106 
     | 
    
         
            -
            }
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
            div#head span:first-child {
         
     | 
| 
       109 
     | 
    
         
            -
              padding-left: 12px;
         
     | 
| 
       110 
     | 
    
         
            -
              -webkit-border-top-left-radius: 10px;
         
     | 
| 
       111 
     | 
    
         
            -
              -webkit-border-bottom-left-radius: 10px;
         
     | 
| 
       112 
     | 
    
         
            -
              -moz-border-radius-topleft: 10px;
         
     | 
| 
       113 
     | 
    
         
            -
              -moz-border-radius-bottomleft: 10px;
         
     | 
| 
       114 
     | 
    
         
            -
              border-top-left-radius: 10px;
         
     | 
| 
       115 
     | 
    
         
            -
              border-bottom-left-radius: 10px;
         
     | 
| 
       116 
     | 
    
         
            -
            }
         
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
            div#head span:last-child {
         
     | 
| 
       119 
     | 
    
         
            -
              padding-right: 12px;
         
     | 
| 
       120 
     | 
    
         
            -
              -webkit-border-top-right-radius: 10px;
         
     | 
| 
       121 
     | 
    
         
            -
              -webkit-border-bottom-right-radius: 10px;
         
     | 
| 
       122 
     | 
    
         
            -
              -moz-border-radius-topright: 10px;
         
     | 
| 
       123 
     | 
    
         
            -
              -moz-border-radius-bottomright: 10px;
         
     | 
| 
       124 
     | 
    
         
            -
              border-top-right-radius: 10px;
         
     | 
| 
       125 
     | 
    
         
            -
              border-bottom-right-radius: 10px;
         
     | 
| 
       126 
     | 
    
         
            -
            }
         
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
            h2,
         
     | 
| 
       129 
     | 
    
         
            -
            h3 {
         
     | 
| 
       130 
     | 
    
         
            -
              font-size: 18px;
         
     | 
| 
       131 
     | 
    
         
            -
              color: #2fadcf;
         
     | 
| 
       132 
     | 
    
         
            -
              margin: 25px 0 10px;
         
     | 
| 
       133 
     | 
    
         
            -
            }
         
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
            h2 span,
         
     | 
| 
       136 
     | 
    
         
            -
            h3 span {
         
     | 
| 
       137 
     | 
    
         
            -
              font-size: 13px;
         
     | 
| 
       138 
     | 
    
         
            -
              color: #888;
         
     | 
| 
       139 
     | 
    
         
            -
            }
         
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
            ul.locales {
         
     | 
| 
       142 
     | 
    
         
            -
              margin: 25px 0;
         
     | 
| 
       143 
     | 
    
         
            -
            }
         
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
            ul.locales li {
         
     | 
| 
       146 
     | 
    
         
            -
              width: 300px;
         
     | 
| 
       147 
     | 
    
         
            -
              display: block;
         
     | 
| 
       148 
     | 
    
         
            -
              float: left;
         
     | 
| 
       149 
     | 
    
         
            -
              margin: 0 10px 10px 0;
         
     | 
| 
       150 
     | 
    
         
            -
             /* background: #fff;
         
     | 
| 
       151 
     | 
    
         
            -
               -webkit-border-radius: 5px;
         
     | 
| 
       152 
     | 
    
         
            -
               -moz-border-radius: 5px;
         
     | 
| 
       153 
     | 
    
         
            -
               border-radius: 5px;
         
     | 
| 
       154 
     | 
    
         
            -
               border: 1px solid #e5e5e5;
         
     | 
| 
       155 
     | 
    
         
            -
               padding: 5px 10px;*/
         
     | 
| 
       156 
     | 
    
         
            -
            }
         
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
            ul.locales a {
         
     | 
| 
       159 
     | 
    
         
            -
              font-weight: bold;
         
     | 
| 
       160 
     | 
    
         
            -
              text-decoration: underline;
         
     | 
| 
       161 
     | 
    
         
            -
              color: #2fadcf;
         
     | 
| 
       162 
     | 
    
         
            -
            }
         
     | 
| 
       163 
     | 
    
         
            -
             
     | 
| 
       164 
     | 
    
         
            -
            /*ul.locales li:hover {
         
     | 
| 
       165 
     | 
    
         
            -
              background: #f5f5f5;
         
     | 
| 
       166 
     | 
    
         
            -
              border-color: #ccc;
         
     | 
| 
       167 
     | 
    
         
            -
            }*/
         
     | 
| 
       168 
     | 
    
         
            -
             
     | 
| 
       169 
     | 
    
         
            -
            ul.locales span.missing_translations {
         
     | 
| 
       170 
     | 
    
         
            -
              color: #fff;
         
     | 
| 
       171 
     | 
    
         
            -
              font-weight: bold;
         
     | 
| 
       172 
     | 
    
         
            -
              background: #c00;
         
     | 
| 
       173 
     | 
    
         
            -
              font-size: 9px;
         
     | 
| 
       174 
     | 
    
         
            -
              padding: 3px;
         
     | 
| 
       175 
     | 
    
         
            -
              -webkit-border-radius: 3px;
         
     | 
| 
       176 
     | 
    
         
            -
              -moz-border-radius: 3px;
         
     | 
| 
       177 
     | 
    
         
            -
              border-radius: 3px;
         
     | 
| 
       178 
     | 
    
         
            -
              line-height: 9px;
         
     | 
| 
       179 
     | 
    
         
            -
              vertical-align: top;
         
     | 
| 
       180 
     | 
    
         
            -
              display: inline-block;
         
     | 
| 
       181 
     | 
    
         
            -
            }
         
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
       183 
     | 
    
         
            -
            ul.locales span {
         
     | 
| 
       184 
     | 
    
         
            -
              font-size: 13px;
         
     | 
| 
       185 
     | 
    
         
            -
              color: #666;
         
     | 
| 
       186 
     | 
    
         
            -
            }
         
     | 
| 
       187 
     | 
    
         
            -
             
     | 
| 
       188 
     | 
    
         
            -
            div.submit {
         
     | 
| 
       189 
     | 
    
         
            -
              background: #f5f5f5;
         
     | 
| 
       190 
     | 
    
         
            -
              margin: 25px -25px -25px;
         
     | 
| 
       191 
     | 
    
         
            -
              padding: 15px 25px;
         
     | 
| 
       192 
     | 
    
         
            -
              border-top: 1px dashed #ccc;
         
     | 
| 
       193 
     | 
    
         
            -
              -webkit-border-bottom-right-radius: 20px;
         
     | 
| 
       194 
     | 
    
         
            -
              -webkit-border-bottom-left-radius: 20px;
         
     | 
| 
       195 
     | 
    
         
            -
              -moz-border-radius-bottomright: 20px;
         
     | 
| 
       196 
     | 
    
         
            -
              -moz-border-radius-bottomleft: 20px;
         
     | 
| 
       197 
     | 
    
         
            -
              border-bottom-right-radius: 20px;
         
     | 
| 
       198 
     | 
    
         
            -
              border-bottom-left-radius: 20px;
         
     | 
| 
       199 
     | 
    
         
            -
            }
         
     | 
| 
       200 
     | 
    
         
            -
             
     | 
| 
       201 
     | 
    
         
            -
            span.updated {
         
     | 
| 
       202 
     | 
    
         
            -
              font-size: 11px;
         
     | 
| 
       203 
     | 
    
         
            -
              padding: 1px;
         
     | 
| 
       204 
     | 
    
         
            -
              background: #ffc;
         
     | 
| 
       205 
     | 
    
         
            -
              color: #777;
         
     | 
| 
       206 
     | 
    
         
            -
              margin-bottom: 10px;
         
     | 
| 
       207 
     | 
    
         
            -
              float: right;
         
     | 
| 
       208 
     | 
    
         
            -
            }
         
     | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
       210 
     | 
    
         
            -
            div.table_submit {
         
     | 
| 
       211 
     | 
    
         
            -
              background: #f5f5f5;
         
     | 
| 
       212 
     | 
    
         
            -
              margin: -25px 0 0;
         
     | 
| 
       213 
     | 
    
         
            -
              padding: 12px 15px 15px;
         
     | 
| 
       214 
     | 
    
         
            -
              text-align: left;
         
     | 
| 
       215 
     | 
    
         
            -
            }
         
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
       217 
     | 
    
         
            -
            div.table_submit input.save {
         
     | 
| 
       218 
     | 
    
         
            -
              border: 0;
         
     | 
| 
       219 
     | 
    
         
            -
              font-weight: bold;
         
     | 
| 
       220 
     | 
    
         
            -
              text-decoration: none;
         
     | 
| 
       221 
     | 
    
         
            -
              font-size: 18px;
         
     | 
| 
       222 
     | 
    
         
            -
              color: #fff;
         
     | 
| 
       223 
     | 
    
         
            -
              cursor: pointer;
         
     | 
| 
       224 
     | 
    
         
            -
              border-radius: 10px;
         
     | 
| 
       225 
     | 
    
         
            -
              padding: 8px 10px;
         
     | 
| 
       226 
     | 
    
         
            -
              background: #444;
         
     | 
| 
       227 
     | 
    
         
            -
            }
         
     | 
| 
       228 
     | 
    
         
            -
             
     | 
| 
       229 
     | 
    
         
            -
             
     | 
| 
       230 
     | 
    
         
            -
            div.translations {
         
     | 
| 
       231 
     | 
    
         
            -
              width: 96%;
         
     | 
| 
       232 
     | 
    
         
            -
              text-align: center;
         
     | 
| 
       233 
     | 
    
         
            -
            }
         
     | 
| 
       234 
     | 
    
         
            -
             
     | 
| 
       235 
     | 
    
         
            -
            span.notice {
         
     | 
| 
       236 
     | 
    
         
            -
              background: #ffc;
         
     | 
| 
       237 
     | 
    
         
            -
              color: #666;
         
     | 
| 
       238 
     | 
    
         
            -
              font-size: 12px;
         
     | 
| 
       239 
     | 
    
         
            -
              padding: 2px 5px;
         
     | 
| 
       240 
     | 
    
         
            -
              margin: -5px 0 15px;
         
     | 
| 
       241 
     | 
    
         
            -
              display: inline-block;
         
     | 
| 
       242 
     | 
    
         
            -
            }
         
     | 
| 
       243 
     | 
    
         
            -
             
     | 
| 
       244 
     | 
    
         
            -
            div.previous {
         
     | 
| 
       245 
     | 
    
         
            -
              color: #999;
         
     | 
| 
       246 
     | 
    
         
            -
              margin: 5px 0;
         
     | 
| 
       247 
     | 
    
         
            -
              padding: 1px 8px 4px;
         
     | 
| 
       248 
     | 
    
         
            -
            }
         
     | 
| 
       249 
     | 
    
         
            -
             
     | 
| 
       250 
     | 
    
         
            -
            div.updated {
         
     | 
| 
       251 
     | 
    
         
            -
              background: #ffc;
         
     | 
| 
       252 
     | 
    
         
            -
              padding: 1px 8px 4px;
         
     | 
| 
       253 
     | 
    
         
            -
            }
         
     | 
| 
       254 
     | 
    
         
            -
             
     | 
| 
       255 
     | 
    
         
            -
            table.translations div.previous span.key {
         
     | 
| 
       256 
     | 
    
         
            -
              margin: 0 0 -2px;
         
     | 
| 
       257 
     | 
    
         
            -
              padding: 0;
         
     | 
| 
       258 
     | 
    
         
            -
            }
         
     | 
| 
       259 
     | 
    
         
            -
             
     | 
| 
       260 
     | 
    
         
            -
            table.translations div.updated span.key {
         
     | 
| 
       261 
     | 
    
         
            -
              margin: 0 0 -2px;
         
     | 
| 
       262 
     | 
    
         
            -
              color: orange !important;
         
     | 
| 
       263 
     | 
    
         
            -
              padding: 0;
         
     | 
| 
       264 
     | 
    
         
            -
            }
         
     | 
| 
       265 
     | 
    
         
            -
             
     | 
| 
       266 
     | 
    
         
            -
            /*-------------------------------------------------
         
     | 
| 
       267 
     | 
    
         
            -
            Translation tables
         
     | 
| 
       268 
     | 
    
         
            -
            -------------------------------------------------*/
         
     | 
| 
       269 
     | 
    
         
            -
             
     | 
| 
       270 
     | 
    
         
            -
            table.translations {
         
     | 
| 
       271 
     | 
    
         
            -
              margin: 0 0 25px;
         
     | 
| 
       272 
     | 
    
         
            -
              width: 100%;
         
     | 
| 
       273 
     | 
    
         
            -
              text-align: left;
         
     | 
| 
       274 
     | 
    
         
            -
            }
         
     | 
| 
       275 
     | 
    
         
            -
             
     | 
| 
       276 
     | 
    
         
            -
            table.translations td,
         
     | 
| 
       277 
     | 
    
         
            -
            table.translations th {
         
     | 
| 
       278 
     | 
    
         
            -
              font-size: 14px;
         
     | 
| 
       279 
     | 
    
         
            -
              color: #222;
         
     | 
| 
       280 
     | 
    
         
            -
              padding: 12px 8px;
         
     | 
| 
       281 
     | 
    
         
            -
              border-bottom: 1px solid #e5e5e5;
         
     | 
| 
       282 
     | 
    
         
            -
              vertical-align: top;
         
     | 
| 
       283 
     | 
    
         
            -
              width: 48%;
         
     | 
| 
       284 
     | 
    
         
            -
            }
         
     | 
| 
       285 
     | 
    
         
            -
             
     | 
| 
       286 
     | 
    
         
            -
            table.translations th {
         
     | 
| 
       287 
     | 
    
         
            -
              border-bottom-color: #bbb;
         
     | 
| 
       288 
     | 
    
         
            -
              font-size: 11px;
         
     | 
| 
       289 
     | 
    
         
            -
              font-weight: bold;
         
     | 
| 
       290 
     | 
    
         
            -
              text-transform: uppercase;
         
     | 
| 
       291 
     | 
    
         
            -
              color: #999;
         
     | 
| 
       292 
     | 
    
         
            -
              padding-bottom: 2px;
         
     | 
| 
       293 
     | 
    
         
            -
            }
         
     | 
| 
       294 
     | 
    
         
            -
             
     | 
| 
       295 
     | 
    
         
            -
            table.translations th.actions {
         
     | 
| 
       296 
     | 
    
         
            -
              width: 50px;
         
     | 
| 
       297 
     | 
    
         
            -
            }
         
     | 
| 
       298 
     | 
    
         
            -
             
     | 
| 
       299 
     | 
    
         
            -
            table.translations textarea.locale {
         
     | 
| 
       300 
     | 
    
         
            -
              font-family: "Lucida Sans", "Lucida Grande", "Lucida Sans Unicode", sans-serif;
         
     | 
| 
       301 
     | 
    
         
            -
              font-size: 14px;
         
     | 
| 
       302 
     | 
    
         
            -
              line-height: 21px;
         
     | 
| 
       303 
     | 
    
         
            -
              color: #222;
         
     | 
| 
       304 
     | 
    
         
            -
              padding: 1px;
         
     | 
| 
       305 
     | 
    
         
            -
              width: 100%;
         
     | 
| 
       306 
     | 
    
         
            -
              height: 42px;
         
     | 
| 
       307 
     | 
    
         
            -
            }
         
     | 
| 
       308 
     | 
    
         
            -
             
     | 
| 
       309 
     | 
    
         
            -
            table.translations span.key {
         
     | 
| 
       310 
     | 
    
         
            -
              color: #aaa;
         
     | 
| 
       311 
     | 
    
         
            -
              font-size: 9px;
         
     | 
| 
       312 
     | 
    
         
            -
              display: block;
         
     | 
| 
       313 
     | 
    
         
            -
            }
         
     | 
| 
       314 
     | 
    
         
            -
             
     | 
| 
       315 
     | 
    
         
            -
            table.translations td.translation {
         
     | 
| 
       316 
     | 
    
         
            -
              padding: 10px 8px;
         
     | 
| 
       317 
     | 
    
         
            -
            }
         
     | 
| 
       318 
     | 
    
         
            -
             
     | 
| 
       319 
     | 
    
         
            -
            table.translations td.actions {
         
     | 
| 
       320 
     | 
    
         
            -
              width: 50px;
         
     | 
| 
       321 
     | 
    
         
            -
              text-align: center;
         
     | 
| 
       322 
     | 
    
         
            -
            }
         
     | 
| 
       323 
     | 
    
         
            -
             
     | 
| 
       324 
     | 
    
         
            -
            table.translations td.actions a {
         
     | 
| 
       325 
     | 
    
         
            -
              font-weight: bold;
         
     | 
| 
       326 
     | 
    
         
            -
              text-decoration: none;
         
     | 
| 
       327 
     | 
    
         
            -
            }
         
     | 
| 
       328 
     | 
    
         
            -
             
     | 
| 
       329 
     | 
    
         
            -
            table.translations td.actions .warning {
         
     | 
| 
       330 
     | 
    
         
            -
              font-weight: bold;
         
     | 
| 
       331 
     | 
    
         
            -
              font-size: 25px;
         
     | 
| 
       332 
     | 
    
         
            -
              color: orange;
         
     | 
| 
       333 
     | 
    
         
            -
              padding: 2px 4px;
         
     | 
| 
       334 
     | 
    
         
            -
              display: none;
         
     | 
| 
       335 
     | 
    
         
            -
              cursor: help;
         
     | 
| 
       336 
     | 
    
         
            -
            }
         
     | 
| 
       337 
     | 
    
         
            -
             
     | 
| 
       338 
     | 
    
         
            -
            table.translations tr.active td {
         
     | 
| 
       339 
     | 
    
         
            -
              background: #edf9fe;
         
     | 
| 
       340 
     | 
    
         
            -
            }
         
     | 
| 
       341 
     | 
    
         
            -
             
     | 
| 
       342 
     | 
    
         
            -
            table.translations .highlight {
         
     | 
| 
       343 
     | 
    
         
            -
              background-color: yellow;
         
     | 
| 
       344 
     | 
    
         
            -
            }
         
     | 
| 
       345 
     | 
    
         
            -
             
     | 
| 
       346 
     | 
    
         
            -
            table.translations .original textarea {
         
     | 
| 
       347 
     | 
    
         
            -
              display: none;
         
     | 
| 
       348 
     | 
    
         
            -
            }
         
     | 
| 
       349 
     | 
    
         
            -
             
     | 
| 
       350 
     | 
    
         
            -
            table.translations .original .interpolation, 
         
     | 
| 
       351 
     | 
    
         
            -
            table.translations .original .carriage_return,
         
     | 
| 
       352 
     | 
    
         
            -
            table.translations .original .boolean  {
         
     | 
| 
       353 
     | 
    
         
            -
              color: #2fadcf;
         
     | 
| 
       354 
     | 
    
         
            -
              font-family: Courier, monospace;
         
     | 
| 
       355 
     | 
    
         
            -
              font-weight: bold;
         
     | 
| 
       356 
     | 
    
         
            -
              cursor: help;
         
     | 
| 
       357 
     | 
    
         
            -
            }
         
     | 
| 
       358 
     | 
    
         
            -
             
     | 
| 
       359 
     | 
    
         
            -
            table.translations .original .carriage_return:before {
         
     | 
| 
       360 
     | 
    
         
            -
              content: "¶";
         
     | 
| 
       361 
     | 
    
         
            -
            }
         
     | 
| 
       362 
     | 
    
         
            -
             
     | 
| 
       363 
     | 
    
         
            -
            /*-------------------------------------------------
         
     | 
| 
       364 
     | 
    
         
            -
            Pagination
         
     | 
| 
       365 
     | 
    
         
            -
            -------------------------------------------------*/
         
     | 
| 
       366 
     | 
    
         
            -
             
     | 
| 
       367 
     | 
    
         
            -
            div.paginate {
         
     | 
| 
       368 
     | 
    
         
            -
              margin: 15px auto 20px;
         
     | 
| 
       369 
     | 
    
         
            -
              font-size: 12px;
         
     | 
| 
       370 
     | 
    
         
            -
              color: #777;
         
     | 
| 
       371 
     | 
    
         
            -
            }
         
     | 
| 
       372 
     | 
    
         
            -
             
     | 
| 
       373 
     | 
    
         
            -
            div.paginate a,
         
     | 
| 
       374 
     | 
    
         
            -
            div.paginate span {
         
     | 
| 
       375 
     | 
    
         
            -
              padding: 2px 6px;
         
     | 
| 
       376 
     | 
    
         
            -
              text-decoration: none;
         
     | 
| 
       377 
     | 
    
         
            -
            }
         
     | 
| 
       378 
     | 
    
         
            -
             
     | 
| 
       379 
     | 
    
         
            -
            div.paginate a:hover,
         
     | 
| 
       380 
     | 
    
         
            -
            div.paginate span.current {
         
     | 
| 
       381 
     | 
    
         
            -
              -webkit-border-radius: 5px;
         
     | 
| 
       382 
     | 
    
         
            -
              -moz-border-radius: 5px;
         
     | 
| 
       383 
     | 
    
         
            -
              border-radius: 5px;
         
     | 
| 
       384 
     | 
    
         
            -
              background: #eee;
         
     | 
| 
       385 
     | 
    
         
            -
              color: #333;
         
     | 
| 
       386 
     | 
    
         
            -
            }
         
     | 
| 
       387 
     | 
    
         
            -
             
     | 
| 
       388 
     | 
    
         
            -
            div.paginate .next_page,
         
     | 
| 
       389 
     | 
    
         
            -
            div.paginate .prev_page {
         
     | 
| 
       390 
     | 
    
         
            -
             margin: 0 15px;
         
     | 
| 
       391 
     | 
    
         
            -
             -webkit-border-radius: 5px;
         
     | 
| 
       392 
     | 
    
         
            -
             -moz-border-radius: 5px;
         
     | 
| 
       393 
     | 
    
         
            -
             border-radius: 5px;
         
     | 
| 
       394 
     | 
    
         
            -
             border: 1px solid #bbb;
         
     | 
| 
       395 
     | 
    
         
            -
             padding: 4px 8px;
         
     | 
| 
       396 
     | 
    
         
            -
            }
         
     | 
| 
       397 
     | 
    
         
            -
             
     | 
| 
       398 
     | 
    
         
            -
            div.paginate .disabled {
         
     | 
| 
       399 
     | 
    
         
            -
              color: #ccc;
         
     | 
| 
       400 
     | 
    
         
            -
              border-color: #eee;
         
     | 
| 
       401 
     | 
    
         
            -
            }
         
     |