ecm_products 0.0.7.pre → 2.0.6.pre

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 (29) hide show
  1. data/app/models/ecm/products/product.rb +51 -42
  2. data/app/models/ecm/products/product_category.rb +6 -7
  3. data/app/models/ecm/products/product_link.rb +1 -0
  4. data/app/models/ecm/products/product_picture.rb +56 -0
  5. data/app/views/ecm/products/product_pictures/_product_picture.html.erb +10 -0
  6. data/app/views/ecm/products/products/_product_details.html.erb +18 -7
  7. data/config/locales/ecm.products.de.yml +1 -0
  8. data/config/locales/ecm.products.en.yml +1 -0
  9. data/config/locales/ecm.products.product.de.yml +31 -29
  10. data/config/locales/ecm.products.product.en.yml +31 -29
  11. data/config/locales/ecm.products.product_category.de.yml +27 -25
  12. data/config/locales/ecm.products.product_category.en.yml +27 -25
  13. data/config/locales/ecm.products.product_picture.de.yml +25 -0
  14. data/config/locales/ecm.products.product_picture.en.yml +25 -0
  15. data/config/locales/ecm.products.routes.de.yml +2 -0
  16. data/config/locales/ecm.products.routes.en.yml +2 -0
  17. data/db/migrate/002_create_ecm_products_products.rb +1 -0
  18. data/db/migrate/004_create_ecm_products_product_pictures.rb +32 -0
  19. data/lib/ecm/products/active_admin/ecm_products_product_categories.rb +61 -39
  20. data/lib/ecm/products/active_admin/ecm_products_product_links.rb +16 -12
  21. data/lib/ecm/products/active_admin/ecm_products_product_pictures.rb +76 -0
  22. data/lib/ecm/products/active_admin/ecm_products_products.rb +80 -35
  23. data/lib/ecm/products/configuration.rb +35 -2
  24. data/lib/ecm/products/version.rb +1 -1
  25. data/lib/ecm_products.rb +1 -0
  26. data/lib/generators/ecm/products/install/templates/ecm_products.rb +46 -0
  27. data/lib/generators/ecm/products/locales/locales_generator.rb +3 -0
  28. data/lib/tasks/ecm_products_tasks.rake +118 -67
  29. metadata +70 -50
@@ -8,23 +8,23 @@ module FixUpdateCounters
8
8
 
9
9
  # Get real class of changed attribute, so work both with namespaced/normal models
10
10
  klass = self.association(changed_class.to_sym).klass
11
-
11
+
12
12
  # Try to get counter cache from association options
13
- begin
13
+ begin
14
14
  counter_name = self.association(changed_class.to_sym).options[:counter_cache]
15
- rescue
15
+ rescue
16
16
  # Namespaced model return a slash, split it.
17
17
  unless (counter_name = "#{self.class.name.underscore.pluralize.split("/")[1]}_count".to_sym)
18
18
  counter_name = "#{self.class.name.underscore.pluralize}_count".to_sym
19
19
  end
20
- end
20
+ end
21
21
 
22
22
 
23
23
  klass.decrement_counter(counter_name, value[0]) unless value[0] == nil
24
24
  klass.increment_counter(counter_name, value[1]) unless value[1] == nil
25
25
  end
26
26
  }
27
- end
27
+ end
28
28
  end
29
29
 
30
30
  ActiveRecord::Base.send(:include, FixUpdateCounters)
@@ -32,74 +32,83 @@ ActiveRecord::Base.send(:include, FixUpdateCounters)
32
32
  class Ecm::Products::Product < ActiveRecord::Base
33
33
  # database settings
34
34
  self.table_name = 'ecm_products_products'
35
-
35
+
36
36
  # acts as list
37
- acts_as_list :scope => :ecm_products_product_category
37
+ acts_as_list :scope => :ecm_products_product_category
38
38
 
39
39
  # acts as markup
