ecm_products 0.0.7.pre → 2.0.6.pre

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