alchemy_cms 2.2.4 → 2.3.rc5

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 (215) hide show
  1. data/.gitignore +1 -1
  2. data/.travis.yml +3 -4
  3. data/Gemfile +1 -0
  4. data/README.md +10 -6
  5. data/alchemy_cms.gemspec +5 -2
  6. data/app/assets/images/alchemy/icons.png +0 -0
  7. data/app/assets/images/sassy-ie-overlay.png +0 -0
  8. data/app/assets/javascripts/alchemy/alchemy.base.js +50 -59
  9. data/app/assets/javascripts/alchemy/alchemy.buttons.js +14 -4
  10. data/app/assets/javascripts/alchemy/alchemy.datepicker.js +8 -2
  11. data/app/assets/javascripts/alchemy/alchemy.elements_window.js +11 -3
  12. data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +1 -1
  13. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +14 -1
  14. data/app/assets/javascripts/alchemy/alchemy.preview.js +1 -1
  15. data/app/assets/javascripts/alchemy/alchemy.preview_window.js +12 -4
  16. data/app/assets/javascripts/alchemy/alchemy.uploader.js +4 -1
  17. data/app/assets/javascripts/alchemy/alchemy.windows.js +18 -8
  18. data/app/assets/stylesheets/alchemy/_defaults.scss +84 -120
  19. data/app/assets/stylesheets/alchemy/alchemy.css +2 -2
  20. data/app/assets/stylesheets/alchemy/archive.css.scss +288 -0
  21. data/app/assets/stylesheets/alchemy/base.css.scss +95 -390
  22. data/app/assets/stylesheets/alchemy/dashboard.css.scss +4 -4
  23. data/app/assets/stylesheets/alchemy/elements.css.scss +83 -118
  24. data/app/assets/stylesheets/alchemy/flash.css.scss +1 -1
  25. data/app/assets/stylesheets/alchemy/form_elements.css.scss +528 -0
  26. data/app/assets/stylesheets/alchemy/frame.css.scss +13 -39
  27. data/app/assets/stylesheets/alchemy/icons.css.scss +217 -228
  28. data/app/assets/stylesheets/alchemy/jquery-ui.alchemy.css.scss +48 -50
  29. data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +1 -1
  30. data/app/assets/stylesheets/alchemy/login.css.scss +1 -5
  31. data/app/assets/stylesheets/alchemy/menubar.css.scss +19 -29
  32. data/app/assets/stylesheets/alchemy/pagination.css.scss +3 -4
  33. data/app/assets/stylesheets/alchemy/sitemap.css.scss +81 -81
  34. data/app/assets/stylesheets/alchemy/tables.css.scss +63 -57
  35. data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +57 -57
  36. data/app/assets/stylesheets/alchemy/upload.css.scss +6 -6
  37. data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss +6 -10
  38. data/app/controllers/alchemy/admin/attachments_controller.rb +5 -4
  39. data/app/controllers/alchemy/admin/base_controller.rb +1 -9
  40. data/app/controllers/alchemy/admin/contents_controller.rb +4 -6
  41. data/app/controllers/alchemy/admin/elements_controller.rb +2 -2
  42. data/app/controllers/alchemy/admin/pages_controller.rb +2 -2
  43. data/app/controllers/alchemy/admin/pictures_controller.rb +74 -15
  44. data/app/controllers/alchemy/attachments_controller.rb +8 -2
  45. data/app/controllers/alchemy/base_controller.rb +47 -5
  46. data/app/controllers/alchemy/elements_controller.rb +1 -1
  47. data/app/controllers/alchemy/messages_controller.rb +12 -12
  48. data/app/controllers/alchemy/pages_controller.rb +5 -1
  49. data/app/controllers/alchemy/pictures_controller.rb +9 -4
  50. data/app/controllers/alchemy/user_sessions_controller.rb +2 -4
  51. data/app/helpers/alchemy/admin/base_helper.rb +98 -19
  52. data/app/helpers/alchemy/admin/contents_helper.rb +2 -2
  53. data/app/helpers/alchemy/admin/elements_helper.rb +2 -3
  54. data/app/helpers/alchemy/base_helper.rb +6 -5
  55. data/app/helpers/alchemy/elements_helper.rb +2 -2
  56. data/app/helpers/alchemy/essences_helper.rb +4 -5
  57. data/app/helpers/alchemy/pages_helper.rb +15 -79
  58. data/app/helpers/alchemy/url_helper.rb +67 -0
  59. data/app/mailers/alchemy/messages.rb +1 -1
  60. data/app/mailers/alchemy/notifications.rb +1 -1
  61. data/app/models/alchemy/attachment.rb +11 -2
  62. data/app/models/alchemy/cell.rb +20 -10
  63. data/app/models/alchemy/content.rb +4 -3
  64. data/app/models/alchemy/element.rb +170 -178
  65. data/app/models/alchemy/language/code.rb +4 -1
  66. data/app/models/alchemy/message.rb +19 -3
  67. data/app/models/alchemy/page.rb +45 -40
  68. data/app/models/alchemy/picture.rb +24 -2
  69. data/app/models/alchemy/user.rb +2 -3
  70. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +12 -12
  71. data/app/views/alchemy/admin/attachments/_attachment.html.erb +1 -1
  72. data/app/views/alchemy/admin/attachments/create.js.erb +1 -0
  73. data/app/views/alchemy/admin/attachments/edit.html.erb +9 -3
  74. data/app/views/alchemy/admin/attachments/index.html.erb +3 -2
  75. data/app/views/alchemy/admin/contents/_missing.html.erb +1 -1
  76. data/app/views/alchemy/admin/contents/create.js.erb +54 -0
  77. data/app/views/alchemy/admin/contents/new.html.erb +9 -4
  78. data/app/views/alchemy/admin/elements/{_add_content.html.erb → _add_picture.html.erb} +4 -4
  79. data/app/views/alchemy/admin/elements/_elements_select.html.erb +2 -1
  80. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +1 -1
  81. data/app/views/alchemy/admin/elements/{_picture_editor.html.erb → _picture_gallery_editor.html.erb} +7 -11
  82. data/app/views/alchemy/admin/elements/fold.js.erb +46 -0
  83. data/app/views/alchemy/admin/elements/index.html.erb +24 -24
  84. data/app/views/alchemy/admin/elements/list.js.erb +11 -9
  85. data/app/views/alchemy/admin/essence_files/assign.js.erb +3 -1
  86. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +28 -0
  87. data/app/views/alchemy/admin/pages/_contactform_links.html.erb +8 -6
  88. data/app/views/alchemy/admin/pages/_external_link.html.erb +11 -9
  89. data/app/views/alchemy/admin/pages/_file_link.html.erb +10 -8
  90. data/app/views/alchemy/admin/pages/_internal_link.html.erb +14 -10
  91. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
  92. data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
  93. data/app/views/alchemy/admin/pages/_page_for_links.html.erb +32 -21
  94. data/app/views/alchemy/admin/pages/configure.html.erb +2 -2
  95. data/app/views/alchemy/admin/pages/configure_external.html.erb +13 -13
  96. data/app/views/alchemy/admin/pages/edit.html.erb +2 -2
  97. data/app/views/alchemy/admin/pages/index.html.erb +26 -24
  98. data/app/views/alchemy/admin/pages/link.html.erb +2 -5
  99. data/app/views/alchemy/admin/partials/_upload_form.html.erb +28 -12
  100. data/app/views/alchemy/admin/pictures/_archive.html.erb +54 -0
  101. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +10 -7
  102. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +21 -22
  103. data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +31 -0
  104. data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +9 -0
  105. data/app/views/alchemy/admin/pictures/_picture.html.erb +36 -6
  106. data/app/views/alchemy/admin/pictures/_tag_list.html.erb +27 -0
  107. data/app/views/alchemy/admin/pictures/archive_overlay.js.erb +3 -1
  108. data/app/views/alchemy/admin/pictures/create.js.erb +4 -5
  109. data/app/views/alchemy/admin/pictures/edit.html.erb +26 -0
  110. data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +39 -0
  111. data/app/views/alchemy/admin/pictures/index.html.erb +81 -70
  112. data/app/views/alchemy/admin/pictures/index.js.erb +3 -0
  113. data/app/views/alchemy/admin/pictures/new.html.erb +1 -0
  114. data/app/views/alchemy/admin/resources/index.html.erb +3 -1
  115. data/app/views/alchemy/admin/users/_table.html.erb +1 -1
  116. data/app/views/alchemy/admin/users/index.html.erb +27 -23
  117. data/app/views/alchemy/elements/_article_editor.html.erb +7 -2
  118. data/app/views/alchemy/elements/_bild_editor.html.erb +1 -1
  119. data/app/views/alchemy/elements/_bild_text_editor.html.erb +6 -1
  120. data/app/views/alchemy/elements/_bild_text_view.html.erb +3 -3
  121. data/app/views/alchemy/elements/_image_mosaic_editor.html.erb +1 -1
  122. data/app/views/alchemy/elements/_image_mosaic_view.html.erb +2 -2
  123. data/app/views/alchemy/elements/_intro_image_text_view.html.erb +4 -4
  124. data/app/views/alchemy/elements/_searchresult_editor.html.erb +4 -1
  125. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +1 -1
  126. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +2 -3
  127. data/app/views/alchemy/essences/_essence_picture_tools.html.erb +1 -1
  128. data/app/views/alchemy/search/_form.html.erb +8 -0
  129. data/app/views/alchemy/search/_result.html.erb +3 -2
  130. data/app/views/alchemy/search/_results.html.erb +28 -0
  131. data/app/views/alchemy/user_sessions/leave.html.erb +4 -4
  132. data/app/views/alchemy/user_sessions/login.html.erb +1 -2
  133. data/app/views/layouts/alchemy/admin.html.erb +30 -10
  134. data/app/views/layouts/alchemy/login.html.erb +2 -39
  135. data/config/alchemy/elements.yml +1 -2
  136. data/config/alchemy/page_layouts.yml +8 -5
  137. data/config/authorization_rules.rb +27 -18
  138. data/config/initializers/localeapp.rb +9 -0
  139. data/config/locales/alchemy.de.yml +93 -56
  140. data/config/locales/alchemy.en.yml +73 -50
  141. data/config/routes.rb +3 -1
  142. data/db/migrate/20120704181529_add_upload_hash_to_alchemy_picture.rb +5 -0
  143. data/db/migrate/20120705214247_acts_as_taggable_on_migration.rb +28 -0
  144. data/db/migrate/20120728185830_add_cached_tag_list_to_alchemy_pictures.rb +5 -0
  145. data/db/migrate/20120831135441_set_alchemy_languages_country_code_default_to_empty_string.rb +9 -0
  146. data/lib/alchemy/capistrano.rb +2 -2
  147. data/lib/alchemy/essence.rb +14 -0
  148. data/lib/alchemy/page_layout.rb +0 -6
  149. data/lib/alchemy/resource.rb +9 -15
  150. data/lib/alchemy/upgrader.rb +18 -3
  151. data/lib/alchemy/version.rb +5 -1
  152. data/lib/alchemy_cms.rb +4 -1
  153. data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +16 -6
  154. data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +17 -3
  155. data/lib/rails/generators/alchemy/elements/elements_generator.rb +6 -1
  156. data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +10 -1
  157. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +17 -18
  158. data/lib/rails/generators/alchemy/scaffold/files/pages.html.erb +4 -2
  159. data/lib/tasks/fleximage.rake +2 -2
  160. data/spec/controllers/admin/contents_controller_spec.rb +2 -2
  161. data/spec/controllers/admin/elements_controller_spec.rb +30 -1
  162. data/spec/controllers/admin/pages_controller_spec.rb +35 -18
  163. data/spec/controllers/admin/trash_controller_spec.rb +40 -16
  164. data/spec/controllers/attachments_controller_spec.rb +62 -0
  165. data/spec/controllers/base_controller_spec.rb +43 -42
  166. data/spec/controllers/elements_controller_spec.rb +30 -0
  167. data/spec/controllers/pages_controller_spec.rb +22 -5
  168. data/spec/controllers/pictures_controller_spec.rb +82 -0
  169. data/spec/dummy/app/models/event.rb +2 -1
  170. data/spec/dummy/config/database.yml +3 -2
  171. data/spec/dummy/db/schema.rb +51 -27
  172. data/spec/factories.rb +29 -8
  173. data/spec/helpers/admin/base_helper_spec.rb +134 -21
  174. data/spec/helpers/admin/contents_helper_spec.rb +2 -2
  175. data/spec/helpers/admin/elements_helper_spec.rb +17 -9
  176. data/spec/helpers/admin/essences_helper_spec.rb +7 -6
  177. data/spec/helpers/essences_helper_spec.rb +8 -7
  178. data/spec/helpers/pages_helper_spec.rb +208 -325
  179. data/spec/helpers/url_helper_spec.rb +171 -0
  180. data/spec/integration/admin/link_overlay_spec.rb +53 -0
  181. data/spec/integration/admin/modules_integration_spec.rb +22 -26
  182. data/spec/integration/admin/pages_controller_spec.rb +10 -19
  183. data/spec/integration/admin/picture_library_integration_spec.rb +52 -0
  184. data/spec/integration/admin/resources_integration_spec.rb +68 -75
  185. data/spec/integration/pages_controller_spec.rb +70 -61
  186. data/spec/integration/security_spec.rb +3 -5
  187. data/spec/integration/translation_integration_spec.rb +56 -0
  188. data/spec/libraries/essence_spec.rb +18 -0
  189. data/spec/libraries/resource_spec.rb +101 -79
  190. data/spec/libraries/resources_helper_spec.rb +3 -0
  191. data/spec/models/content_spec.rb +63 -60
  192. data/spec/models/element_spec.rb +203 -93
  193. data/spec/models/language_spec.rb +90 -65
  194. data/spec/models/page_layout_spec.rb +37 -0
  195. data/spec/models/page_spec.rb +181 -113
  196. data/spec/models/picture_spec.rb +73 -26
  197. data/spec/models/resource_spec.rb +52 -23
  198. data/spec/support/alchemy/specs_helpers.rb +2 -0
  199. data/spec/support/image.png +0 -0
  200. data/spec/{helpers/url_helpers_spec.rb → url_helpers_spec.rb} +0 -0
  201. data/vendor/assets/javascripts/jquery_plugins/jquery.selectBoxIt.js +1909 -0
  202. data/vendor/assets/javascripts/jquery_plugins/preloadCssImages.jQuery_v5.js +152 -0
  203. metadata +106 -33
  204. data/app/assets/stylesheets/alchemy/buttons.css.scss +0 -361
  205. data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +0 -260
  206. data/app/views/alchemy/admin/contents/create.js.coffee +0 -49
  207. data/app/views/alchemy/admin/elements/fold.js.coffee +0 -37
  208. data/app/views/alchemy/admin/essence_pictures/destroy.js.coffee +0 -19
  209. data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +0 -16
  210. data/app/views/alchemy/admin/pictures/update.js.erb +0 -3
  211. data/spec/dummy/config/locales/en.yml +0 -5
  212. data/spec/dummy/config/locales/fo.yml +0 -5
  213. data/spec/page_layout_spec.rb +0 -35
  214. data/vendor/assets/javascripts/jquery_plugins/jquery.in-place-edit.js +0 -172
  215. data/vendor/assets/javascripts/jquery_plugins/jquery.sb.min.js +0 -14