40
40
  acts_as_markup :language => :variable, :columns => [ :long_description, :short_description ]
41
-
41
+
42
42
  # associations
43
- belongs_to :ecm_products_product_category,
44
- :class_name => Ecm::Products::ProductCategory,
43
+ belongs_to :ecm_products_product_category,
44
+ :class_name => Ecm::Products::ProductCategory,
45
45
  :counter_cache => :ecm_products_products_count
46
-
47
- has_many :ecm_products_product_links,
48
- :class_name => Ecm::Products::ProductLink,
46
+
47
+ has_many :ecm_products_product_links,
48
+ :class_name => Ecm::Products::ProductLink,
49
49
  :dependent => :destroy,
50
50
  :foreign_key => :ecm_products_product_id,
51
51
  :order => 'position'
52
-
52
+
53
+ has_many :ecm_products_product_pictures,
54
+ :class_name => Ecm::Products::ProductPicture,
55
+ :dependent => :destroy,
56
+ :foreign_key => :ecm_products_product_id,
57
+ :order => 'position'
58
+
53
59
  # attributes
54
60
  attr_accessible :ecm_products_product_category_id,
55
- :long_description,
61
+ :ecm_products_product_pictures_attributes,
62
+ :long_description,
56
63
  :main_image,
57
64
  :markup_language,
58
- :name,
59
- :position,
65
+ :name,
66
+ :position,
60
67
  :preview_image,
61
- :price,
62
- :price_on_application,
63
- :published_at,
64
- :short_description,
68
+ :price,
69
+ :price_on_application,
70
+ :published_at,
71
+ :short_description,
65
72
  :slug
66
-
73
+ accepts_nested_attributes_for :ecm_products_product_links, :allow_destroy => true
74
+ accepts_nested_attributes_for :ecm_products_product_pictures, :allow_destroy => true
75
+
67
76
  # callbacks
68
- after_initialize :set_defaults
77
+ after_initialize :set_defaults
69
78
  after_update :fix_updated_counters
70
79
  before_update :fix_updated_position, :if => Proc.new { |d| !position.blank? && d.ecm_products_product_category_id_changed? }
71
-
72
- # constants
73
- MARKUP_LANGUAGES = %w(markdown textile rdoc)
74
-
80
+
75
81
  # friendly id
76
82
  extend FriendlyId
77
83
  friendly_id :name, :use => :slugged
78
-
84
+
79
85
  # money
80
86
  monetize :price_cents, :allow_nil => true
81
-
87
+
82
88
  # paperclip
83
- has_attached_file :main_image, :styles => { :medium_thumb => "160x120", :big_thumb => "360x268" }
84
- has_attached_file :preview_image, :styles => { :medium_thumb => "160x120", :big_thumb => "360x268" }
85
-
86
- # validations
89
+ has_attached_file :main_image,
90
+ :styles => Ecm::Products::Configuration.product_main_image_styles
91
+ has_attached_file :preview_image,
92
+ :styles => Ecm::Products::Configuration.product_preview_image_styles
93
+
94
+ # validations
87
95
  validates :ecm_products_product_category, :presence => true
88
- validates :name, :presence => true
89
- validates :markup_language, :presence => true,
90
- :inclusion => MARKUP_LANGUAGES
91
-
96
+ validates :name, :presence => true
97
+ validates :markup_language, :presence => true,
98
+ :inclusion => Ecm::Products::Configuration.markup_languages
99
+
92
100
  # private methods
93
-
94
- private
101
+
102
+ private
95
103
  def fix_updated_position
96
104
  Rails.logger.debug "Fixing positions for #{self.to_s} (Moving to last)"
97
105
  add_to_list_bottom
98
106
  end
99
-
107
+
100
108
  def set_defaults
101
109
  if self.new_record?
102
- self.markup_language ||= 'textile'
103
- end
110
+ self.markup_language ||= Ecm::Products::Configuration.default_markup_language
111
+ end
104
112
  end
105
113
  end
114
+
@@ -33,24 +33,23 @@ class Ecm::Products::ProductCategory < ActiveRecord::Base
33
33
  # callbacks
34
34
  after_initialize :set_defaults
35
35
 
36
- # constants
37
- MARKUP_LANGUAGES = %w(markdown textile rdoc)
38
-
39
36
  # friendly id
40
37
  extend FriendlyId
41
38
  friendly_id :name, :use => :slugged
42
39
 
43
40
  # paperclip
44
- has_attached_file :main_image, :styles => { :medium_thumb => "160x120", :big_thumb => "360x268" }
45
- has_attached_file :preview_image, :styles => { :small_thumb => "64x48", :medium_thumb => "160x120", :big_thumb => "360x268" }
41
+ has_attached_file :main_image,
42
+ :styles => Ecm::Products::Configuration.product_category_main_image_styles
43
+ has_attached_file :preview_image,
44
+ :styles => Ecm::Products::Configuration.product_category_preview_image_styles
46
45
 
47
46
  # validations
48
47
  validates :name, :presence => true, :uniqueness => { :scope => [ :parent_id ] }
49
48
  validates :locale, :presence => true, :if => Proc.new { |pc| pc.parent.nil? } # , :if => :root?
50
49
  validates :locale, :absence => true, :if => Proc.new { |pc| !pc.parent.nil? }
51
50
  validate :available_locale, :if => Proc.new { |pc| pc.locale.present? }
52
- validates :markup_language, :presence => true,
53
- :inclusion => MARKUP_LANGUAGES
51
+ validates :markup_language, :presence => true,
52
+ :inclusion => Ecm::Products::Configuration.markup_languages
54
53
 
55
54
  # public methods
56
55
 
@@ -28,6 +28,7 @@ class Ecm::Products::ProductLink < ActiveRecord::Base
28
28
  MARKUP_LANGUAGES = %w(markdown textile rdoc)
29
29
 
30
30
  # validations
31
+ validates :ecm_products_product, :presence => true
31
32
  validates :name, :presence => true, :uniqueness => { :scope => [ :ecm_products_product_id ] }
32
33
  validates :url, :presence => true, :uniqueness => { :scope => [ :ecm_products_product_id ] }
33
34
  validates :markup_language, :presence => true,
@@ -0,0 +1,56 @@
1
+ class Ecm::Products::ProductPicture < ActiveRecord::Base
2
+ # database settings
3
+ self.table_name = 'ecm_products_product_pictures'
4
+
5
+ # acts as list
6
+ acts_as_list :scope => :ecm_products_product
7
+
8
+ # acts as markup
9
+ acts_as_markup :language => :variable, :columns => [ :description ]
10
+
11
+ # associations
12
+ belongs_to :ecm_products_product,
13
+ :class_name => Ecm::Products::Product,
14
+ :counter_cache => :ecm_products_product_pictures_count
15
+
16
+ # attributes
17
+ attr_accessible :description,
18
+ :ecm_products_product_id,
19
+ :image_content_type,
20
+ :image,
21
+ :markup_language,
22
+ :name,
23
+ :position,
24
+ :slug
25
+
26
+ # callbacks
27
+ after_initialize :set_defaults
28
+ before_validation :set_name_from_image_file_name, :if => Proc.new { |p| p.name.nil? || p.name.empty? }
29
+
30
+ # friendly id
31
+ extend FriendlyId
32
+ friendly_id :name, :use => :slugged
33
+
34
+ # paperclip
35
+ has_attached_file :image,
36
+ :styles => Ecm::Products::Configuration.product_picture_image_styles
37
+
38
+ # validations
39
+ validates :ecm_products_product, :presence => true
40
+ validates :markup_language, :presence => true,
41
+ :inclusion => Ecm::Products::Configuration.markup_languages
42
+ validates :name, :presence => true
43
+
44
+ private
45
+
46
+ def set_defaults
47
+ if self.new_record?
48
+ self.markup_language ||= Ecm::Products::Configuration.default_markup_language
49
+ end
50
+ end
51
+
52
+ def set_name_from_image_file_name
53
+ self.name = File.basename(image_file_name, File.extname(image_file_name)) unless image_file_name.nil?
54
+ end
55
+ end
56
+
@@ -0,0 +1,10 @@
1
+ <li class="span44 offset">
2
+ <div class="thumbnail">
3
+ <%= link_to(product_picture.image.url, { :class => "top_up" }) do %>
4
+ <%= image_tag(product_picture.image.url(:default)) %>
5
+ <% end %>
6
+ <div class="caption">
7
+ <%= mu(product_picture, :description) %>
8
+ </div
9
+ </div>
10
+ </li>
@@ -1,27 +1,37 @@
1
1
  <div class="product" id="product-<%= product.id %>">
2
2
  <h1 class="product-name"><%= product.name %></h1>
3
-
3
+
4
4
  <% if product.main_image? %>
5
5
  <div class="product-main_image"><%= image_tag(product.main_image.url, :class => 'thumbnail') %></div>
6
6
  <% end %>
7
-
7
+
8
8
  <% if product.short_description.present? %>
9
9
  <div class="product-short_description"><%= mu(product, :short_description) %></div>
10
10
  <% end %>
11
11
 
12
+ <% if product.ecm_products_product_pictures.present? %>
13
+ <div class="row-fluid product-pictures">
14
+ <ul class="thumbnails">
15
+ <% product.ecm_products_product_pictures.each do |product_picture| %>
16
+ <%= render product_picture %>
17
+ <% end %>
18
+ </ul>
19
+ </div>
20
+ <% end %>
21
+
12
22
  <% if product.long_description.present? %>
13
23
  <div class="product-long_description"><%= mu(product, :long_description) %></div>
14
- <% end %>
15
-
24
+ <% end %>
25
+
16
26
  <% if product.price.present? %>
17
27
  <div class="product-price">
18
28
  <p><%= Ecm::Products::Product.human_attribute_name(:price) %>: <%= humanized_money_with_symbol product.price %></p>
19
29
  </div>
20
30
  <% end %>
21
-
31
+
22
32
  <% if product.ecm_products_product_links.present? %>
23
33
  <hr />
24
-
34
+
25
35
  <div class="product-links">
26
36
  <% product.ecm_products_product_links.each do |product_link| %>
27
37
  <%= render product_link %>
@@ -36,4 +46,5 @@
36
46
  <%= link_to(product.ecm_products_product_category, :class => 'btn') do %>
37
47
  <i class="icon-arrow-left"></i>
38
48
  <%= t('ecm.products.product.actions.back_to_category', :name => product.ecm_products_product_category) %>
39
- <% end %>
49
+ <% end %>
50
+
@@ -8,6 +8,7 @@ de:
8
8
  back_to_category: Zurück zu %{name}
9
9
  more: Mehr
10
10
  messages:
11
+ no_pictures_available: Keine Bilder zu diesem Produkt vorhanden.
11
12
  product_category:
12
13
  actions:
13
14
  all: Alle anzeigen
@@ -8,6 +8,7 @@ en:
8
8
  back_to_category: back to %{name}
9
9
  more: more
10
10
  messages:
11
+ no_pictures_available: No pictures available.
11
12
  product_category:
12
13
  actions:
13
14
  all: show all
@@ -1,39 +1,41 @@
1
- ---
2
- de:
3
- activerecord:
4
- models:
5
- ecm/products/product:
1
+ ---
2
+ de:
3
+ activerecord:
4
+ models:
5
+ ecm/products/product:
6
6
  one: Produkt
7
7
  other: Produkte
8
- attributes:
9
- ecm/products/product:
10
- name: Name
11
- preview_image_fingerprint: Vorschaubild Fingerabdruck
12
- position: Position
13
- slug: Freundliche ID
14
- main_image_content_type: Hauptbild Dateityp
8
+ attributes:
9
+ ecm/products/product:
15
10
  created_at: Erstellt am
16
- main_image_updated_at: Hauptbild aktualisiert am
17
- updated_at: Aktualisiert am
18
- short_description: Kurzbeschreibung
11
+ ecm_products_product_category_id: Produktkategorie
12
+ ecm_products_product_category: Produktkategorie
13
+ ecm_products_product_links_count: Links
14
+ ecm_products_product_links: Links
15
+ ecm_products_product_pictures: Bilder
16
+ locale: Sprache
17
+ long_description: Langbeschreibung
18
+ main_image_content_type: Hauptbild Dateityp
19
19
  main_image_file_name: Hauptbild Dateiname
20
20
  main_image_file_size: Hauptbild Dateigröße
21
21
  main_image_fingerprint: Hauptbild Fingerabdruck
22
- ecm_products_product_category: Produktkategorie
23
- ecm_products_product_category_id: Produktkategorie
24
- long_description: Langbeschreibung
25
- preview_image_updated_at: Vorschaubild aktualisiert am
26
- ecm_products_product_links: Links
27
- ecm_products_product_links_count: Links
22
+ main_image: Hauptbild
23
+ main_image_updated_at: Hauptbild aktualisiert am
24
+ markup_language: Markup Sprache
25
+ name: Name
26
+ position: Position
28
27
  preview_image_content_type: Vorschaubild Dateityp
29
- price_currency: Preiswährung
30
- locale: Sprache
31
- price_on_application: Preis auf Anfrage
32
28
  preview_image_file_name: Vorschaubild Dateiname
33
- published_at: Veröffentlicht am
34
29
  preview_image_file_size: Vorschaubild Dateigröße
35
- price: Preis
36
- price_cents: Preis in Cents
30
+ preview_image_fingerprint: Vorschaubild Fingerabdruck
31
+ preview_image_updated_at: Vorschaubild aktualisiert am
37
32
  preview_image: Vorschaubild
38
- main_image: Hauptbild
39
- markup_language: Markup Sprache
33
+ price_cents: Preis in Cents
34
+ price_currency: Preiswährung
35
+ price_on_application: Preis auf Anfrage
36
+ price: Preis
37
+ published_at: Veröffentlicht am
38
+ short_description: Kurzbeschreibung
39
+ slug: Freundliche ID
40
+ updated_at: Aktualisiert am
41
+
@@ -1,39 +1,41 @@
1
- ---
2
- en:
3
- activerecord:
4
- models:
5
- ecm/products/product:
1
+ ---
2
+ en:
3
+ activerecord:
4
+ models:
5
+ ecm/products/product:
6
6
  one: product
7
7
  other: products
8
- attributes:
9
- ecm/products/product:
10
- name: name
11
- preview_image_fingerprint: preview image fingerprint
12
- position: position
13
- slug: friendly id
14
- main_image_content_type: main image content type
8
+ attributes:
9
+ ecm/products/product:
15
10
  created_at: created at
16
- main_image_updated_at: main image updated at
17
- updated_at: updated at
18
- short_description: short_description
11
+ ecm_products_product_category_id: product category
12
+ ecm_products_product_category: product category
13
+ ecm_products_product_links_count: product links
14
+ ecm_products_product_links: links
15
+ ecm_products_product_pictures: pictures
16
+ locale: language
17
+ long_description: long description
18
+ main_image_content_type: main image content type
19
19
  main_image_file_name: main image file name
20
20
  main_image_file_size: main image file size
21
21
  main_image_fingerprint: main image fingerprint
22
- ecm_products_product_category: product category
23
- ecm_products_product_category_id: product category
24
- long_description: long description
25
- preview_image_updated_at: preview_image updated at
26
- ecm_products_product_links: links
27
- ecm_products_product_links_count: product links
22
+ main_image: main image
23
+ main_image_updated_at: main image updated at
24
+ markup_language: markup language
25
+ name: name
26
+ position: position
28
27
  preview_image_content_type: preview image content type
29
- price_currency: price currency
30
- locale: language
31
- price_on_application: price on application
32
28
  preview_image_file_name: preview image file name
33
- published_at: published at
34
29
  preview_image_file_size: preview image file size
35
- price: price
36
- price_cents: price cents
30
+ preview_image_fingerprint: preview image fingerprint
37
31
  preview_image: preview image
38
- main_image: main image
39
- markup_language: markup language
32
+ preview_image_updated_at: preview_image updated at
33
+ price_cents: price cents
34
+ price_currency: price currency
35
+ price_on_application: price on application
36
+ price: price
37
+ published_at: published at
38
+ short_description: short_description
39
+ slug: friendly id
40
+ updated_at: updated at
41
+
@@ -1,36 +1,38 @@
1
- ---
2
- de:
3
- activerecord:
4
- models:
5
- ecm/products/product_category:
1
+ ---
2
+ de:
3
+ activerecord:
4
+ models:
5
+ ecm/products/product_category:
6
6
  one: Produkt Kategorie
7
7
  other: Produkt Kategorien
8
- attributes:
9
- ecm/products/product_category:
10
- slug: Freundliche ID
11
- name: Name
12
- preview_image_fingerprint: Vorschaubild Fingerabdruck
13
- main_image_content_type: Hauptbild Dateityp
8
+ attributes:
9
+ ecm/products/product_category:
10
+ children: Unterkategorien
14
11
  created_at: Erstellt am
15
- ecm_products_products: Produkte
16
- ecm_products_products_count: Produkte
17
12
  depth: Baumtiefe
18
- updated_at: Aktualisiert am
19
- short_description: Kurzbeschreibung
20
- main_image_updated_at: Hauptbild aktualisiert am
13
+ ecm_products_products_count: Produkte
14
+ ecm_products_products: Produkte
21
15
  lft: Links
22
- main_image_fingerprint: Hauptbild Fingerabdruck
16
+ locale: Sprache
17
+ long_description: Langbeschreibung
18
+ main_image_content_type: Hauptbild Dateityp
23
19
  main_image_file_name: Hauptbild Dateiname
24
20
  main_image_file_size: Hauptbild Dateigröße
25
- long_description: Langbeschreibung
26
- preview_image_content_type: Vorschaubild Dateityp
27
- preview_image_updated_at: Vorschaubild aktualisiert am
28
- parent: Überkategorie
21
+ main_image_fingerprint: Hauptbild Fingerabdruck
22
+ main_image: Hauptbild
23
+ main_image_updated_at: Hauptbild aktualisiert am
24
+ markup_language: Markup Sprache
25
+ name: Name
29
26
  parent_id: Überkategorie
30
- locale: Sprache
27
+ parent: Überkategorie
28
+ preview_image_content_type: Vorschaubild Dateityp
31
29
  preview_image_file_name: Vorschaubild Dateiname
32
30
  preview_image_file_size: Vorschaubild Dateigröße
33
- rgt: Rechts
31
+ preview_image_fingerprint: Vorschaubild Fingerabdruck
32
+ preview_image_updated_at: Vorschaubild aktualisiert am
34
33
  preview_image: Vorschaubild
35
- main_image: Hauptbild
36
- markup_language: Markup Sprache
34
+ rgt: Rechts
35
+ short_description: Kurzbeschreibung
36
+ slug: Freundliche ID
37
+ updated_at: Aktualisiert am
38
+
@@ -1,36 +1,38 @@
1
- ---
2
- en:
3
- activerecord:
4
- models:
5
- ecm/products/product_category:
1
+ ---
2
+ en:
3
+ activerecord:
4
+ models:
5
+ ecm/products/product_category:
6
6
  one: product category
7
7
  other: product categories
8
- attributes:
9
- ecm/products/product_category:
10
- slug: slug
11
- name: name
12
- preview_image_fingerprint: preview image fingerprint
13
- main_image_content_type: main image content type
8
+ attributes:
9
+ ecm/products/product_category:
10
+ children: subcategories
14
11
  created_at: created at
15
- ecm_products_products: products
16
- ecm_products_products_count: products
17
12
  depth: depth
18
- updated_at: updated at
19
- short_description: short description
20
- main_image_updated_at: main image updated at
13
+ ecm_products_products_count: products
14
+ ecm_products_products: products
21
15
  lft: left
22
- main_image_fingerprint: main image fingerprint
16
+ locale: language
17
+ long_description: long description
18
+ main_image_content_type: main image content type
23
19
  main_image_file_name: main image file name
24
20
  main_image_file_size: main image file size
25
- long_description: long description
26
- preview_image_content_type: preview image content type
27
- preview_image_updated_at: preview image updated at
28
- parent: parent category
21
+ main_image_fingerprint: main image fingerprint
22
+ main_image: main image
23
+ main_image_updated_at: main image updated at
24
+ markup_language: markup language
25
+ name: name
29
26
  parent_id: parent category
30
- locale: language
27
+ parent: parent category
28
+ preview_image_content_type: preview image content type
31
29
  preview_image_file_name: preview image file name
32
30
  preview_image_file_size: preview image file size
33
- rgt: right
31
+ preview_image_fingerprint: preview image fingerprint
34
32
  preview_image: preview image
35
- main_image: main image
36
- markup_language: markup language
33
+ preview_image_updated_at: preview image updated at
34
+ rgt: right
35
+ short_description: short description
36
+ slug: slug
37
+ updated_at: updated at
38
+
@@ -0,0 +1,25 @@
1
+ ---
2
+ de:
3
+ activerecord:
4
+ models:
5
+ ecm/products/product_picture:
6
+ one: Produkt Bild
7
+ other: Produkt Bilder
8
+ attributes:
9
+ ecm/products/product_picture:
10
+ created_at: Erstellt am
11
+ description: Beschreibung
12
+ ecm_products_product_id: Produkt
13
+ ecm_products_product: Produkt
14
+ image_content_type: Content Type
15
+ image_file_name: Dateiname
16
+ image_file_size: Dateigröße
17
+ image_fingerprint: Fingerabdruck
18
+ image_updated_at: Datei aktualisiert am
19
+ markup_language: Markup Sprache
20
+ name: Name
21
+ position: Position
22
+ slug: Freundliche ID
23
+ thumbnail: Bild
24
+ updated_at: Aktualisiert am
25
+
@@ -0,0 +1,25 @@
1
+ ---
2
+ en:
3
+ activerecord:
4
+ models:
5
+ ecm/products/product_picture:
6
+ one: product picture
7
+ other: product pictures
8
+ attributes:
9
+ ecm/products/product_picture:
10
+ created_at: created at
11
+ description: description
12
+ ecm_products_product_id: product
13
+ ecm_products_product: product
14
+ image_content_type: content type
15
+ image_file_name: filename
16
+ image_file_size: filesize
17
+ image_fingerprint: fingerprint
18
+ image_updated_at: file updated at
19
+ markup_language: markup language
20
+ name: name
21
+ position: position
22
+ slug: friendly id
23
+ thumbnail: picture
24
+ updated_at: updated at
25
+
@@ -3,3 +3,5 @@ de:
3
3
  ecm_products_products: produkte
4
4
  ecm_products_product_categories: produkt-kategorien
5
5
  ecm_products_product_links: produkt-links
6
+ ecm_products_product_pictures: produkt-bilder
7
+
@@ -3,3 +3,5 @@ en:
3
3
  ecm_products_products: products
4
4
  ecm_products_product_categories: product-categories
5
5
  ecm_products_product_links: product-links
6
+ ecm_products_product_pictures: product-pictures
7
+