cama_language_editor 1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+