@@ -1,8 +1,8 @@
1
1
  <% cache(content) do %>
2
2
  <div class="content_editor essence_boolean" id="<%= content_dom_id(content) %>">
3
+ <input type="hidden" value="0" name="<%= content.form_field_name %>" />
3
4
  <%= check_box_tag(content.form_field_name, 1,
4
5
  !content.ingredient.nil? ? content.ingredient : options[:default_value],
5
- :onclick => "Alchemy.handleEssenceCheckbox(this)",
6
6
  :class => html_options[:class],
7
7
  :style => html_options[:style]
8
8
  ) %>
@@ -3,7 +3,7 @@
3
3
  <label><%= render_content_name(content) %></label>
4
4
  <% end %>
5
5
  <div class="picture_thumbnail">
6
- <span class="picture_tool_delete">
6
+ <span class="picture_tool delete">
7
7
  <% if options[:grouped] %>
8
8
  <%= link_to_confirmation_window(
9
9
  "",
@@ -13,8 +13,7 @@
13
13
  :options => options
14
14
  ),
15
15
  {
16
- :title => t("delete_image"),
17
- :class => "picture_delete"
16
+ :title => t("delete_image")
18
17
  }
19
18
  ) -%>
20
19
  <% else %>
@@ -24,7 +24,7 @@
24
24
  ),
25
25
  {
26
26
  :title => (content.ingredient ? t('swap_image') : t('insert_image')),
27
- :size => '720x580',
27
+ :size => '780x580',
28
28
  :resizable => "true"
29
29
  },
30
30
  :title => (content.ingredient ? t('swap_image') : t('insert_image'))
@@ -0,0 +1,8 @@
1
+ <%= form_tag(show_alchemy_page_path(@search_result_page), :method => :get, :class => 'fulltext_search') do %>
2
+ <% if options[:html5] %>
3
+ <%= search_field_tag(:query, params[:query], :placeholder => t('search query')) %>
4
+ <% else %>
5
+ <%= text_field_tag(:query, params[:query]) %>
6
+ <% end %>
7
+ <%= submit_tag(t("search"), :name => nil) %>
8
+ <% end %>
@@ -1,6 +1,7 @@
1
1
  <li class="search_result">
2
- <h3><%= t('Page') %>:
3
- <%= link_to page.name, show_alchemy_page_path(page, {:query => 'test'}) %>
2
+ <h3>
3
+ <%= t('search_result_page.result_page') %>:
4
+ <%= link_to page.name, show_alchemy_page_path(page) %>
4
5
  <%= content_tag(:span, page.language_code.upcase, :class => 'language_code') if multi_language? && options[:show_language] %>
5
6
  </h3>
6
7
  <%- result.each do |highlight| -%>
@@ -0,0 +1,28 @@
1
+ <div class="search_results">
2
+ <% if @search_results.blank? %>
3
+ <h2 class="no_search_results">
4
+ <%=raw t('search_result_page.no_results', :query => h(params[:query])) %>
5
+ </h2>
6
+ <% else %>
7
+ <% if options[:show_heading] %>
8
+ <h1 class="search_results_heading">
9
+ <%=raw t("search_result_page.result_heading", :query => h(params[:query])) %>
10
+ </h1>
11
+ <% end %>
12
+ <% if options[:show_result_count] %>
13
+ <h2 class="search_result_count">
14
+ <%=raw t("search_result_page.result_count", :count => @search_results.length) %>
15
+ </h2>
16
+ <% end %>
17
+ <ul class="search_result_list">
18
+ <% @search_results.each do |search_result| %>
19
+ <% result = search_result.highlight(
20
+ "*#{params[:query]}*", {
21
+ :field => (search_result.class.name == "Alchemy::EssenceRichtext" ? :stripped_body : :body)
22
+ }
23
+ ) %>
24
+ <%= render 'alchemy/search/result', :result => result, :options => options, :page => search_result.page %>
25
+ <% end %>
26
+ </ul>
27
+ <% end %>
28
+ </div>
@@ -1,11 +1,11 @@
1
1
  <div class="with_padding">
2
2
  <h2><%= t("You are about to leave Alchemy") %>.</h2>
3
- <p style="line-height: 24px">
4
- <%= t("Do you want to") %>
3
+ <p class="buttons">
4
+ <label><%= t("Do you want to") %></label>
5
5
  <%= link_to t('stay logged in'), alchemy.root_path, :class => 'button' %>
6
6
  </p>
7
- <p style="line-height: 24px">
8
- <%= t('or to completly') %>
7
+ <p class="buttons">
8
+ <label><%= t('or to completly') %></label>
9
9
  <%= link_to t('logout'), alchemy.logout_path, :class => 'button' %>
10
10
  </p>
11
11
  </div>
@@ -1,7 +1,6 @@
1
1
  <div id="login_box">
2
2
  <div id="alchemy_greeting">
3
3
  <%= image_tag("alchemy/alchemy-logo.png", :style => "width: 240px; height: 70px") %>
4
- <h1><%= flash[:info] %></h1>
5
4
  </div>
6
5
  <div class="login_signup_box">
7
6
  <%= form_for @user_session, :url => {:action => 'login'}, :html => { :id => "login" } do |f| %>
@@ -12,7 +11,7 @@
12
11
  <%= f.label :login %>
13
12
  </td>
14
13
  <td class="input">
15
- <%= f.text_field :login, :class => 'thin_border' %>
14
+ <%= f.text_field :login, :class => 'thin_border', :autofocus => true %>
16
15
  </td>
17
16
  </tr>
18
17
  <tr>
@@ -33,9 +33,22 @@
33
33
  <%= yield(:alchemy_main_navigation) %>
34
34
  </div>
35
35
  <div id="logout">
36
- <%= link_to_overlay_window("<span class='module icon exit'></span><label>#{t('leave')}</label>".html_safe, alchemy.leave_admin_path, {:size => "300x105", :title => t("Leave Alchemy")}) %>
36
+ <% if current_user %>
37
+ <%= link_to_overlay_window(
38
+ "<span class='module icon exit'></span><label>#{t('leave')}</label>".html_safe,
39
+ alchemy.leave_admin_path, {
40
+ :size => "300x105",
41
+ :title => t("Leave Alchemy")
42
+ }) %>
43
+ <% else %>
44
+ <%= link_to(alchemy.root_path) do %>
45
+ <span class="module icon exit"></span>
46
+ <label><%= t('leave') %></label>
47
+ <% end %>
48
+ <% end %>
37
49
  </div>
38
50
  </div>
51
+ <% if current_user %>
39
52
  <div id="top_menu">
40
53
  <div id="sub_navigation">
41
54
  <%= admin_subnavigation %>
@@ -46,35 +59,42 @@
46
59
  <div id="toolbar">
47
60
  <%= yield(:toolbar) %>
48
61
  </div>
49
- <%- if current_user -%>
50
62
  <div id="user_info">
63
+ <%= select_tag 'change_locale', options_for_select(::I18n.available_locales.map { |l| [l.to_s.upcase, l] }, ::I18n.locale), :class => 'alchemy_select tiny' %>
51
64
  <%= t('Logged in as') %> <%= current_user.name %>
52
65
  </div>
53
- <%- end -%>
54
66
  </div>
67
+ <% end %>
55
68
  <%= render :partial => 'alchemy/admin/partials/flash_notices' %>
56
69
  <div id="main_content">
57
- <div id="archive_all">
58
- <%= yield %>
59
- </div>
70
+ <%= yield %>
60
71
  </div>
61
72
  <%= yield(:javascripts) %>
62
73
  <script type="text/javascript" charset="utf-8">
63
74
  jQuery(function($) {
75
+ // Preloading all background images from CSS files.
76
+ $.preloadCssImages();
64
77
  $('html').removeClass('no-js');
65
78
  Alchemy.locale = '<%= ::I18n.locale %>';
66
79
  Alchemy.resizeFrame();
67
80
  Alchemy.Tooltips();
68
- if (typeof(jQuery().sb) === 'function') {
69
- Alchemy.SelectBox('body#alchemy select.alchemy_selectbox');
70
- }
81
+ Alchemy.SelectBox();
71
82
  Alchemy.Datepicker();
72
83
  if ($('#flash_notices').length > 0) {
73
84
  Alchemy.Growler.fade();
74
85
  }
75
- $('a.please_wait, form .button, form .icon_button, #main_navi a.main_navi_entry, #sub_navigation .subnavi_tab a, .pagination a').not('#subnav_additions .subnavi_tab button').click(function() {
86
+ $('a.please_wait, form button.button, form .icon_button, #main_navi a.main_navi_entry, #sub_navigation .subnavi_tab a, .pagination a').not('*[data-alchemy-confirm], #subnav_additions .subnavi_tab button').click(function() {
76
87
  Alchemy.pleaseWaitOverlay();
77
88
  });
89
+ // Hack for enabling tab focus for a's styled as button
90
+ $('a.button').attr({tabindex: 0});
91
+
92
+ // Locale select handler
93
+ $('select#change_locale').on('change', function(e) {
94
+ var url = '<%= url_for.html_safe %>';
95
+ delimiter = url.match(/\?/) ? '&' : '?';
96
+ window.location = url + delimiter + 'locale=' + $(this).val();
97
+ });
78
98
  });
79
99
  jQuery(window).resize(function() {
80
100
  Alchemy.resizeFrame();
@@ -1,39 +1,2 @@
1
- <!DOCTYPE html>
2
- <html class="no-js">
3
- <head>
4
- <meta charset="UTF-8">
5
- <title><%= render_alchemy_title %></title>
6
- <%= csrf_meta_tag %>
7
- <%= stylesheet_link_tag('alchemy/alchemy', :media => 'screen') %>
8
- <%= stylesheet_link_tag('alchemy/print', :media => 'print') %>
9
- <%= javascript_include_tag('alchemy/alchemy') %>
10
- </head>
11
- <body id="alchemy" class="login">
12
- <noscript>
13
- <h1><%= t(:javascript_disabled_headline) %></h1>
14
- <p><%= t(:javascript_disabled_text) %></p>
15
- </noscript>
16
- <div id="left_menu">
17
- <div id="main_navi">
18
- <div id="logout">
19
- <%= link_to(alchemy.root_path) do %>
20
- <span class="module icon exit"></span>
21
- <label><%= t('leave') %></label>
22
- <% end %>
23
- </div>
24
- </div>
25
- <div id="left_menu_background"></div>
26
- </div>
27
- <div id="main_content">
28
- <%= yield %>
29
- </div>
30
- <%= yield(:javascripts) %>
31
- <script type="text/javascript" charset="utf-8">
32
- jQuery(document).ready(function($) {
33
- $('html').removeClass('no-js');
34
- Alchemy.SelectBox('body#alchemy select.alchemy_selectbox');
35
- Alchemy.ButtonObserver('.button');
36
- });
37
- </script>
38
- </body>
39
- </html>
1
+ <%# This file only exist for cases where one want to override the login view %>
2
+ <%= render :template => 'layouts/alchemy/admin' %>
@@ -185,9 +185,8 @@
185
185
  type: EssenceText
186
186
 
187
187
  - name: image_mosaic
188
+ picture_gallery: true
188
189
  contents:
189
- - name: image
190
- type: EssencePicture
191
190
  - name: caption
192
191
  type: EssenceText
193
192
  - name: show_caption
@@ -1,5 +1,5 @@
1
1
  # == This file defines the page_layouts for new pages.
2
- #
2
+ #
3
3
  # Please make your own page_layouts for your app in your own Rails.root/config/alchemy/page_layouts.yml file.
4
4
  #
5
5
  # === DSL:
@@ -17,17 +17,17 @@
17
17
  # action: action_name # Controllers action to use instead of the default PagesController#show
18
18
  #
19
19
  # === Translate page layout names
20
- #
20
+ #
21
21
  # Page layout names are passed through the I18n library. So you can translate them in your config/locales language yml file.
22
- #
22
+ #
23
23
  # Example:
24
- #
24
+ #
25
25
  # de:
26
26
  # alchemy:
27
27
  # page_layout_names:
28
28
  # contact: Kontakt
29
29
  # search: Suche
30
- #
30
+ #
31
31
  - name: intro
32
32
  unique: true
33
33
  elements: [header, intro_image_text]
@@ -66,3 +66,6 @@
66
66
  unique: true
67
67
  layoutpage: true
68
68
  elements: [footnote]
69
+
70
+ - name: external
71
+ redirects_to_external: true
@@ -1,26 +1,35 @@
1
1
  authorization do
2
-
2
+
3
3
  role :guest do
4
4
  has_permission_on :alchemy_pages, :to => [:show] do
5
5
  if_attribute :public => true, :restricted => false
6
6
  end
7
7
  has_permission_on :alchemy_elements, :to => [:show] do
8
- if_attribute :public => true
8
+ if_attribute :public => true, :restricted? => false
9
+ end
10
+ has_permission_on :alchemy_attachments, :to => [:show, :download] do
11
+ if_attribute :restricted? => false
12
+ end
13
+ has_permission_on :alchemy_pictures, :to => [:show] do
14
+ if_attribute :restricted? => false
9
15
  end
10
- has_permission_on :alchemy_pictures, :to => [:show]
11
- has_permission_on :attachments, :to => [:show, :download]
12
16
  end
13
-
17
+
14
18
  role :registered do
15
19
  includes :guest
16
20
  has_permission_on :alchemy_pages, :to => [:show] do
17
21
  if_attribute :public => true
18
22
  end
23
+ has_permission_on :alchemy_elements, :to => [:show] do
24
+ if_attribute :public => true
25
+ end
19
26
  has_permission_on :alchemy_admin_users, :to => [:edit, :update] do
20
27
  if_attribute :id => is {user.id}
21
28
  end
29
+ has_permission_on :alchemy_attachments, :to => [:show, :download]
30
+ has_permission_on :alchemy_pictures, :to => [:show]
22
31
  end
23
-
32
+
24
33
  role :author do
25
34
  includes :registered
26
35
  has_permission_on :alchemy_admin_dashboard, :to => [:index]
@@ -36,55 +45,55 @@ authorization do
36
45
  has_permission_on :alchemy_admin_trash, :to => [:index, :clear]
37
46
  has_permission_on :alchemy_admin_clipboard, :to => [:index, :insert, :remove, :clear]
38
47
  end
39
-
48
+
40
49
  role :editor do
41
50
  includes :author
42
51
  has_permission_on :alchemy_admin_attachments, :to => [:manage]
43
- has_permission_on :alchemy_admin_pictures, :to => [:manage, :flush]
52
+ has_permission_on :alchemy_admin_pictures, :to => [:manage, :flush, :delete_multiple, :edit_multiple, :update_multiple]
44
53
  has_permission_on :alchemy_admin_pages, :to => [:manage_pages]
45
54
  has_permission_on :alchemy_admin_layoutpages, :to => [:index]
46
55
  end
47
-
56
+
48
57
  role :admin do
49
58
  includes :editor
50
59
  has_permission_on :alchemy_admin_users, :to => [:manage]
51
60
  has_permission_on :alchemy_admin_languages, :to => [:manage]
52
61
  has_permission_on :authorization_rules, :to => :read
53
62
  end
54
-
63
+
55
64
  end
56
65
 
57
66
  privileges do
58
-
67
+
59
68
  # default privilege hierarchies to facilitate RESTful Rails apps
60
69
  privilege :manage, :includes => [:create, :read, :update, :delete]
61
70
  privilege :read, :includes => [:index, :show]
62
71
  privilege :create, :includes => :new
63
72
  privilege :update, :includes => :edit
64
73
  privilege :delete, :includes => :destroy
65
-
74
+
66
75
  privilege :manage_pages, :alchemy_admin_pages do
67
76
  includes :manage, :switch_language, :sort, :order, :configure, :flush, :copy, :copy_language_tree
68
77
  end
69
-
78
+
70
79
  privilege :manage_elements, :alchemy_admin_elements do
71
80
  includes :manage, :copy_to_clipboard, :order, :fold, :list, :trash
72
81
  end
73
-
82
+
74
83
  privilege :manage_contents, :alchemy_admin_contents do
75
84
  includes :manage, :order
76
85
  end
77
-
86
+
78
87
  privilege :manage_picture_essences, :alchemy_admin_essence_pictures do
79
88
  includes :manage, :save_link, :assign, :crop
80
89
  end
81
-
90
+
82
91
  privilege :manage_file_essences, :alchemy_admin_essence_files do
83
92
  includes :manage, :assign
84
93
  end
85
-
94
+
86
95
  privilege :edit_page_content, :alchemy_admin_pages do
87
96
  includes :edit, :unlock, :show, :publish, :visit
88
97
  end
89
-
98
+
90
99
  end
@@ -0,0 +1,9 @@
1
+ # unless ENV['CI']
2
+
3
+ # require 'localeapp/rails'
4
+
5
+ # Localeapp.configure do |config|
6
+ # config.api_key = 'afwgJCX6Xq40Y2gQSU9sdYFJ2XmQdAhgKmZPd69TOLdsT7e4Sy'
7
+ # end
8
+
9
+ # end
@@ -21,6 +21,7 @@ de:
21
21
  search: Suche
22
22
  layout_header: 'Header Bereich'
23
23
  layout_footer: 'Footer Bereich'
24
+ external: Externer Link
24
25
 
25
26
  # == Translations for element names
26
27
  # Just use the elements name like defined inside the config/alchemy/elements.yml file and translate it.
@@ -91,12 +92,12 @@ de:
91
92
 
92
93
  # == Translations for the build in full text search.
93
94
  search_result_page:
94
- no_results: 'Ihre Suche ergab kein Ergebnis.'
95
+ result_page: Seite
96
+ no_results: "Ihre Suche nach '%{query}' ergab keine Treffer."
95
97
  result_heading: "Ihre Suche nach '%{query}'"
96
98
  result_count:
97
- zero: "Ergab keine Ergebnisse"
98
- one: "Ergab ein Ergebnis"
99
- other: "Ergab %{count} Ergebnisse"
99
+ one: "Ergab einen Treffer"
100
+ other: "Ergab %{count} Treffer"
100
101
 
101
102
  # == Contactform translations
102
103
  contactform:
@@ -183,7 +184,7 @@ de:
183
184
  "Alchemy is open software and itself uses open software and free resources:": "Alchemy ist offene Software und benutzt selbst offene Software und freie Ressourcen:"
184
185
  "Choose page": "Seite wählen"
185
186
  "Cleared trash": "Der Papierkorb wurde geleert"
186
- "Click to rename": "Klicken zum umbenennen"
187
+ "Clear selection": "Auswahl aufheben"
187
188
  "Clipboard": "Zwischenablage"
188
189
  "Copy": "Kopie"
189
190
  "Could not load Adobe Flash® Plugin!": "Adobe Flash® Plugin konnte nicht geladen werden!"
@@ -195,6 +196,8 @@ de:
195
196
  "Do you really want to delete this content?": "Wollen Sie diesen Inhalt wirklich löschen?"
196
197
  "Drag an element over to the element window to restore it": "Ziehen Sie ein Element mit der Maus in das Elemente Fenster, um es wieder herzustellen."
197
198
  "Edit Picturemask": "Bildmaske bearbeiten"
199
+ "Edit image": "Bild bearbeiten"
200
+ "Edit multiple pictures": "Mehrere Bilder bearbeiten"
198
201
  "Elements": "Elemente"
199
202
  "Element trashed": "Das Element wurde in den Papierkorb gelegt"
200
203
  "Error with the Flash® Uploader!": "Fehler mit dem Flash® Uploader!"
@@ -203,6 +206,7 @@ de:
203
206
  "File renamed successfully from: '%{from}' to '%{to}'": "Datei wurde erfolgreich von: '%{from}' nach '%{to}' umbenannt."
204
207
  "File upload error: %{error}": "Datei konnte nicht hochgeladen werden: %{error}"
205
208
  "File: '%{name}' deleted successfully": "%{name} wurde gelöscht"
209
+ "Filter by tag": "Nach Schlagwörtern filtern"
206
210
  "Flush page cache": "Seitencache löschen"
207
211
  "Flush picture cache": "Bildercache löschen"
208
212
  "Have much fun with Alchemy!": "Viel Spaß mit Alchemy!"
@@ -245,17 +249,22 @@ de:
245
249
  "Picture uploaded succesfully": "Bild %{name} wurde hochgeladen"
246
250
  "Picture renamed successfully": "Bild wurde erfolgreich von %{from} nach %{to} umbenannt"
247
251
  "Picture deleted successfully": "%{name} wurde gelöscht"
252
+ "Pictures deleted successfully": "Die Bilder %{names} wurden gelöscht"
253
+ "Pictures updated successfully": "Die Bilder wurden gespeichert"
248
254
  "Picture cache flushed": "Bildercache wurde geleert"
249
255
  "Please Signup": "Um Ihre Homepage bearbeiten zu können, müssen Sie als erstes einen Admin Benutzer einrichten."
250
256
  "Please choose": "Bitte wählen"
251
257
  "Please log in": "Bitte melden Sie sich an."
258
+ "Please seperate the tags with commata": "*) Die Schlagwörter bitte mit Kommata getrennt eingeben."
252
259
  use_alternative_uploader_instead: "Benutzen Sie bitte diesen alternativen Uploader."
253
260
  "Publish page": "veröffentlichen"
254
261
  "Read the License": "Lizenz lesen"
255
262
  "Redirects to": "Leitet weiter auf"
256
263
  "Remove item from clipboard": "Inhalt aus der Zwischenablage entfernen"
264
+ "Remove tag filter": "Filter entfernen"
257
265
  "Remove this content": "Diesen Inhalt entfernen"
258
266
  "Reset Imagemask": "Bildmaske zurücksetzen"
267
+ "Select all": "Alle auswählen"
259
268
  "Select an content": "Wählen Sie einen Inhalt aus"
260
269
  "Select style": "Stilvorlage"
261
270
  "Send email with credentials": "Sende Benutzerdaten per Email"
@@ -273,6 +282,7 @@ de:
273
282
  sitemap_editor_info: "Die Sitemap wird automatisch generiert"
274
283
  searchresults_editor_info: "Dieses Element stellt die Suchergebnisse dar. Es Bedarf keinerlei Anpassung."
275
284
  element_dirty_notice: "Dieses Element hat nicht gespeicherte Änderungen. Möchten Sie es wirklich einklappen?"
285
+ "Tags": "Schlagwörter"
276
286
  "This page is locked by %{name}": "Diese Seite wird gerade von %{name} blockiert"
277
287
  "Title": "Titel"
278
288
  "To manage your website open a browser and go to": "Um die Inhalte Ihrer Webseite zu bearbeiten klicken Sie bitte auf folgenden Link"
@@ -294,6 +304,7 @@ de:
294
304
  "Who else is online": "Wer ist noch online"
295
305
  "Yes": "Ja"
296
306
  "You are not authorized": "Sie sind dazu nicht authorisiert."
307
+ "You are about to edit %{length} pictures at once": "Sie sind dabei %{length} Bilder auf einmal zu bearbeiten."
297
308
  element_dirty_close_window_notice: "Sie haben ungesicherte Elemente. Möchten Sie das Elemente Fenster wirklich schließen?"
298
309
  "You may upload files with following extensions": "Sie können %{file_types_description} mit folgenden Endungen hochladen: %{file_types}"
299
310
  "You may upload any file": "Sie können jede Art von Datei hochladen."
@@ -309,10 +320,12 @@ de:
309
320
  align_in_text: "Im Text anordnen"
310
321
  all: "alle"
311
322
  allow_fullscreen: "Vollbild ansicht"
323
+ all_pictures: "Alle Bilder anzeigen"
312
324
  apply: "übernehmen"
313
325
  assign_file: "Datei zuweisen"
314
326
  assign_file_from_archive: "Datei aus dem Archiv zuweisen"
315
327
  assign_image: "Bild hinzufügen."
328
+ attachment_filename_notice: "*) Bitte verwenden Sie keine Sonderzeichen oder Umlaute in dem Dateinamen."
316
329
  auto_play: "Film automatisch abspielen"
317
330
  big_thumbnails: "große Miniaturbilder"
318
331
  browse: "durchsuchen"
@@ -326,6 +339,7 @@ de:
326
339
  confirm_to_delete_file: "Wollen Sie diese Datei wirklich vom Server löschen?"
327
340
  confirm_to_delete_image: "Wollen Sie dieses Bild wirklich löschen?"
328
341
  confirm_to_delete_image_from_server: "Wollen Sie dieses Bild wirklich vom Server löschen?"
342
+ confirm_to_delete_images_from_server: "Wollen Sie diese Bilder wirklich vom Server löschen?"
329
343
  confirm_to_delete_language: "Wollen Sie diese Sprache wirklich löschen?<br/>ACHTUNG! Alle zugehörigen Seiten werden ebenfalls gelöscht!"
330
344
  confirm_to_delete_page: "Wollen Sie diese Seite wirklich löschen? Alle Inhalte gehen dabei unwiderruflich verloren!"
331
345
  confirm_to_delete_user: "Wollen Sie diesen Benutzer wirklich löschen?"
@@ -336,6 +350,7 @@ de:
336
350
  copy: "kopieren"
337
351
  copy_element: "Element kopieren"
338
352
  copy_page: "Seite kopieren"
353
+ "Could not delete Pictures": "Bilder konnten nicht gelöscht werden"
339
354
  copy_language_tree_heading: "Einen Sprachbaum kopieren"
340
355
  country_code_placeholder: 'z.B. at (optional)'
341
356
  country_code_foot_note: "Der Ländercode ist nur notwendig, wenn Sie mehrere Länder mit unterschiedlichen Sprachen versehen wollen."
@@ -362,6 +377,7 @@ de:
362
377
  edit_page: "Seite bearbeiten"
363
378
  edit_page_properties: "Seiteneigenschaften bearbeiten"
364
379
  edit_user: "Benutzer bearbeiten"
380
+ edit_selected_pictures: "Selektierte Bilder:"
365
381
  element_dirty_page_leave_warning: "Sie haben ungesicherte Elemente auf der Seite. Möchten Sie wirklich fortfahren?"
366
382
  element_editor_not_found: "Bei diesem Element ist ein Fehler aufgetreten"
367
383
  element_of_type: "Element"
@@ -399,6 +415,7 @@ de:
399
415
  language_code_placeholder: 'z.B. de'
400
416
  language_does_not_exist: "Dieser Sprachbaum existiert noch nicht"
401
417
  language_pages_copied: "Der Sprachbaum wurde kopiert"
418
+ last_upload_only: "Zuletzt hochgeladene"
402
419
  left: "links"
403
420
  link_image: "Bild verlinken"
404
421
  link_overlay_tab_label:
@@ -441,6 +458,7 @@ de:
441
458
  no_more_elements_to_add: "Keine weiteren Elemente verfügbar."
442
459
  no_search_results: "Keine Suchergebnisse."
443
460
  "not a valid image": "Keine valide Bilddatei."
461
+ "or": 'oder'
444
462
  "Page created": "Seite '%{name}' wurde erstellt."
445
463
  page_for_links:
446
464
  choose_page: "%{name} wählen"
@@ -471,11 +489,16 @@ de:
471
489
  password: "Passwort"
472
490
  paste: "einfügen"
473
491
  picture_gallery_editor: 'Bilder'
492
+ picture_library:
493
+ filter:
494
+ last_upload: "Zuletzt hochgeladene Bilder"
495
+ recent: "Bilder der letzten 24 Stunden"
474
496
  place_link: "Text verlinken"
475
497
  player_version: "Flashplayer Version"
476
498
  "please enter subject and mail address": "Bitte geben Sie den Betreff und eine Empfängeradresse an."
477
499
  please_confirm: "Bitte bestätigen"
478
500
  please_wait: "Bitte warten"
501
+ recently_uploaded_only: 'Kürzlich hochgeladene'
479
502
  "regular method": "herkömmlichen Methode"
480
503
  remove: "entfernen"
481
504
  rename_file: "Datei umbenennen"
@@ -486,6 +509,7 @@ de:
486
509
  "save order": "Sortierung speichern"
487
510
  saved_link: "Link wurde gespeichert."
488
511
  search: "suchen"
512
+ 'search query': 'Suchbegriff'
489
513
  search_engines: "Suchmaschinen"
490
514
  select_element: "Element wählen"
491
515
  show_element_content: "Element ausklappen"
@@ -653,7 +677,66 @@ de:
653
677
  two_words_connector: " und "
654
678
  last_word_connector: " und "
655
679
 
680
+ errors: &errors
681
+ template:
682
+
683
+ header: "Formular-Prüfung fehlgeschlagen"
684
+ body: "Bitte überprüfen Sie Ihre Angaben an Hand der aufgelisteten Fehler"
685
+
686
+ messages:
687
+ inclusion: "ist kein gültiger Wert"
688
+ exclusion: "ist nicht verfügbar"
689
+ invalid: "ist nicht gültig"
690
+ record_invalid: 'Validierung von %{errors} ist fehlgeschlagen'
691
+ confirmation: "stimmt nicht mit der Bestätigung überein"
692
+ accepted: "muss akzeptiert werden"
693
+ empty: "muss ausgefüllt werden"
694
+ blank: "muss ausgefüllt werden"
695
+ too_long: "ist zu lang (nicht mehr als %{count} Zeichen)"
696
+ too_short: "ist zu kurz (nicht weniger als %{count} Zeichen)"
697
+ wrong_length: "hat die falsche Länge (muss genau %{count} Zeichen haben)"
698
+ taken: "ist bereits vergeben"
699
+ not_a_number: "ist keine Zahl"
700
+ greater_than: "muss größer als %{count} sein"
701
+ greater_than_or_equal_to: "muss größer oder gleich %{count} sein"
702
+ equal_to: "muss genau %{count} sein"
703
+ less_than: "muss kleiner als %{count} sein"
704
+ less_than_or_equal_to: "muss kleiner oder gleich %{count} sein"
705
+ odd: "muss ungerade sein"
706
+ even: "muss gerade sein"
707
+
708
+ models:
709
+ alchemy/content:
710
+ attributes:
711
+ essence:
712
+ validation_failed: 'Validierung fehlgeschlagen.'
713
+ alchemy/element:
714
+ attributes:
715
+ name:
716
+ blank: "^Bitte wählen Sie ein Element."
717
+ alchemy/language:
718
+ attributes:
719
+ language_code:
720
+ invalid: 'ist nicht korrekt. Bitte exakt zwei Kleinbuchstaben verwenden.'
721
+ taken: 'ist für dieses Länderkürzel bereits vergeben.'
722
+ alchemy/page:
723
+ attributes:
724
+ name:
725
+ blank: "^Bitte geben Sie einen Namen ein."
726
+ page_layout:
727
+ blank: "^Bitte wählen Sie einen Seitentyp."
728
+ urlname:
729
+ too_short: "^Der URL-Name der Seite ist zu kurz (min. 3 Zeichen)"
730
+ taken: "^Der URL-Name ist bereits vergeben."
731
+ exclusion: "^Der URL-Name der Seite kann nicht benutzt werden."
732
+
656
733
  activemodel:
734
+
735
+ models:
736
+ alchemy/message:
737
+ one: "Nachricht"
738
+ other: "Nachrichten"
739
+
657
740
  attributes:
658
741
  alchemy/message:
659
742
  salutation: Anrede
@@ -666,6 +749,9 @@ de:
666
749
  email: E-Mail
667
750
  message: Nachricht
668
751
 
752
+ errors:
753
+ <<: *errors
754
+
669
755
  # Translations for active record database models and error messages.
670
756
  activerecord:
671
757
 
@@ -759,6 +845,7 @@ de:
759
845
  image_height: "Bildhöhe"
760
846
  image_width: "Bildbreite"
761
847
  name: "Name"
848
+ tag_list: Schlagwörter
762
849
 
763
850
  alchemy/user:
764
851
  email: "Email"
@@ -774,57 +861,7 @@ de:
774
861
  role: "Benutzerrolle"
775
862
 
776
863
  errors:
777
- template:
778
-
779
- header: "Prüfung fehlgeschlagen"
780
- body: ""
781
-
782
- messages:
783
- inclusion: "ist kein gültiger Wert"
784
- exclusion: "ist nicht verfügbar"
785
- invalid: "ist nicht gültig"
786
- record_invalid: 'Validierung von %{errors} ist fehlgeschlagen'
787
- confirmation: "stimmt nicht mit der Bestätigung überein"
788
- accepted: "muss akzeptiert werden"
789
- empty: "muss ausgefüllt werden"
790
- blank: "muss ausgefüllt werden"
791
- too_long: "ist zu lang (nicht mehr als %{count} Zeichen)"
792
- too_short: "ist zu kurz (nicht weniger als %{count} Zeichen)"
793
- wrong_length: "hat die falsche Länge (muss genau %{count} Zeichen haben)"
794
- taken: "ist bereits vergeben"
795
- not_a_number: "ist keine Zahl"
796
- greater_than: "muss größer als %{count} sein"
797
- greater_than_or_equal_to: "muss größer oder gleich %{count} sein"
798
- equal_to: "muss genau %{count} sein"
799
- less_than: "muss kleiner als %{count} sein"
800
- less_than_or_equal_to: "muss kleiner oder gleich %{count} sein"
801
- odd: "muss ungerade sein"
802
- even: "muss gerade sein"
803
-
804
- models:
805
- alchemy/content:
806
- attributes:
807
- essence:
808
- validation_failed: 'Validierung fehlgeschlagen.'
809
- alchemy/element:
810
- attributes:
811
- name:
812
- blank: "^Bitte wählen Sie ein Element."
813
- alchemy/language:
814
- attributes:
815
- language_code:
816
- invalid: 'ist nicht korrekt. Bitte exakt zwei Kleinbuchstaben verwenden.'
817
- taken: 'ist für dieses Länderkürzel bereits vergeben.'
818
- alchemy/page:
819
- attributes:
820
- name:
821
- blank: "^Bitte geben Sie einen Namen ein."
822
- page_layout:
823
- blank: "^Bitte wählen Sie einen Seitentyp."
824
- urlname:
825
- too_short: "^Der URL-Name der Seite ist zu kurz (min. 3 Zeichen)"
826
- taken: "^Der URL-Name ist bereits vergeben."
827
- exclusion: "^Der URL-Name der Seite kann nicht benutzt werden."
864
+ <<: *errors
828
865
 
829
866
  # Translations for the authentication system used in alchemy.
830
867
  authlogic: