solidus_i18n 1.2.0 → 1.3.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.
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: