cama_language_editor 1.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 (55) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +37 -0
  4. data/app/assets/javascripts/plugins/cama_language_editor/admin.js +43 -0
  5. data/app/assets/stylesheets/plugins/cama_language_editor/admin.css.scss +80 -0
  6. data/app/controllers/plugins/cama_language_editor/admin_controller.rb +7 -0
  7. data/app/helpers/plugins/cama_language_editor/main_helper.rb +74 -0
  8. data/app/views/plugins/cama_language_editor/admin/index.html.erb +53 -0
  9. data/config/camaleon_plugin.json +18 -0
  10. data/config/initializers/custom_models.rb +3 -0
  11. data/config/locales/en.yml +192 -0
  12. data/config/locales/es.yml +175 -0
  13. data/config/routes.rb +18 -0
  14. data/lib/cama_language_editor/engine.rb +4 -0
  15. data/lib/cama_language_editor/version.rb +3 -0
  16. data/lib/cama_language_editor.rb +4 -0
  17. data/lib/tasks/cama_language_editor_tasks.rake +4 -0
  18. data/test/cama_language_editor_test.rb +7 -0
  19. data/test/dummy/README.rdoc +28 -0
  20. data/test/dummy/Rakefile +6 -0
  21. data/test/dummy/app/assets/javascripts/application.js +13 -0
  22. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  23. data/test/dummy/app/controllers/application_controller.rb +5 -0
  24. data/test/dummy/app/helpers/application_helper.rb +2 -0
  25. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  26. data/test/dummy/bin/bundle +3 -0
  27. data/test/dummy/bin/rails +4 -0
  28. data/test/dummy/bin/rake +4 -0
  29. data/test/dummy/bin/setup +29 -0
  30. data/test/dummy/config/application.rb +26 -0
  31. data/test/dummy/config/boot.rb +5 -0
  32. data/test/dummy/config/database.yml +25 -0
  33. data/test/dummy/config/environment.rb +5 -0
  34. data/test/dummy/config/environments/development.rb +41 -0
  35. data/test/dummy/config/environments/production.rb +79 -0
  36. data/test/dummy/config/environments/test.rb +42 -0
  37. data/test/dummy/config/initializers/assets.rb +11 -0
  38. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  39. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  40. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  41. data/test/dummy/config/initializers/inflections.rb +16 -0
  42. data/test/dummy/config/initializers/mime_types.rb +4 -0
  43. data/test/dummy/config/initializers/session_store.rb +3 -0
  44. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  45. data/test/dummy/config/locales/en.yml +23 -0
  46. data/test/dummy/config/routes.rb +56 -0
  47. data/test/dummy/config/secrets.yml +22 -0
  48. data/test/dummy/config.ru +4 -0
  49. data/test/dummy/public/404.html +67 -0
  50. data/test/dummy/public/422.html +67 -0
  51. data/test/dummy/public/500.html +66 -0
  52. data/test/dummy/public/favicon.ico +0 -0
  53. data/test/integration/navigation_test.rb +8 -0
  54. data/test/test_helper.rb +20 -0
  55. metadata +165 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1d6f38af1223fbad9a63c215a146054fe2e65752
4
+ data.tar.gz: a4e41d95f7bef0f0aa542d6d8d2c2eea01712e44
5
+ SHA512:
6
+ metadata.gz: 19e5a62f192ad6c507493a3fbebd8f0269f0ab81d36f426711f7e3cd54cc3fcdb81641d68fb05573b2de7bf605ff31f42bbdea5dc7488925e2ea4ee1272303ab
7
+ data.tar.gz: 82505819b8cc7ef261b120137f0300d3a28cfa7e763901b78e19bb1b9bc63ea989f29162ffe0866f8b0b98514d282ae5029f8583c7f196e529e12e7f4a3e05b8
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2016 Owen Peredo
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'CamaLanguageEditor'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ Bundler::GemHelper.install_tasks
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'lib'
31
+ t.libs << 'test'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+
37
+ task default: :test
@@ -0,0 +1,43 @@
1
+ jQuery(function(){
2
+ $.fn.extend({
3
+ treed: function (openedClass, closedClass, onChange) {
4
+ var openedClass = openedClass || 'glyphicon-minus-sign';
5
+ var closedClass = closedClass || 'glyphicon-plus-sign';
6
+
7
+ //initialize each of the top levels
8
+ var tree = $(this);
9
+ tree.addClass("tree");
10
+ tree.on('click', 'li.branch', function (e, skip_recursive) {
11
+ if (this == e.target) {
12
+ var icon = $(this).children('i:first');
13
+ icon.toggleClass(openedClass + " " + closedClass);
14
+ $(this).children().children().toggle();
15
+ if(onChange && !skip_recursive) onChange($(this))
16
+ }
17
+ e.stopPropagation();
18
+ });
19
+
20
+ tree.on('click', '.branch .indicator', function(){ $(this).closest('li').click(); });
21
+ }
22
+ });
23
+
24
+ var panel = $('#translations_editor_table')
25
+ $('#translations_editor_form .mode_copy').click(function(){
26
+ var btn = $(this);
27
+ var edit_mode = btn.hasClass('is_edit_mode');
28
+ if(edit_mode) btn.removeClass('is_edit_mode');
29
+ else btn.addClass('is_edit_mode');
30
+ panel.find('input').each(function(){
31
+ if(edit_mode){
32
+ $(this).show().next().remove();
33
+ }else{
34
+ $(this).hide().after("<span class='input-group-addon copy_mode_label'>\""+$(this).val().replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '\\\"')+"\"</span>");
35
+ }
36
+ });
37
+ });
38
+
39
+ $('#translations_editor_table .translation_column').treed(null, null, function(li, e){
40
+ $('#translations_editor_table li.'+li.attr('data-class')).not(li).trigger('click', [true]);
41
+ });
42
+
43
+ });
@@ -0,0 +1,80 @@
1
+ #translations_editor_table{
2
+ .tree, .tree ul {
3
+ margin:0;
4
+ padding:0;
5
+ list-style:none
6
+ }
7
+ .tree ul {
8
+ margin-left:1em;
9
+ position:relative
10
+ }
11
+ .tree ul ul {
12
+ margin-left:.5em
13
+ }
14
+ .tree ul:before {
15
+ content:"";
16
+ display:block;
17
+ width:0;
18
+ position:absolute;
19
+ top:0;
20
+ bottom:0;
21
+ left:0;
22
+ border-left:1px solid
23
+ }
24
+ .tree li {
25
+ margin:0;
26
+ padding:0 1em;
27
+ line-height:2em;
28
+ color:#369;
29
+ font-weight:700;
30
+ position:relative;
31
+ padding-right: 0;
32
+ }
33
+ .tree ul li:before {
34
+ content:"";
35
+ display:block;
36
+ width:10px;
37
+ height:0;
38
+ border-top:1px solid;
39
+ margin-top:-1px;
40
+ position:absolute;
41
+ top:1em;
42
+ left:0
43
+ }
44
+ .tree ul li:last-child:before {
45
+ background:#fff;
46
+ height:auto;
47
+ top:1em;
48
+ bottom:0
49
+ }
50
+ .indicator {
51
+ margin-right:5px;
52
+ }
53
+ .tree li a {
54
+ text-decoration: none;
55
+ color:#369;
56
+ }
57
+ .tree li button, .tree li button:active, .tree li button:focus {
58
+ text-decoration: none;
59
+ color:#369;
60
+ border:none;
61
+ background:transparent;
62
+ margin:0px 0px 0px 0px;
63
+ padding:0px 0px 0px 0px;
64
+ outline: 0;
65
+ }
66
+ div.form-control{
67
+ padding: 0;
68
+ border: none;
69
+ }
70
+ .input-group-addon{
71
+ font-size: 10px;
72
+ min-width: 150px;
73
+ }
74
+ input{
75
+ font-weight: normal;
76
+ }
77
+ .copy_mode_label{
78
+ text-align: left !important;
79
+ }
80
+ }
@@ -0,0 +1,7 @@
1
+ class Plugins::CamaLanguageEditor::AdminController < CamaleonCms::Apps::PluginsAdminController
2
+ include Plugins::CamaLanguageEditor::MainHelper
3
+ breadcrumb_add('Translations Editor')
4
+ def index
5
+ # actions for admin panel
6
+ end
7
+ end
@@ -0,0 +1,74 @@
1
+ module Plugins::CamaLanguageEditor::MainHelper
2
+ def self.included(klass)
3
+ # klass.helper_method [:my_helper_method] rescue "" # here your methods accessible from views
4
+ end
5
+
6
+ # here all actions on going to active
7
+ # you can run sql commands like this:
8
+ # results = ActiveRecord::Base.connection.execute(query);
9
+ # plugin: plugin model
10
+ def cama_language_editor_on_active(plugin)
11
+ end
12
+
13
+ # here all actions on going to inactive
14
+ # plugin: plugin model
15
+ def cama_language_editor_on_inactive(plugin)
16
+ end
17
+
18
+ # here all actions to upgrade for a new version
19
+ # plugin: plugin model
20
+ def cama_language_editor_on_upgrade(plugin)
21
+ end
22
+
23
+ def cama_language_plugin_options(args)
24
+ args[:links] << link_to('Access to Editor', admin_plugins_cama_language_editor_index_url)
25
+ end
26
+
27
+ def cama_language_render_item_translations(groups, base_key = nil, res = [], p_keys = [])
28
+ res_html = groups.map{|g| "" }
29
+ all_attrs = PluginRoutes.static_system_info['available_languages'].map{|_l| cama_language_get_hash_value(I18n.backend.send(:translations)[_l.to_sym], base_key.split(':') + p_keys) }
30
+ all_attrs.map{|g| g.keys || [] }.flatten.uniq.sort_by{|k| groups.map{|_g| _g[k].is_a?(Hash) ? 1 : 0 }.reduce(&:+) }.each do |key|
31
+ key_ori = key; key = 'no' if key === false; key = 'yes' if key === true
32
+ key = key.to_s
33
+ has_children = false
34
+ _groups = []
35
+ groups.each_with_index do |g, index|
36
+ res[index] = {} if res[index].nil?
37
+ _g = p_keys.present? ? cama_language_get_hash_value(res[index], p_keys.dup) : res[index]
38
+ _g[key] = g[key.to_sym] || g[key_ori] || {}
39
+ _groups[index] = _g[key]
40
+ end
41
+
42
+ all_attrs.each{|_g| has_children = true if _g[key.to_sym].is_a?(Hash) } # check if there exist any key with sub items
43
+
44
+ if has_children
45
+ cama_language_render_item_translations(_groups, base_key, res, p_keys + [key]).each_with_index do |html_g, index|
46
+ res_html[index] << "<li data-class='#{(p_keys+[key]).join('_')}' class='branch #{(p_keys+[key]).join('_')}'> <i class='indicator glyphicon glyphicon-minus-sign'></i>
47
+ <label>#{'&nbsp;' * (((p_keys.size+1)*2)-1)}#{key}: </label>
48
+ <ul class='list-group'> #{html_g} </ul>
49
+ </li>"
50
+ end
51
+ else
52
+ _groups.each_with_index do |g_val, index|
53
+ res_html[index] << "<li><div class='input-group form-control'><span class='input-group-addon' style='text-align: left !important;'><b>#{'&nbsp;' * ((p_keys.size+1)*2)}#{key}: </b></span><input type='text' class='form-control' value='#{(g_val.is_a?(Hash) ? '' : g_val).gsub("'", "\\\'") }'></div></li>"
54
+ end
55
+ end
56
+ end
57
+ # res
58
+ res_html
59
+ end
60
+
61
+ # return the value of a hash with a recursive keys
62
+ # keys: (Array of keys) [:a, :b, :c]
63
+ # g: Hash with all values from where get the value
64
+ def cama_language_get_hash_value(g, keys)
65
+ k = keys.shift
66
+ g = g[k.to_sym]
67
+ (keys.any? ? cama_language_get_hash_value(g || {}, keys) : g) || {}
68
+ end
69
+
70
+ def cama_language_get_hash_value2(g, keys)
71
+ k = keys.shift
72
+ (keys.any? ? cama_language_get_hash_value(g[k] || {}, keys) : g[keys]) || {}
73
+ end
74
+ end
@@ -0,0 +1,53 @@
1
+ <% params[:prefix] = 'camaleon_cms' unless params[:prefix].present? %>
2
+ <% params[:left_column] ||= 'en' %>
3
+ <% params[:right_column] ||= 'es' %>
4
+ <%= stylesheet_link_tag(plugin_asset_path('admin')) %>
5
+ <%= javascript_include_tag(plugin_asset_path('admin')) %>
6
+ <% languages = [params[:left_column], params[:right_column]] %>
7
+
8
+ <% r = cama_language_render_item_translations(languages.map{|_l| cama_language_get_hash_value(I18n.backend.send(:translations)[_l.to_sym], params[:prefix].split(":")) || {} }, params[:prefix]) %>
9
+ <%= form_tag url_for(action: :index), id: 'translations_editor_form', method: :get, class: 'row' do %>
10
+ <div class="col-md-6">
11
+ <div class="row">
12
+ <div class="col-md-6">
13
+ <label>Left Column</label><br>
14
+ <%= select_tag :left_column, options_for_select(PluginRoutes.static_system_info['available_languages'], params[:left_column]), class: 'form-control' %>
15
+ </div>
16
+
17
+ <div class="col-md-6">
18
+ <label>Right Column</label><br>
19
+ <%= select_tag :right_column, options_for_select(PluginRoutes.static_system_info['available_languages'], params[:right_column]), class: 'form-control' %>
20
+ </div>
21
+ </div>
22
+
23
+ </div>
24
+ <div class="col-md-6">
25
+ <small>Enter your prefix to filter specific translations, sample: plugins:ecommerce | camaleon_cms:admin</small>
26
+ <br>
27
+ <div class="input-group">
28
+ <span class="input-group-addon">Prefix</span>
29
+ <%= text_field_tag 'prefix', params[:prefix], class: 'form-control' %>
30
+ <span class="input-group-btn">
31
+ <button class="btn btn-secondary" type="submit">Load Translations</button>
32
+ <button type="button" class="btn btn-primary mode_copy">Copy Mode</button>
33
+ </span>
34
+ </div>
35
+ </div>
36
+ <% end %>
37
+ <hr>
38
+
39
+ <div class="clearfix"></div>
40
+ <div id="translations_editor_table" class="row">
41
+ <% r.each_with_index do |g, index| %>
42
+ <div class="col-md-6">
43
+ <div class="panel panel-default">
44
+ <div class="panel-heading"><h4><%= languages[index] %>:<%= params[:prefix] %>:</h4></div>
45
+ <div class="panel-body translation_column tree">
46
+ <ul>
47
+ <%= raw g %>
48
+ </ul>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ <% end %>
53
+ </div>
@@ -0,0 +1,18 @@
1
+ {
2
+ "title": "Cama Language Editor",
3
+ "descr": "",
4
+ "key": "cama_language_editor",
5
+ "helpers": [
6
+ "Plugins::CamaLanguageEditor::MainHelper"
7
+ ],
8
+ "hooks": {
9
+ "on_active": [
10
+ "cama_language_editor_on_active"
11
+ ],
12
+ "on_inactive": [
13
+ "cama_language_editor_on_inactive"
14
+ ],
15
+ "plugin_options": ["cama_language_plugin_options"]
16
+ //here you can add all your hooks (read documentation)
17
+ }
18
+ }
@@ -0,0 +1,3 @@
1
+ # CamaleonCms::Site.class_eval do
2
+ # has_many :attack, class_name: "Plugins::Attack::Models::Attack"
3
+ # end
@@ -0,0 +1,192 @@
1
+ en:
2
+ plugin:
3
+ ecommerce:
4
+ active: 'Active'
5
+ add_shipping_methods: 'Add Shipping Method'
6
+ not_active: 'Not Active'
7
+ accepted: 'Accepted'
8
+ coupons: 'Coupons'
9
+ e_commerce: 'E-Commerce'
10
+ e_commerce_settings: 'E-commerce Settings'
11
+ e_mail_address: 'E-Mail Address'
12
+ edit_tax_rate: 'Edit Tax Rate'
13
+ edit_shipping_methods: 'Edit Shipping Method'
14
+ edit_price: 'Edit Price'
15
+ edit_payment_methods: 'Edit Payment Methods'
16
+ edit_coupon: 'Edit Coupon'
17
+ edit_order: 'Edit Order'
18
+ all_products: 'All Products'
19
+ add_new: 'Add New'
20
+ add_tax_rate: 'Add Tax Rate'
21
+ add_shipping_methods: 'Add Shipping Method'
22
+ add_price: 'Add Price'
23
+ add_coupons: 'Add Coupons'
24
+ add_payment_method: 'Add Payment Method'
25
+ billing_address: 'Billing Address'
26
+ by_bank_transfer: 'By bank transfer'
27
+ by_paypal: 'By Paypal'
28
+ by_credit_card: 'By credit card (with paypal)'
29
+ by_authorize_net: 'By credit card (Authorize.net)'
30
+ details_shipping_methods: 'Shipping Method Details'
31
+ details_payment_methods: 'Payment Methods Details'
32
+ details_order: 'Details Order'
33
+ details_user: 'User Details'
34
+ form_tax_rate: 'Tax Rate Form'
35
+ form_shipping_methods: 'Shipping Method Form'
36
+ form_price: 'Price Form'
37
+ form_payment_methods: 'Payment Methods Form'
38
+ form_coupon: 'Coupon Form'
39
+ form_settings: 'Settings Form'
40
+ orders: 'Orders'
41
+ order_received: 'Order Received'
42
+ order_accepted: 'Order Accepted'
43
+ order_shipped: 'Order Shipped'
44
+ payment_methods: 'Payment Methods'
45
+ info: 'Information'
46
+ list_orders: 'List Orders'
47
+ list_tax_rate: 'Tax Rate List'
48
+ list_shipping_methods: 'Shipping Method List'
49
+ shipping_methods: 'Shipping Methods'
50
+ shipping_prices: 'Shipping Prices'
51
+ list_price: 'Price List'
52
+ list_payment_methods: 'Payment Methods List'
53
+ list_coupons: 'Coupons List'
54
+ mark_shipped: 'Mark as Shipped'
55
+ message:
56
+ consignment_number: 'Use {{consignment_number}} to insert the consignment number.'
57
+ error_paypal_values: 'Error Paypal Values'
58
+ not_shipped: 'Not Shipped'
59
+ not_shipped_assigned: 'Not Shipped Assigned'
60
+ order: 'Order %{status}'
61
+ accepted: 'Accepted'
62
+ shipped: 'Shipped'
63
+ updated: 'Updated'
64
+ method_paypal: 'Method by Paypal'
65
+ method_credit_card: 'Method by Credit Card'
66
+ method_bank_transfer: 'Method Bank Transfer'
67
+ method_shipped: 'Method Shipped'
68
+ method_authorize_net: 'Method by Authorize.net'
69
+ new: 'New'
70
+ new_tax_rate: 'New Tax Rate'
71
+ new_shipping_methods: 'New Shipping Method'
72
+ new_payment_methods: 'New Payment Methods'
73
+ new_coupon: 'New Coupon'
74
+ options_payment_methods: 'Payment Options'
75
+ payments: 'Payments'
76
+ phone_number: 'Phone Number'
77
+ product:
78
+ featured: 'Featured'
79
+ item: 'Item'
80
+ photo: "Photos of product"
81
+ box: "What's in the box"
82
+ sku: "SKU"
83
+ attrs: "Attributes"
84
+ photos: "Photos"
85
+ price: "Price"
86
+ cost: "Cost"
87
+ tax: "Tax rate"
88
+ weight: "Weight"
89
+ stock_status: 'Stock Status'
90
+ stock: "Stock control?"
91
+ qty: "Quantity"
92
+ in_stock: 'In Stock'
93
+ not_in_tock: 'Not In Stock'
94
+ total_excluding_tax: 'Total (excluding Tax)'
95
+ current_unit: 'Current unit: %{unit}'
96
+ current_weight: 'Current weight: %{weight}'
97
+ products: 'Products'
98
+ shipping_address: 'Shipping Address'
99
+ shipping_methods: 'Shipping Methods'
100
+ shipped_date: 'Shipped Date'
101
+ search_order_number: 'Search for order number'
102
+ select:
103
+ received: 'Received'
104
+ unpaid: 'Unpaid'
105
+ accepted: 'Accepted'
106
+ shipped: 'Shipped'
107
+ closed: 'Closed'
108
+ canceled: 'Canceled'
109
+ kilogram: 'kilogram'
110
+ pound: 'pound'
111
+ dram: 'dram'
112
+ grain: 'grain'
113
+ gram: 'gram'
114
+ hundredweight: 'hundredweight'
115
+ milligram: 'milligram'
116
+ ounce: 'ounce'
117
+ tonne: 'tonne'
118
+ table:
119
+ address: 'Address'
120
+ actions: 'Actions'
121
+ amount: 'Amount'
122
+ allowed_applications: 'Allowed applications'
123
+ city: 'City'
124
+ code: 'Code'
125
+ country: 'Country'
126
+ currency_unit: 'Currency Unit'
127
+ currency_weight: 'Currency Weight'
128
+ customer: 'Customer'
129
+ customer_info: 'Customer Info'
130
+ description: 'Description'
131
+ details: 'Details'
132
+ discount: 'Discount'
133
+ discount_type: 'Discount type'
134
+ email: 'Email'
135
+ expiration_date: 'Expiration date'
136
+ expired: 'Expired'
137
+ firstname: 'Firstname'
138
+ id: 'ID'
139
+ lastname: 'Lastname'
140
+ login: 'Login'
141
+ login_id: 'Login Id'
142
+ max_weight: 'Max Weight'
143
+ min_weight: 'Min Weight'
144
+ min_cart_total: 'Min cart total'
145
+ name: 'Name'
146
+ not_paid: 'Not Paid'
147
+ method: 'Method'
148
+ number_account_bank: 'Number Account Bank'
149
+ phone: 'Phone'
150
+ paid: 'Paid?'
151
+ password: 'Password'
152
+ payment_method: 'Payment Method'
153
+ percent: 'Percent'
154
+ money: 'Money'
155
+ free_shipping: 'Free Shipping'
156
+ products: 'Products'
157
+ rate: 'Rate'
158
+ received_time: 'Received Time'
159
+ sandbox: 'Sandbox'
160
+ shipping: 'Shipping'
161
+ signature: 'Signature'
162
+ status: 'Status'
163
+ slug: 'Slug'
164
+ sub_total: 'Subtotal'
165
+ state: 'State'
166
+ total: 'Total'
167
+ url_tracking: 'URL Tracking'
168
+ username_login: 'Username / Login'
169
+ used_applications: 'Used applications'
170
+ code_zip: 'Code Zip'
171
+ method_type: 'Method type'
172
+ transaction_key: 'Transaction key'
173
+ tax_rates: 'Tax Rates'
174
+ add_to_cart: 'Add to cart'
175
+ msg:
176
+ added_product_in_cart: 'Added product successfully in Cart.'
177
+ mail:
178
+ order_received:
179
+ welcome: "Hi"
180
+ thanks: "Thank you for your purchase."
181
+ reference: "For your reference, your order number is:"
182
+ recovery_cart:
183
+ body: "We noticed that you might be stuck."
184
+ reference: "For your reference, your order number is:"
185
+ email:
186
+ order_received:
187
+ subject: "Thank you for purchasing"
188
+ recovery_cart:
189
+ subject: "We noticed that you might be stuck"
190
+ order_received_admin:
191
+ subject: "New purchase"
192
+