solidus_i18n 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.hound.yml +1 -1
  3. data/.travis.yml +10 -5
  4. data/Gemfile +3 -1
  5. data/app/assets/javascripts/spree/backend/edit_inline_locales.js.coffee.erb +56 -0
  6. data/app/assets/javascripts/spree/backend/helpers.js.coffee.erb +14 -0
  7. data/app/assets/javascripts/spree/backend/inline_table_locales.js.coffee +16 -0
  8. data/app/assets/javascripts/spree/backend/templates/available_locales.hbs.erb +31 -0
  9. data/app/assets/javascripts/spree/backend/translations.js.coffee +0 -2
  10. data/app/controllers/spree/api/available_locales_controller.rb +28 -0
  11. data/app/controllers/spree/locale_controller_decorator.rb +3 -4
  12. data/app/helpers/solidus_i18n/locale_helper.rb +8 -10
  13. data/app/models/spree/store_decorator.rb +13 -0
  14. data/app/overrides/spree/shared/_main_nav_bar/locale_selector.html.erb.deface +1 -1
  15. data/app/views/spree/admin/locales/show.html.erb +18 -24
  16. data/app/views/spree/api/available_locales/show.json.jbuilder +8 -0
  17. data/config/locales/bg.yml +0 -46
  18. data/config/locales/ca.yml +12 -45
  19. data/config/locales/cs.yml +0 -47
  20. data/config/locales/da.yml +0 -46
  21. data/config/locales/de-CH.yml +0 -44
  22. data/config/locales/de.yml +6 -48
  23. data/config/locales/en-AU.yml +0 -44
  24. data/config/locales/en-GB.yml +0 -46
  25. data/config/locales/en-IN.yml +1 -47
  26. data/config/locales/en-NZ.yml +0 -44
  27. data/config/locales/es-CL.yml +0 -48
  28. data/config/locales/es-EC.yml +0 -46
  29. data/config/locales/es-MX.yml +8 -49
  30. data/config/locales/es.yml +13 -59
  31. data/config/locales/et.yml +0 -46
  32. data/config/locales/fa.yml +0 -44
  33. data/config/locales/fi.yml +0 -46
  34. data/config/locales/fr.yml +656 -55
  35. data/config/locales/id.yml +1 -45
  36. data/config/locales/it.yml +0 -46
  37. data/config/locales/ja.yml +6 -52
  38. data/config/locales/ko.yml +0 -44
  39. data/config/locales/lv.yml +0 -44
  40. data/config/locales/nb.yml +0 -44
  41. data/config/locales/nl.yml +0 -46
  42. data/config/locales/pl.yml +0 -46
  43. data/config/locales/pt-BR.yml +1059 -237
  44. data/config/locales/pt.yml +0 -44
  45. data/config/locales/ro.yml +0 -46
  46. data/config/locales/ru.yml +0 -47
  47. data/config/locales/sk.yml +0 -44
  48. data/config/locales/sl-SI.yml +0 -44
  49. data/config/locales/sv.yml +0 -46
  50. data/config/locales/th.yml +0 -44
  51. data/config/locales/tr.yml +0 -44
  52. data/config/locales/uk.yml +0 -48
  53. data/config/locales/vi.yml +0 -44
  54. data/config/locales/zh-CN.yml +0 -44
  55. data/config/locales/zh-TW.yml +0 -44
  56. data/config/routes.rb +6 -0
  57. data/db/migrate/20170523151209_add_available_locales_on_store.rb +14 -0
  58. data/lib/solidus_i18n/controller_locale_helper.rb +1 -1
  59. data/lib/solidus_i18n/engine.rb +0 -1
  60. data/lib/solidus_i18n/locale.rb +3 -7
  61. data/lib/solidus_i18n/version.rb +1 -1
  62. data/solidus_i18n.gemspec +4 -3
  63. data/spec/controllers/locales_controller_spec.rb +2 -1
  64. data/spec/features/admin/translations_spec.rb +30 -8
  65. data/spec/features/translations_spec.rb +3 -1
  66. data/spec/helpers/locale_helper_spec.rb +35 -0
  67. data/spec/lib/solidus_i18n/locale_spec.rb +53 -0
  68. data/spec/support/capybara.rb +2 -7
  69. metadata +35 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dfb020944a1343dc92cbd2b35fa80043d6b2055ff55806192f7c8b2529142bcb
4
- data.tar.gz: a68b7f59d0c89f5795d22cff8224d7f40c97007aecbd2ef4989d1aa4cea7afab
3
+ metadata.gz: 0de9177ef69dd299f196ad557a46b1bae3bed9cae5e7895355564802330c04eb
4
+ data.tar.gz: 9e3f5ff6b46eb825e22b85797025cbd63c4cc2b0b6a7b689bd11f06333c16df2
5
5
  SHA512:
6
- metadata.gz: 6cb6719bec0ffba480b8a39d5cf6822bf773bd7c87ad8fe1180ae09ea69053594c72171b47a1abca4bb3b9680543b1178f7bf8ec7e4247291c7ac37135f07a20
7
- data.tar.gz: 7a42835eacaf1139b3394b0b1196bcb3cfcf0ca81029eb4e626b6f823bfa706e1b88c6eef14dea57ab89479c07baf57aba58dce8f5f30b8dda573ded08019c19
6
+ metadata.gz: 4d200695f22be7bbc14d2b0cab0c97b589024b0ece7595e18a8c8ea2759a14791d76013810dbd93394c2dee5e5f63de3d6a284f6a60c7dfc3f7da5dc177f26eb
7
+ data.tar.gz: fa2f1672afdeb8be73d6b4e414ffba0d6bf21b69e3341a9743479171c524dd160833b2a5d5f8125c646f1c1e8f597b1e19fb8f73cd67a591f01d63095e605a03
data/.hound.yml CHANGED
@@ -8,7 +8,7 @@ Style/Documentation:
8
8
  Enabled: false
9
9
 
10
10
  # Neatly aligned code is too swell.
11
- Style/SingleSpaceBeforeFirstArg:
11
+ Layout/SpaceBeforeFirstArg:
12
12
  Enabled: false
13
13
 
14
14
  # Don't mess with RSpec DSL.
@@ -1,11 +1,14 @@
1
- # Need to stay on precise until Travis fixes their MySQL problems
2
- # See: https://github.com/travis-ci/travis-ci/issues/8331
3
- dist: precise
4
- sudo: false
1
+ dist: trusty
2
+ sudo: required
3
+ addons:
4
+ chrome: stable
5
5
  cache: bundler
6
6
  language: ruby
7
+ before_install:
8
+ - gem update --system # https://github.com/travis-ci/travis-ci/issues/8978
9
+ - gem install bundler
7
10
  rvm:
8
- - 2.3.1
11
+ - 2.5
9
12
  env:
10
13
  matrix:
11
14
  - SOLIDUS_BRANCH=v1.1 DB=postgres
@@ -17,6 +20,7 @@ env:
17
20
  - SOLIDUS_BRANCH=v2.2 DB=postgres
18
21
  - SOLIDUS_BRANCH=v2.3 DB=postgres
19
22
  - SOLIDUS_BRANCH=v2.4 DB=postgres
23
+ - SOLIDUS_BRANCH=v2.5 DB=postgres
20
24
  - SOLIDUS_BRANCH=master DB=postgres
21
25
  - SOLIDUS_BRANCH=v1.1 DB=mysql
22
26
  - SOLIDUS_BRANCH=v1.2 DB=mysql
@@ -27,4 +31,5 @@ env:
27
31
  - SOLIDUS_BRANCH=v2.2 DB=mysql
28
32
  - SOLIDUS_BRANCH=v2.3 DB=mysql
29
33
  - SOLIDUS_BRANCH=v2.4 DB=mysql
34
+ - SOLIDUS_BRANCH=v2.5 DB=mysql
30
35
  - SOLIDUS_BRANCH=master DB=mysql
data/Gemfile CHANGED
@@ -9,9 +9,11 @@ else
9
9
  gem "rails_test_params_backport", group: :test
10
10
  end
11
11
 
12
+ gem 'chromedriver-helper' if ENV['CI']
13
+
12
14
  gem 'pg', '~> 0.21'
13
15
  gem 'sqlite3'
14
- gem 'mysql2'
16
+ gem 'mysql2', '~> 0.4.10'
15
17
 
16
18
  group :development, :test do
17
19
  gem "pry-rails"
@@ -0,0 +1,56 @@
1
+ Spree.EditInlineLocales = Backbone.View.extend(
2
+ initialize: ->
3
+ @editing = false
4
+ @render()
5
+
6
+ events:
7
+ 'click [data-action=edit]': 'onEdit'
8
+ 'click [data-action=save]': 'onSave'
9
+ 'click [data-action=cancel]': 'onCancel'
10
+
11
+ onEdit: (e) ->
12
+ return if @editing
13
+ @$el.addClass 'editing'
14
+ @editing = true
15
+ @render()
16
+
17
+ onCancel: (e) ->
18
+ e.preventDefault()
19
+ @$el.removeClass("editing")
20
+ @editing = false
21
+ @render()
22
+
23
+ onSave: (e) ->
24
+ e.preventDefault()
25
+ preferred_available_locales = $('#available-locales-store-' + @model.id)
26
+ Spree.ajax
27
+ type: 'PUT'
28
+ url: Spree.routes.available_locales_api + '/' + @model.id + '.json'
29
+ data:
30
+ store:
31
+ preferred_available_locales: preferred_available_locales.val()
32
+ success: (response) =>
33
+ @model = response.store
34
+ @editing = false
35
+ @$el.removeClass("editing")
36
+ @render()
37
+ error: (response) =>
38
+ show_flash 'error', response.responseJSON.error
39
+
40
+ render: ->
41
+ renderAttr =
42
+ availableLocales: <%= SolidusI18n::Locale.all.push(:en).to_json %>
43
+ availableLocalesPresentation: <%= Hash[(SolidusI18n::Locale.all + [:en]).map do |locale|
44
+ [locale, Spree.t(:'i18n.this_file_language', locale: locale)]
45
+ end].to_json %>
46
+ store: @model
47
+ editing: @editing
48
+ _.extend(renderAttr, @model.attributes)
49
+
50
+ @$el.html(HandlebarsTemplates['available_locales'](renderAttr))
51
+ $('.available-locales').select2({placeholder: Spree.translations['please_choose_language'], width: 'element'})
52
+
53
+ return @
54
+ )
55
+
56
+ Spree.routes.available_locales_api = Spree.pathFor('api/config/available_locales');
@@ -0,0 +1,14 @@
1
+ window.Handlebars.registerHelper 'locale-presentation', (locale, localePresentationHashmap, options) ->
2
+ localePresentationHashmap[locale]
3
+
4
+ window.Handlebars.registerHelper 'selected', (locale, store, options) ->
5
+ for k of store.preferences.available_locales
6
+ value = store.preferences.available_locales[k]
7
+ return 'selected="selected"' if value == locale
8
+
9
+ window.Handlebars.registerHelper 'store-available-locales', (store, options) ->
10
+ locales = for k of store.preferences.available_locales
11
+ locale = store.preferences.available_locales[k]
12
+ @availableLocalesPresentation[locale]
13
+
14
+ locales.join(',')
@@ -0,0 +1,16 @@
1
+ Spree.InlineTableLocales = Backbone.View.extend(
2
+ initialize: ->
3
+ if @$el.length
4
+ Spree.ajax({
5
+ type: 'GET'
6
+ url: "/api/config/available_locales"
7
+ success: (collection) =>
8
+ for store in collection
9
+ row = $("<tr id='store-id-#{store.id}'/>")
10
+ @$el.append(row)
11
+ new Spree.EditInlineLocales({
12
+ el: row
13
+ model: store
14
+ });
15
+ })
16
+ )
@@ -0,0 +1,31 @@
1
+ <td>
2
+ {{store.name}}
3
+ {{#if store.default}}
4
+ <span class="label label-default">default</span>
5
+ {{/if}}
6
+ </td>
7
+ <td>{{store.url}}</td>
8
+ <td>
9
+ {{#if editing}}
10
+ <select id='available-locales-store-{{store.id}}' class='available-locales select2 fullwidth' name='store[preferred_available_locales][]' multiple='true'>
11
+ {{#each availableLocales}}
12
+ <option value="{{ this }}" {{#selected this ../store}}{{/selected}}>
13
+ {{#locale-presentation this ../availableLocalesPresentation}}{{/locale-presentation}}
14
+ </option>
15
+ {{/each}}
16
+ </select>
17
+ {{else}}
18
+ {{store-available-locales store availableLocales}}
19
+ {{#each store.preferences.available_locales}}
20
+ {{locale-presentation this}}
21
+ {{/each}}
22
+ {{/if}}
23
+ </td>
24
+ <td class="actions">
25
+ {{#if editing}}
26
+ <a class="fa fa-check icon_link with-tip no-text" data-action="save" data-id="{{id}}" href="#"></a>
27
+ <a class="fa fa-cancel icon_link with-tip no-text" data-action="cancel" data-id="{{id}}" href="#"></a>
28
+ {{else}}
29
+ <a class="fa fa-edit icon_link with-tip no-text" data-action="edit" data-id="{{id}}" href="#"></a>
30
+ {{/if}}
31
+ </td>
@@ -1,5 +1,3 @@
1
1
  $ ->
2
2
  _.extend (Spree.translations),
3
3
  please_choose_language: "<%= Spree.t(:'i18n.choose_language') %>"
4
-
5
- $('#available_locales_').select2({placeholder: Spree.translations['please_choose_language']})
@@ -0,0 +1,28 @@
1
+ module Spree
2
+ module Api
3
+ class AvailableLocalesController < Spree::Api::BaseController
4
+ def index
5
+ respond_with Store.all
6
+ end
7
+
8
+ def update
9
+ authorize! :update, store
10
+ if store.update_attributes(store_params)
11
+ respond_with(store, status: 200, default_template: :show)
12
+ else
13
+ invalid_resource!(store)
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def store_params
20
+ params.require(:store).permit(preferred_available_locales: [])
21
+ end
22
+
23
+ def store
24
+ @store ||= Store.find(params[:id])
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,6 +1,5 @@
1
1
  Spree::LocaleController.class_eval do
2
- def set
3
- redirect_to root_path(locale: params[:switch_to_locale])
4
- end
2
+ def set
3
+ redirect_to root_path(locale: params[:switch_to_locale])
4
+ end
5
5
  end
6
-
@@ -1,21 +1,19 @@
1
1
  module SolidusI18n
2
2
  module LocaleHelper
3
-
4
- def select_available_locales
5
- select_tag('available_locales[]', options_for_select(
6
- all_locales_options,
7
- Config.available_locales
8
- ), common_options)
3
+ def select_available_locales(store = nil)
4
+ select_tag('store[preferred_available_locales][]',
5
+ options_for_select(
6
+ all_locales_options,
7
+ store.preferred_available_locales
8
+ ), common_options)
9
9
  end
10
10
 
11
11
  def available_locales_options
12
- Config.available_locales.map { |locale| locale_presentation(locale) }
12
+ current_store.preferred_available_locales.map { |locale| locale_presentation(locale) }
13
13
  end
14
14
 
15
- # Need to manually add en to the array because the en.yml was moved from
16
- # this project. solidusio/solidus now has those keys.
17
15
  def all_locales_options
18
- SolidusI18n::Locale.all.map { |locale| locale_presentation(locale) }.push(['English (EN)', :en])
16
+ SolidusI18n::Locale.all.map { |locale| locale_presentation(locale) }
19
17
  end
20
18
 
21
19
  private
@@ -0,0 +1,13 @@
1
+ module SolidusI18n
2
+ module AddAvailableLanguagesPreferenceToStore
3
+ def self.prepended(base)
4
+ base.preference :available_locales, :array, default: [:en]
5
+ end
6
+
7
+ def preferred_available_locales
8
+ super.map(&:to_sym)
9
+ end
10
+ end
11
+
12
+ Spree::Store.prepend AddAvailableLanguagesPreferenceToStore
13
+ end
@@ -1,5 +1,5 @@
1
1
  <!-- insert_bottom '#main-nav-bar' -->
2
- <% if SolidusI18n::Config.available_locales.many? %>
2
+ <% if current_store.preferred_available_locales.many? %>
3
3
  <li id="locale-select" data-hook>
4
4
  <%= form_tag spree.set_locale_path, class: 'navbar-form' do %>
5
5
  <div class="form-group">
@@ -1,27 +1,21 @@
1
1
  <%= render 'spree/admin/shared/configuration_menu' %>
2
2
 
3
- <%= form_tag admin_locale_path, method: :patch do %>
4
- <div class="panel panel-default panel-localization">
5
- <div class="panel-heading">
6
- <h1 class="panel-title">
7
- <%= Spree.t(:'i18n.localization_settings') %>
8
- </h1>
9
- </div>
3
+ <table class="index locales-settings">
4
+ <thead>
5
+ <tr>
6
+ <th><%= Spree::Store.human_attribute_name(:name) %></th>
7
+ <th><%= Spree::Store.human_attribute_name(:url) %></th>
8
+ <th><%= Spree.t(:'i18n.locales_displayed_on_frontend_select_box') %></th>
9
+ <th class="actions"></th>
10
+ </tr>
11
+ </thead>
12
+ <tbody>
13
+ <%# Rendered by JS %>
14
+ </tbody>
15
+ </table>
10
16
 
11
- <div class="panel-body" data-hook="localization_settings_body">
12
- <div class="form-group">
13
- <label for="available_locales_">
14
- <%= Spree.t(:'i18n.available_locales') %>
15
- </label>
16
- <%= select_available_locales %>
17
- <p class="help-block">
18
- <%= Spree.t(:'i18n.locales_displayed_on_frontend_select_box') %>
19
- </p>
20
- </div>
21
- </div>
22
- </div>
23
-
24
- <div class="form-buttons filter-actions actions" data-hook="buttons">
25
- <%= button Spree.t('actions.update') %>
26
- </div>
27
- <% end %>
17
+ <script>
18
+ Spree.ready(function(){
19
+ new Spree.InlineTableLocales({ el: $("table.locales-settings > tbody") });
20
+ })
21
+ </script>
@@ -0,0 +1,8 @@
1
+ json.store do
2
+ json.extract!(@store, :id, :name, :url, :meta_description, :meta_keywords,
3
+ :seo_title, :mail_from_address, :default_currency, :code, :default)
4
+
5
+ json.preferences do
6
+ json.available_locales @store.preferences[:available_locales]
7
+ end
8
+ end
@@ -275,52 +275,6 @@ bg:
275
275
  spree/zone:
276
276
  one: Zone Зона
277
277
  other: "Зони"
278
- devise:
279
- confirmations:
280
- confirmed: "Вашият акаунт е потвърден. Вече сте вписан."
281
- send_instructions: "До няколко минути ще получите съобщение с обяснение как да потвърдите своя акаунт."
282
- failure:
283
- inactive: "Вашият акаунт все още не е активен."
284
- invalid: "Грешен имейл или парола"
285
- invalid_token: Invalid authentication token.
286
- locked: "Вашият акаунт е заключен."
287
- timeout: "Вашата сесия е изтекла, моля влезте повторно."
288
- unauthenticated: "Трябва да се впишете или регистрирате преди да продължите"
289
- unconfirmed: "Трябва да потвърдите акаунта си преди да продължите."
290
- mailer:
291
- confirmation_instructions:
292
- subject: "Инструкции за потвърждаване"
293
- reset_password_instructions:
294
- subject: Reset password instructions Инструкции за смяна на паролата
295
- unlock_instructions:
296
- subject: "Инструкции за отключване"
297
- oauth_callbacks:
298
- failure: Could not authorise you from %{kind} because %{reason}.
299
- success: Successfully authorised from %{kind} account.
300
- unlocks:
301
- send_instructions: "До няколко минути ще получите имейл с инструкции как да отключите своя акаунт."
302
- unlocked: "Вашият акаунт бе отключен успешно. Вече сте вписани."
303
- user_passwords:
304
- user:
305
- cannot_be_blank: "Вашата парола не може бъде празна"
306
- send_instructions: "До няколко минути ще получите имейл с инструкции как да промените паролата си."
307
- updated: "Вашата парола бе променена успешко. Вече сте вписани."
308
- user_registrations:
309
- destroyed: "Вашият акаунт бе отменен успешно. Надяваме се да ви видим скоро."
310
- inactive_signed_up: You have signed up successfully. However, we could not sign you in because your account is %{reason}.
311
- signed_up: "Вие се регистрирахте успешно."
312
- updated: "Успешно обновихте своя акаунт."
313
- user_sessions:
314
- signed_in: "Успешно влизане"
315
- signed_out: "Успешно излизане"
316
- errors:
317
- messages:
318
- already_confirmed: "Вече бе потвърден"
319
- not_found: "не намерен"
320
- not_locked: "не бе заключен"
321
- not_saved:
322
- one: "Една грешка предоотврати запазването на %{resource}"
323
- other: "%{count} грешки предоотвратиха запазването на %{resource}"
324
278
  spree:
325
279
  abbreviation: "Абривиатура"
326
280
  accept:
@@ -281,50 +281,6 @@ ca:
281
281
  spree/zone:
282
282
  one: Zona
283
283
  other:
284
- devise:
285
- confirmations:
286
- confirmed:
287
- send_instructions:
288
- failure:
289
- inactive: El seu compte no s'ha estat activat encara.
290
- invalid: Correu electrònic o contrasenya no vàlids.
291
- invalid_token: Token d'autenticació no vàlid.
292
- locked: El seu compte està bloquejat.
293
- timeout:
294
- unauthenticated:
295
- unconfirmed:
296
- mailer:
297
- confirmation_instructions:
298
- subject:
299
- reset_password_instructions:
300
- subject:
301
- unlock_instructions:
302
- subject:
303
- oauth_callbacks:
304
- failure:
305
- success:
306
- unlocks:
307
- send_instructions:
308
- unlocked:
309
- user_passwords:
310
- user:
311
- cannot_be_blank:
312
- send_instructions:
313
- updated:
314
- user_registrations:
315
- destroyed:
316
- inactive_signed_up:
317
- signed_up:
318
- updated:
319
- user_sessions:
320
- signed_in:
321
- signed_out:
322
- errors:
323
- messages:
324
- already_confirmed:
325
- not_found: no trobat
326
- not_locked:
327
- not_saved:
328
284
  spree:
329
285
  abbreviation: Abreviatura
330
286
  accept:
@@ -1027,7 +983,18 @@ ca:
1027
983
  receive: rebre
1028
984
  receive_stock:
1029
985
  received: Rebut
1030
- reception_status:
986
+ reception_states:
987
+ awaiting: En espera
988
+ cancelled: Cancel·lat
989
+ expired: Expirat
990
+ given_to_customer: Entregat al client
991
+ in_transit: En trànsit
992
+ lost_in_transit: Perdut en trànsit
993
+ received: Rebut
994
+ shipped_wrong_item: Article incorrecte
995
+ short_shipped: No inclòs en l'enviament
996
+ unexchanged: Sense canvis
997
+ reception_status: Estat de recepció
1031
998
  reference:
1032
999
  refund: Retornar
1033
1000
  refund_amount_must_be_greater_than_zero: