summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/concerns/rrule_humanizer.rb3
-rw-r--r--app/views/assets/edit.html.erb32
-rw-r--r--app/views/assets/index.html.erb18
-rw-r--r--app/views/assets/new.html.erb28
-rw-r--r--app/views/assets/show.html.erb30
-rw-r--r--app/views/events/_rrule_builder.html.erb22
-rw-r--r--app/views/events/edit.html.erb38
-rw-r--r--app/views/events/index.html.erb24
-rw-r--r--app/views/events/new.html.erb30
-rw-r--r--app/views/events/show.html.erb32
-rw-r--r--app/views/events/without_node.html.erb20
-rw-r--r--config/locales/de.yml99
-rw-r--r--config/locales/en.yml99
13 files changed, 337 insertions, 138 deletions
diff --git a/app/models/concerns/rrule_humanizer.rb b/app/models/concerns/rrule_humanizer.rb
index 07141c16..6d6a4195 100644
--- a/app/models/concerns/rrule_humanizer.rb
+++ b/app/models/concerns/rrule_humanizer.rb
@@ -11,7 +11,8 @@ module RruleHumanizer
11 }.freeze 11 }.freeze
12 12
13 WEEKDAY_NAMES_ABBR = { 13 WEEKDAY_NAMES_ABBR = {
14 de: { "MO"=>"Mo","TU"=>"Di","WE"=>"Mi","TH"=>"Do","FR"=>"Fr","SA"=>"Sa","SU"=>"So" } 14 de: { "MO"=>"Mo","TU"=>"Di","WE"=>"Mi","TH"=>"Do","FR"=>"Fr","SA"=>"Sa","SU"=>"So" },
15 :en => { "MO" => "Mon", "TU" => "Tue", "WE" => "Wed", "TH" => "Thu", "FR" => "Fri", "SA" => "Sat", "SU" => "Sun" },
15 }.freeze 16 }.freeze
16 17
17 ORDINAL_NAMES = { 18 ORDINAL_NAMES = {
diff --git a/app/views/assets/edit.html.erb b/app/views/assets/edit.html.erb
index 46f8ed9f..5214e082 100644
--- a/app/views/assets/edit.html.erb
+++ b/app/views/assets/edit.html.erb
@@ -1,5 +1,5 @@
1<div id="admin_layout"> 1<div id="admin_layout">
2 <h1>Editing asset</h1> 2 <h1><%= t(".title") %></h1>
3 3
4 <%= form_for(@asset, html: { multipart: true }) do |f| %> 4 <%= form_for(@asset, html: { multipart: true }) do |f| %>
5 <%= form_error_messages(f) %> 5 <%= form_error_messages(f) %>
@@ -9,56 +9,56 @@
9 <div class="layout_row_content"><%= f.text_field :name %></div> 9 <div class="layout_row_content"><%= f.text_field :name %></div>
10 10
11 <% if @asset.upload.present? %> 11 <% if @asset.upload.present? %>
12 <div class="layout_row_label">Current File</div> 12 <div class="layout_row_label"><%= t(".current_file") %></div>
13 <div class="layout_row_content"><%= @asset.upload.url %> (<%= number_to_human_size(@asset.upload.size) %>)</div> 13 <div class="layout_row_content"><%= @asset.upload.url %> (<%= number_to_human_size(@asset.upload.size) %>)</div>
14 <% end %> 14 <% end %>
15 15
16 <div class="layout_row_label"><%= f.label :upload, "Replace file" %></div> 16 <div class="layout_row_label"><%= f.label :upload, t(".replace_file") %></div>
17 <div class="layout_row_content"> 17 <div class="layout_row_content">
18 <div id="asset_dropzone"> 18 <div id="asset_dropzone">
19 <%= f.file_field :upload %> 19 <%= f.file_field :upload %>
20 <p class="field_hint">or drop a file here.</p> 20 <p class="field_hint"><%= t("assets.form.drop_hint") %></p>
21 </div> 21 </div>
22 </div> 22 </div>
23 23
24 <div class="layout_row_label"><%= f.label :creator %></div> 24 <div class="layout_row_label"><%= f.label :creator %></div>
25 <div class="layout_row_content"><%= f.text_field :creator %></div> 25 <div class="layout_row_content"><%= f.text_field :creator %></div>
26 26
27 <div class="layout_row_label"><%= f.label :source_url, "Source URL" %></div> 27 <div class="layout_row_label"><%= f.label :source_url %></div>
28 <div class="layout_row_content"><%= f.text_field :source_url %></div> 28 <div class="layout_row_content"><%= f.text_field :source_url %></div>
29 29
30 <div class="layout_row_label"><%= f.label :license_key, "License" %></div> 30 <div class="layout_row_label"><%= f.label :license_key %></div>
31 <div class="layout_row_content"> 31 <div class="layout_row_content">
32 <%= f.select :license_key, 32 <%= f.select :license_key,
33 options_for_select( 33 options_for_select(
34 [["none", ""]] + AssetLicense.keys.map { |key| [t("asset_licenses.#{key}"), key] }, 34 [[t("assets.form.none_option"), ""]] + AssetLicense.keys.map { |key| [t("asset_licenses.#{key}"), key] },
35 @asset.license_key 35 @asset.license_key
36 ) %> 36 ) %>
37 </div> 37 </div>
38 38
39 <div class="layout_row_label">attach to page</div> 39 <div class="layout_row_label"><%= t("assets.form.attach_to_page") %></div>
40 <div class="layout_row_content"> 40 <div class="layout_row_content">
41 <div class="restore_picker"> 41 <div class="restore_picker">
42 <%= text_field_tag :asset_node_search_term, @attach_node&.title, 42 <%= text_field_tag :asset_node_search_term, @attach_node&.title,
43 :placeholder => "Search for a page", :autocomplete => "off" %> 43 :placeholder => t("assets.form.attach_search_placeholder"), :autocomplete => "off" %>
44 <div id="asset_node_search_results" class="search_results" style="display: none"></div> 44 <div id="asset_node_search_results" class="search_results" style="display: none"></div>
45 </div> 45 </div>
46 <%= hidden_field_tag :node_id, @attach_node&.id %> 46 <%= hidden_field_tag :node_id, @attach_node&.id %>
47 <span class="field_hint">Optional — attaches this asset to that page, all pending versions included.</span> 47 <span class="field_hint"><%= t("assets.form.attach_hint") %></span>
48 </div> 48 </div>
49 49
50 <div class="layout_row_label"></div> 50 <div class="layout_row_label"></div>
51 <div class="layout_row_content"> 51 <div class="layout_row_content">
52 <label><%= check_box_tag :headline, "1" %> attach as the page's headline</label> 52 <label><%= check_box_tag :headline, "1" %> <%= t("assets.form.as_headline") %></label>
53 <span class="field_hint">Applies only if the page has no headline yet.</span> 53 <span class="field_hint"><%= t("assets.form.headline_hint") %></span>
54 </div> 54 </div>
55 55
56 <div class="layout_row_label">Actions</div> 56 <div class="layout_row_label"><%= t("admin.columns.actions") %></div>
57 <div class="layout_row_content info_group"> 57 <div class="layout_row_content info_group">
58 <div class="info_group_items"> 58 <div class="info_group_items">
59 <div class="info_item"><%= f.submit 'Update' %></div> 59 <div class="info_item"><%= f.submit t("admin.common.update") %></div>
60 <div class="info_item"><%= link_to 'Show', @asset %></div> 60 <div class="info_item"><%= link_to t("admin.common.show"), @asset %></div>
61 <div class="info_item"><%= link_to 'Back', assets_path %></div> 61 <div class="info_item"><%= link_to t("admin.common.back"), assets_path %></div>
62 </div> 62 </div>
63 </div> 63 </div>
64 </div> 64 </div>
diff --git a/app/views/assets/index.html.erb b/app/views/assets/index.html.erb
index ff1300a2..81d2686a 100644
--- a/app/views/assets/index.html.erb
+++ b/app/views/assets/index.html.erb
@@ -1,16 +1,16 @@
1<h1>Assets</h1> 1<h1><%= t(".title") %></h1>
2 2
3<%= link_to new_asset_path, class: 'action_button' do %> 3<%= link_to new_asset_path, class: 'action_button' do %>
4 <%= icon("plus", library: "tabler", "aria-hidden": true) %> Create asset 4 <%= icon("plus", library: "tabler", "aria-hidden": true) %> <%= t(".create_asset") %>
5<% end %> 5<% end %>
6 6
7<%= will_paginate @assets %> 7<%= will_paginate @assets %>
8 8
9<table class="assets_table"> 9<table class="assets_table">
10 <tr class="header"> 10 <tr class="header">
11 <th>Preview</th> 11 <th><%= t("admin.columns.preview") %></th>
12 <th>Name</th> 12 <th><%= t("admin.columns.name") %></th>
13 <th>Type</th> 13 <th><%= t("admin.columns.type") %></th>
14 <th></th> 14 <th></th>
15 <th></th> 15 <th></th>
16 <th></th> 16 <th></th>
@@ -20,10 +20,10 @@
20 <td><% if asset.has_variant?(:thumb) %><%= image_tag asset.upload.url(:thumb), style: "max-width: 100px; max-height: 100px;" %><% end %></td> 20 <td><% if asset.has_variant?(:thumb) %><%= image_tag asset.upload.url(:thumb), style: "max-width: 100px; max-height: 100px;" %><% end %></td>
21 <td><%= link_to asset.name, asset.upload.url %></td> 21 <td><%= link_to asset.name, asset.upload.url %></td>
22 <td><%= asset.upload.content_type %></td> 22 <td><%= asset.upload.content_type %></td>
23 <td><%= link_to 'Show', asset %></td> 23 <td><%= link_to t("admin.common.show"), asset %></td>
24 <td><%= link_to 'Edit', edit_asset_path(asset) %></td> 24 <td><%= link_to t("admin.common.edit"), edit_asset_path(asset) %></td>
25 <td><%= button_to asset, method: :delete, form: { data: { confirm: 'Are you sure?' }, class: 'button_to destructive' } do %> 25 <td><%= button_to asset, method: :delete, form: { data: { confirm: t("admin.common.confirm_sure") }, class: 'button_to destructive' } do %>
26 <%= icon("trash", library: "tabler", "aria-hidden": true) %> Destroy 26 <%= icon("trash", library: "tabler", "aria-hidden": true) %> <%= t("admin.common.destroy") %>
27 <% end %></td> 27 <% end %></td>
28 </tr> 28 </tr>
29<% end %> 29<% end %>
diff --git a/app/views/assets/new.html.erb b/app/views/assets/new.html.erb
index 7bb8a9ce..51e66cd2 100644
--- a/app/views/assets/new.html.erb
+++ b/app/views/assets/new.html.erb
@@ -1,5 +1,5 @@
1<div id="admin_layout"> 1<div id="admin_layout">
2 <h1>New asset</h1> 2 <h1><%= t(".title") %></h1>
3 3
4 <%= form_for(@asset, :html => { :multipart => true }) do |f| %> 4 <%= form_for(@asset, :html => { :multipart => true }) do |f| %>
5 <%= form_error_messages(f) %> 5 <%= form_error_messages(f) %>
@@ -8,51 +8,51 @@
8 <div class="layout_row_label"><%= f.label :name %></div> 8 <div class="layout_row_label"><%= f.label :name %></div>
9 <div class="layout_row_content"><%= f.text_field :name %></div> 9 <div class="layout_row_content"><%= f.text_field :name %></div>
10 10
11 <div class="layout_row_label"><%= f.label :upload, "File" %></div> 11 <div class="layout_row_label"><%= f.label :upload %></div>
12 <div class="layout_row_content"> 12 <div class="layout_row_content">
13 <div id="asset_dropzone"> 13 <div id="asset_dropzone">
14 <%= f.file_field :upload %> 14 <%= f.file_field :upload %>
15 <p class="field_hint">or drop a file here.</p> 15 <p class="field_hint"><%= t("assets.form.drop_hint") %></p>
16 </div> 16 </div>
17 </div> 17 </div>
18 18
19 <div class="layout_row_label"><%= f.label :creator %></div> 19 <div class="layout_row_label"><%= f.label :creator %></div>
20 <div class="layout_row_content"><%= f.text_field :creator %></div> 20 <div class="layout_row_content"><%= f.text_field :creator %></div>
21 21
22 <div class="layout_row_label"><%= f.label :source_url, "Source URL" %></div> 22 <div class="layout_row_label"><%= f.label :source_url %></div>
23 <div class="layout_row_content"><%= f.text_field :source_url %></div> 23 <div class="layout_row_content"><%= f.text_field :source_url %></div>
24 24
25 <div class="layout_row_label"><%= f.label :license_key, "License" %></div> 25 <div class="layout_row_label"><%= f.label :license_key %></div>
26 <div class="layout_row_content"> 26 <div class="layout_row_content">
27 <%= f.select :license_key, 27 <%= f.select :license_key,
28 options_for_select( 28 options_for_select(
29 [["none", ""]] + AssetLicense.keys.map { |key| [t("asset_licenses.#{key}"), key] }, 29 [[t("assets.form.none_option"), ""]] + AssetLicense.keys.map { |key| [t("asset_licenses.#{key}"), key] },
30 @asset.license_key 30 @asset.license_key
31 ) %> 31 ) %>
32 </div> 32 </div>
33 33
34 <div class="layout_row_label">attach to page</div> 34 <div class="layout_row_label"><%= t("assets.form.attach_to_page") %></div>
35 <div class="layout_row_content"> 35 <div class="layout_row_content">
36 <div class="restore_picker"> 36 <div class="restore_picker">
37 <%= text_field_tag :asset_node_search_term, @attach_node&.title, 37 <%= text_field_tag :asset_node_search_term, @attach_node&.title,
38 :placeholder => "Search for a page", :autocomplete => "off" %> 38 :placeholder => t("assets.form.attach_search_placeholder"), :autocomplete => "off" %>
39 <div id="asset_node_search_results" class="search_results" style="display: none"></div> 39 <div id="asset_node_search_results" class="search_results" style="display: none"></div>
40 </div> 40 </div>
41 <%= hidden_field_tag :node_id, @attach_node&.id %> 41 <%= hidden_field_tag :node_id, @attach_node&.id %>
42 <span class="field_hint">Optional — attaches this asset to that page, all pending versions included.</span> 42 <span class="field_hint"><%= t("assets.form.attach_hint") %></span>
43 </div> 43 </div>
44 44
45 <div class="layout_row_label"></div> 45 <div class="layout_row_label"></div>
46 <div class="layout_row_content"> 46 <div class="layout_row_content">
47 <label><%= check_box_tag :headline, "1" %> attach as the page's headline</label> 47 <label><%= check_box_tag :headline, "1" %> <%= t("assets.form.as_headline") %></label>
48 <span class="field_hint">Applies only if the page has no headline yet.</span> 48 <span class="field_hint"><%= t("assets.form.headline_hint") %></span>
49 </div> 49 </div>
50 50
51 <div class="layout_row_label">Actions</div> 51 <div class="layout_row_label"><%= t("admin.columns.actions") %></div>
52 <div class="layout_row_content info_group"> 52 <div class="layout_row_content info_group">
53 <div class="info_group_items"> 53 <div class="info_group_items">
54 <div class="info_item"><%= f.submit 'Create' %></div> 54 <div class="info_item"><%= f.submit f.submit t("admin.common.create") %></div>
55 <div class="info_item"><%= link_to 'Back', assets_path %></div> 55 <div class="info_item"><%= link_to link_to t("admin.common.back"), assets_path %></div>
56 </div> 56 </div>
57 </div> 57 </div>
58 </div> 58 </div>
diff --git a/app/views/assets/show.html.erb b/app/views/assets/show.html.erb
index 4ec77dff..f5a7e055 100644
--- a/app/views/assets/show.html.erb
+++ b/app/views/assets/show.html.erb
@@ -2,16 +2,16 @@
2 <h1><%= @asset.name %></h1> 2 <h1><%= @asset.name %></h1>
3 3
4 <div id="content"> 4 <div id="content">
5 <div class="layout_row_label">Actions</div> 5 <div class="layout_row_label"><%= t("admin.columns.actions") %></div>
6 <div class="layout_row_content info_group"> 6 <div class="layout_row_content info_group">
7 <div class="info_group_items"> 7 <div class="info_group_items">
8 <div class="info_item"> 8 <div class="info_item">
9 <%= link_to edit_asset_path(@asset), class: 'action_button' do %> 9 <%= link_to edit_asset_path(@asset), class: 'action_button' do %>
10 <%= icon("edit", library: "tabler", "aria-hidden": true) %> Edit 10 <%= icon("edit", library: "tabler", "aria-hidden": true) %> <%= t("admin.common.edit") %>
11 <% end %> 11 <% end %>
12 </div> 12 </div>
13 <div class="info_item"> 13 <div class="info_item">
14 <%= link_to 'Back', assets_path %> 14 <%= link_to link_to t("admin.common.back"), assets_path %>
15 </div> 15 </div>
16 <%= link_to admin_log_path(:asset_id => @asset.id), :class => "action_button" do %> 16 <%= link_to admin_log_path(:asset_id => @asset.id), :class => "action_button" do %>
17 <%= icon("history", library: "tabler", "aria-hidden": true) %> <%= t("node_actions.asset_history") %> 17 <%= icon("history", library: "tabler", "aria-hidden": true) %> <%= t("node_actions.asset_history") %>
@@ -20,11 +20,11 @@
20 </div> 20 </div>
21 21
22 <% if @asset.has_variant?(:medium) %> 22 <% if @asset.has_variant?(:medium) %>
23 <div class="layout_row_label">Thumbnail</div> 23 <div class="layout_row_label"><%= t(".thumbnail") %></div>
24 <div class="layout_row_content"><%= image_tag @asset.upload.url(:medium), style: "max-width: 300px; max-height: 300px;" %></div> 24 <div class="layout_row_content"><%= image_tag @asset.upload.url(:medium), style: "max-width: 300px; max-height: 300px;" %></div>
25 <% end %> 25 <% end %>
26 26
27 <div class="layout_row_label">Attached to</div> 27 <div class="layout_row_label"><%= t(".attached_to") %></div>
28 <div class="layout_row_content"> 28 <div class="layout_row_content">
29 <% nodes = @asset.attached_nodes %> 29 <% nodes = @asset.attached_nodes %>
30 <% if nodes.any? %> 30 <% if nodes.any? %>
@@ -36,34 +36,34 @@
36 <%= icon("star", library: "tabler", "aria-hidden": true) %> 36 <%= icon("star", library: "tabler", "aria-hidden": true) %>
37 <% end %> 37 <% end %>
38 <% unless node.head && node.head.related_assets.exists?(:asset_id => @asset.id) %> 38 <% unless node.head && node.head.related_assets.exists?(:asset_id => @asset.id) %>
39 <span class="field_hint">pending versions only</span> 39 <span class="field_hint"><%= t(".pending_only") %></span>
40 <% end %> 40 <% end %>
41 </li> 41 </li>
42 <% end %> 42 <% end %>
43 </ul> 43 </ul>
44 <% else %> 44 <% else %>
45 not attached to any page — 45 <%= t(".not_attached") %>
46 <% end %> 46 <% end %>
47 <%= link_to new_node_path(:asset_id => @asset.id), :class => "action_button" do %> 47 <%= link_to new_node_path(:asset_id => @asset.id), :class => "action_button" do %>
48 <%= icon("file-plus", library: "tabler", "aria-hidden": true) %> New page with this attachment 48 <%= icon("file-plus", library: "tabler", "aria-hidden": true) %> <%= t(".new_page_with_attachment") %>
49 <% end %> 49 <% end %>
50 </div> 50 </div>
51 51
52 <div class="layout_row_label">Public Path</div> 52 <div class="layout_row_label"><%= t(".public_path") %></div>
53 <div class="layout_row_content"> 53 <div class="layout_row_content">
54 <% public_path = @asset.upload.url.sub(/\?\d+$/, "") %> 54 <% public_path = @asset.upload.url.sub(/\?\d+$/, "") %>
55 <%= link_to public_path, public_path, target: "_blank", rel: "noopener" %> 55 <%= link_to public_path, public_path, target: "_blank", rel: "noopener" %>
56 <button type="button" class="action_button copy_button" 56 <button type="button" class="action_button copy_button"
57 data-copy-url="<%= request.base_url + public_path %>"> 57 data-copy-url="<%= request.base_url + public_path %>">
58 <%= icon("copy", library: "tabler", "aria-hidden": true) %> 58 <%= icon("copy", library: "tabler", "aria-hidden": true) %>
59 <span class="copy_button_label">Copy URL</span> 59 <span class="copy_button_label"><%= t(".copy_url") %></span>
60 </button> 60 </button>
61 </div> 61 </div>
62 62
63 <div class="layout_row_label">Creator</div> 63 <div class="layout_row_label"><%= t(".creator") %></div>
64 <div class="layout_row_content"><%= @asset.creator.presence || "—" %></div> 64 <div class="layout_row_content"><%= @asset.creator.presence || "—" %></div>
65 65
66 <div class="layout_row_label">Source</div> 66 <div class="layout_row_label"><%= t(".source") %></div>
67 <div class="layout_row_content"> 67 <div class="layout_row_content">
68 <% if @asset.source_url.present? %> 68 <% if @asset.source_url.present? %>
69 <%= link_to @asset.source_url, @asset.source_url %> 69 <%= link_to @asset.source_url, @asset.source_url %>
@@ -72,7 +72,7 @@
72 <% end %> 72 <% end %>
73 </div> 73 </div>
74 74
75 <div class="layout_row_label">License</div> 75 <div class="layout_row_label"><%= t(".license") %></div>
76 <div class="layout_row_content"> 76 <div class="layout_row_content">
77 <% if (license = AssetLicense.find(@asset.license_key)) %> 77 <% if (license = AssetLicense.find(@asset.license_key)) %>
78 <%= t("asset_licenses.#{license.key}") %> 78 <%= t("asset_licenses.#{license.key}") %>
@@ -81,10 +81,10 @@
81 <% end %> 81 <% end %>
82 </div> 82 </div>
83 83
84 <div class="layout_row_label">Content Type</div> 84 <div class="layout_row_label"><%= t(".content_type") %></div>
85 <div class="layout_row_content"><%= @asset.upload.content_type %></div> 85 <div class="layout_row_content"><%= @asset.upload.content_type %></div>
86 86
87 <div class="layout_row_label">Size</div> 87 <div class="layout_row_label"><%= t(".size") %></div>
88 <div class="layout_row_content"><%= "#{@asset.upload.size/1024} KB" %></div> 88 <div class="layout_row_content"><%= "#{@asset.upload.size/1024} KB" %></div>
89 </div> 89 </div>
90</div> 90</div>
diff --git a/app/views/events/_rrule_builder.html.erb b/app/views/events/_rrule_builder.html.erb
index 1ffec0a2..3cffb782 100644
--- a/app/views/events/_rrule_builder.html.erb
+++ b/app/views/events/_rrule_builder.html.erb
@@ -1,33 +1,33 @@
1<div id="rrule_builder"> 1<div id="rrule_builder">
2 <p> 2 <p>
3 <label><%= radio_button_tag "rrule_freq", "weekly", true %> Weekly</label> 3 <label><%= radio_button_tag "rrule_freq", "weekly", true %> <%= t(".weekly") %></label>
4 <label><%= radio_button_tag "rrule_freq", "monthly" %> Monthly</label> 4 <label><%= radio_button_tag "rrule_freq", "monthly" %> <%= t(".monthly") %></label>
5 </p> 5 </p>
6 <div id="rrule_weekly_options"> 6 <div id="rrule_weekly_options">
7 <p><label><%= check_box_tag "rrule_biweekly" %> Every 2 weeks</label></p> 7 <p><label><%= check_box_tag "rrule_biweekly" %> <%= t(".biweekly") %></label></p>
8 <p> 8 <p>
9 <% %w[MO TU WE TH FR SA SU].each do |code| %> 9 <% %w[MO TU WE TH FR SA SU].each do |code| %>
10 <label><%= check_box_tag "rrule_byday_#{code}" %> <%= RruleHumanizer::WEEKDAY_NAMES_ABBR[:de][code] %></label> 10 <label><%= check_box_tag "rrule_byday_#{code}" %> <%= RruleHumanizer::WEEKDAY_NAMES_ABBR[I18n.locale][code] %></label>
11 <% end %> 11 <% end %>
12 </p> 12 </p>
13 </div> 13 </div>
14 <div id="rrule_monthly_options" style="display: none;"> 14 <div id="rrule_monthly_options" style="display: none;">
15 <p><label><%= check_box_tag "rrule_monthly_ordinal" %> On a specific weekday each month</label></p> 15 <p><label><%= check_box_tag "rrule_monthly_ordinal" %> <%= t(".monthly_ordinal") %></label></p>
16 <p id="rrule_ordinal_fields" style="display: none;"> 16 <p id="rrule_ordinal_fields" style="display: none;">
17 <%= select_tag "rrule_ordinal", options_for_select([["1.", 1], ["2.", 2], ["3.", 3], ["4.", 4], ["letzter", -1], ["vorletzter", -2], ["Selected weeks", "custom"]]) %> 17 <%= select_tag "rrule_ordinal", options_for_select([[t(".ordinal_1"), 1], [t(".ordinal_2"), 2], [t(".ordinal_3"), 3], [t(".ordinal_4"), 4], [t(".ordinal_last"), -1], [t(".ordinal_second_last"), -2], [t(".ordinal_custom"), "custom"]]) %>
18 <%= select_tag "rrule_ordinal_day", options_for_select(%w[MO TU WE TH FR SA SU].map { |c| [RruleHumanizer::WEEKDAY_NAMES[:de][c], c] }) %> 18 <%= select_tag "rrule_ordinal_day", options_for_select(%w[MO TU WE TH FR SA SU].map { |c| [RruleHumanizer::WEEKDAY_NAMES[I18n.locale][c], c] }) %>
19 </p> 19 </p>
20 <p id="rrule_custom_ordinal_fields" style="display: none;"> 20 <p id="rrule_custom_ordinal_fields" style="display: none;">
21 Weeks of the month: 21 <%= t(".weeks_of_month") %>
22 <% (1..5).each do |ordinal| %> 22 <% (1..5).each do |ordinal| %>
23 <label><%= check_box_tag "rrule_custom_ordinal_#{ordinal}" %> <%= ordinal %>.</label> 23 <label><%= check_box_tag "rrule_custom_ordinal_#{ordinal}" %> <%= ordinal %>.</label>
24 <% end %> 24 <% end %>
25 </p> 25 </p>
26 </div> 26 </div>
27 <p> 27 <p>
28 <label><%= check_box_tag "rrule_exclude_month" %> Except in one month</label> 28 <label><%= check_box_tag "rrule_exclude_month" %> <%= t(".exclude_month") %></label>
29 <%= select_tag "rrule_excluded_month", options_for_select((1..12).map { |m| [RruleHumanizer::MONTH_NAMES[:de][m-1], m] }), style: "display: none;" %> 29 <%= select_tag "rrule_excluded_month", options_for_select((1..12).map { |m| [RruleHumanizer::MONTH_NAMES[I18n.locale][m-1], m] }), style: "display: none;" %>
30 </p> 30 </p>
31 <span class="field_hint">Builds the field below automatically. If your pattern is more complex than this covers, just edit it directly below - these controls won't touch it unless you use them.</span> 31 <span class="field_hint"><%= t(".hint") %></span>
32</div> 32</div>
33<%= f.text_field :rrule, id: "event_rrule" %> 33<%= f.text_field :rrule, id: "event_rrule" %>
diff --git a/app/views/events/edit.html.erb b/app/views/events/edit.html.erb
index 5d7f613e..f3bf5339 100644
--- a/app/views/events/edit.html.erb
+++ b/app/views/events/edit.html.erb
@@ -1,10 +1,10 @@
1<h1>Editing event</h1> 1<h1><%= t(".title") %></h1>
2 2
3<div class="node_action_bar standalone_action_bar"> 3<div class="node_action_bar standalone_action_bar">
4 <%= link_to 'Back', safe_return_to(params[:return_to] || events_path) %> 4 <%= link_to t("admin.common.back"), safe_return_to(params[:return_to] || events_path) %>
5 <%= button_to event_path(@event), method: :delete, 5 <%= button_to event_path(@event), method: :delete,
6 form: { data: { confirm: 'Delete this event?' }, class: 'button_to destructive' } do %> 6 form: { data: { confirm: t("events.confirm_delete") }, class: 'button_to destructive' } do %>
7 <%= icon("trash", library: "tabler", "aria-hidden": true) %> Destroy 7 <%= icon("trash", library: "tabler", "aria-hidden": true) %> <%= t("admin.common.destroy") %>
8 <% end %> 8 <% end %>
9</div> 9</div>
10 10
@@ -14,58 +14,58 @@
14 14
15 <div id="admin_layout"> 15 <div id="admin_layout">
16 <div id="content"> 16 <div id="content">
17 <div class="layout_row_label">Node</div> 17 <div class="layout_row_label"><%= Event.human_attribute_name(:node) %> </div>
18 <div class="layout_row_content"> 18 <div class="layout_row_content">
19 <% if @event.node %> 19 <% if @event.node %>
20 <%= link_to @event.node.title, node_path(@event.node) %> 20 <%= link_to @event.node.title, node_path(@event.node) %>
21 <details> 21 <details>
22 <summary>Change node</summary> 22 <summary><%= t(".change_node") %></summary>
23 <%= text_field_tag :event_node_search_term %> 23 <%= text_field_tag :event_node_search_term %>
24 <div id="event_search_results" class="search_results"></div> 24 <div id="event_search_results" class="search_results"></div>
25 <span class="field_hint">This will re-link the event to a different node — rarely needed.</span> 25 <span class="field_hint"><%= t(".change_node_hint") %></span>
26 </details> 26 </details>
27 <% else %> 27 <% else %>
28 <%= text_field_tag :event_node_search_term %> 28 <%= text_field_tag :event_node_search_term %>
29 <div id="event_search_results" class="search_results"></div> 29 <div id="event_search_results" class="search_results"></div>
30 <span class="field_hint">Optional — search and pick a node to associate this event with a page.</span> 30 <span class="field_hint"><%= t("events.form.node_hint") %></span>
31 <% end %> 31 <% end %>
32 <%= f.hidden_field :node_id %> 32 <%= f.hidden_field :node_id %>
33 </div> 33 </div>
34 34
35 <div class="layout_row_label">Start time</div> 35 <div class="layout_row_label"><%= Event.human_attribute_name(:start_time) %></div>
36 <div class="layout_row_content"><%= f.datetime_select :start_time %></div> 36 <div class="layout_row_content"><%= f.datetime_select :start_time %></div>
37 37
38 <div class="layout_row_label">End time</div> 38 <div class="layout_row_label"><%= Event.human_attribute_name(:end_time) %></div>
39 <div class="layout_row_content"><%= f.datetime_select :end_time %></div> 39 <div class="layout_row_content"><%= f.datetime_select :end_time %></div>
40 40
41 <div class="layout_row_label">Recurrence</div> 41 <div class="layout_row_label"><%= t("events.form.recurrence") %></div>
42 <div class="layout_row_content"> 42 <div class="layout_row_content">
43 <%= render "rrule_builder", f: f %> 43 <%= render "rrule_builder", f: f %>
44 </div> 44 </div>
45 45
46 <div class="layout_row_label">Title</div> 46 <div class="layout_row_label"><%= Event.human_attribute_name(:title) %></div>
47 <div class="layout_row_content"> 47 <div class="layout_row_content">
48 <%= f.text_field :title %> 48 <%= f.text_field :title %>
49 <span id="event_title_hint" class="field_hint">Optional — if left blank, the associated node's title is used.</span> 49 <span id="event_title_hint" class="field_hint"><%= t("events.form.title_hint") %></span>
50 </div> 50 </div>
51 51
52 <div class="layout_row_label">Tags</div> 52 <div class="layout_row_label"><%= Event.human_attribute_name(:tags) %></div>
53 <div class="layout_row_content"><%= f.text_field :tag_list %></div> 53 <div class="layout_row_content"><%= f.text_field :tag_list %></div>
54 54
55 <div class="layout_row_label">Allday</div> 55 <div class="layout_row_label"><%= Event.human_attribute_name(:allday) %></div>
56 <div class="layout_row_content"><%= f.check_box :allday %></div> 56 <div class="layout_row_content"><%= f.check_box :allday %></div>
57 57
58 <div class="layout_row_label">Url</div> 58 <div class="layout_row_label"><%= Event.human_attribute_name(:url) %></div>
59 <div class="layout_row_content"><%= f.text_field :url %></div> 59 <div class="layout_row_content"><%= f.text_field :url %></div>
60 60
61 <div class="layout_row_label">Latitude</div> 61 <div class="layout_row_label"><%= Event.human_attribute_name(:latitude) %></div>
62 <div class="layout_row_content"><%= f.text_field :latitude %></div> 62 <div class="layout_row_content"><%= f.text_field :latitude %></div>
63 63
64 <div class="layout_row_label">Longitude</div> 64 <div class="layout_row_label"><%= Event.human_attribute_name(:longitude) %></div>
65 <div class="layout_row_content"><%= f.text_field :longitude %></div> 65 <div class="layout_row_content"><%= f.text_field :longitude %></div>
66 66
67 <div class="layout_row_label"></div> 67 <div class="layout_row_label"></div>
68 <div class="layout_row_content"><%= f.submit 'Update' %></div> 68 <div class="layout_row_content"><%= f.submit t("admin.common.update") %></div>
69 </div> 69 </div>
70 </div> 70 </div>
71<% end %> 71<% end %>
diff --git a/app/views/events/index.html.erb b/app/views/events/index.html.erb
index dde897ee..138a02ec 100644
--- a/app/views/events/index.html.erb
+++ b/app/views/events/index.html.erb
@@ -1,23 +1,23 @@
1<h1>Events</h1> 1<h1><%= t(".title") %></h1>
2 2
3<div class="button_row"> 3<div class="button_row">
4 <%= link_to new_event_path, class: 'action_button' do %> 4 <%= link_to new_event_path, class: 'action_button' do %>
5 <%= icon("plus", library: "tabler", "aria-hidden": true) %> Create event 5 <%= icon("plus", library: "tabler", "aria-hidden": true) %> <%= t(".create_event") %>
6 <% end %> 6 <% end %>
7 <%= link_to 'View events without a page →', without_node_events_path %> 7 <%= link_to t(".without_page_link"), without_node_events_path %>
8</div> 8</div>
9 9
10<%= will_paginate @events %> 10<%= will_paginate @events %>
11 11
12<table class="events_table"> 12<table class="events_table">
13 <tr class="header"> 13 <tr class="header">
14 <th>Title</th> 14 <th><%= t("admin.columns.title") %></th>
15 <th>Start time</th> 15 <th><%= Event.human_attribute_name(:start_time) %></th>
16 <th>End time</th> 16 <th><%= Event.human_attribute_name(:end_time) %></th>
17 <th>Rrule</th> 17 <th><%= Event.human_attribute_name(:rrule) %></th>
18 <th>Allday</th> 18 <th><%= Event.human_attribute_name(:allday) %></th>
19 <th>Url</th> 19 <th><%= Event.human_attribute_name(:url) %></th>
20 <th>Node</th> 20 <th><%= Event.human_attribute_name(:start_node) %></th>
21 <th></th> 21 <th></th>
22 </tr> 22 </tr>
23 23
@@ -27,14 +27,14 @@
27 <td><%=h event.start_time %></td> 27 <td><%=h event.start_time %></td>
28 <td><%=h event.end_time %></td> 28 <td><%=h event.end_time %></td>
29 <td class="rrule_cell"><span class="rrule_text"><%= rrule_with_break_opportunities(event.rrule) %></span></td> 29 <td class="rrule_cell"><span class="rrule_text"><%= rrule_with_break_opportunities(event.rrule) %></span></td>
30 <td><%=h event.allday %></td> 30 <td><%=h event.allday %><%= event.allday ? t("admin.common.yes") : t("admin.common.no") %></td>
31 <td class="url_cell"> 31 <td class="url_cell">
32 <% if event.url.present? %> 32 <% if event.url.present? %>
33 <span class="truncate"><%= link_to event.url, event.url %></span> 33 <span class="truncate"><%= link_to event.url, event.url %></span>
34 <% end %> 34 <% end %>
35 </td> 35 </td>
36 <td><%= event.node ? link_to(event.node_id, node_path(event.node)) : '' %></td> 36 <td><%= event.node ? link_to(event.node_id, node_path(event.node)) : '' %></td>
37 <td><%= link_to 'edit', edit_event_path(event) %></td> 37 <td><%= link_to t(".edit_link"), edit_event_path(event) %></td>
38 </tr> 38 </tr>
39<% end %> 39<% end %>
40</table> 40</table>
diff --git a/app/views/events/new.html.erb b/app/views/events/new.html.erb
index 6472f207..3eaf7e7d 100644
--- a/app/views/events/new.html.erb
+++ b/app/views/events/new.html.erb
@@ -1,55 +1,55 @@
1<h1>New event</h1> 1<h1><%= t(".title") %></h1>
2 2
3<%= link_to 'Back', safe_return_to(params[:return_to] || events_path) %> 3<%= link_to t("admin.common.back"), safe_return_to(params[:return_to] || events_path) %>
4 4
5<%= form_for(@event) do |f| %> 5<%= form_for(@event) do |f| %>
6 <%= form_error_messages(f) %> 6 <%= form_error_messages(f) %>
7 7
8 <div id="admin_layout"> 8 <div id="admin_layout">
9 <div id="content"> 9 <div id="content">
10 <div class="layout_row_label">Node</div> 10 <div class="layout_row_label"><%= Event.human_attribute_name(:node) %></div>
11 <div class="layout_row_content"> 11 <div class="layout_row_content">
12 <%= text_field_tag :event_node_search_term %> 12 <%= text_field_tag :event_node_search_term %>
13 <div id="event_search_results" class="search_results"></div> 13 <div id="event_search_results" class="search_results"></div>
14 <%= f.hidden_field :node_id %> 14 <%= f.hidden_field :node_id %>
15 <span class="field_hint">Optional — search and pick a node to associate this event with a page.</span> 15 <span class="field_hint"><%= t("events.form.node_hint") %></span>
16 </div> 16 </div>
17 17
18 <div class="layout_row_label">Start time</div> 18 <div class="layout_row_label"><%= Event.human_attribute_name(:start_time) %></div>
19 <div class="layout_row_content"><%= f.datetime_select :start_time %></div> 19 <div class="layout_row_content"><%= f.datetime_select :start_time %></div>
20 20
21 <div class="layout_row_label">End time</div> 21 <div class="layout_row_label"><%= Event.human_attribute_name(:end_time) %></div>
22 <div class="layout_row_content"><%= f.datetime_select :end_time %></div> 22 <div class="layout_row_content"><%= f.datetime_select :end_time %></div>
23 23
24 <div class="layout_row_label">Recurrence</div> 24 <div class="layout_row_label"><%= t("events.form.recurrence") %></div>
25 <div class="layout_row_content"><%= render "rrule_builder", f: f %></div> 25 <div class="layout_row_content"><%= render "rrule_builder", f: f %></div>
26 26
27 <div class="layout_row_label">Title</div> 27 <div class="layout_row_label"><%= Event.human_attribute_name(:title) %></div>
28 <div class="layout_row_content"> 28 <div class="layout_row_content">
29 <%= f.text_field :title %> 29 <%= f.text_field :title %>
30 <span id="event_title_hint" class="field_hint">Optional — if left blank, the associated node's title is used.</span> 30 <span id="event_title_hint" class="field_hint"><%= t("events.form.title_hint") %></span>
31 </div> 31 </div>
32 32
33 <div class="layout_row_label">Tags</div> 33 <div class="layout_row_label"><%= Event.human_attribute_name(:tag_list) %></div>
34 <div class="layout_row_content"><%= f.text_field :tag_list %></div> 34 <div class="layout_row_content"><%= f.text_field :tag_list %></div>
35 35
36 <div class="layout_row_label">Allday</div> 36 <div class="layout_row_label"><%= Event.human_attribute_name(:allday) %></div>
37 <div class="layout_row_content"><%= f.check_box :allday %></div> 37 <div class="layout_row_content"><%= f.check_box :allday %></div>
38 38
39 <div class="layout_row_label">Url</div> 39 <div class="layout_row_label"><%= Event.human_attribute_name(:url) %></div>
40 <div class="layout_row_content"><%= f.text_field :url %></div> 40 <div class="layout_row_content"><%= f.text_field :url %></div>
41 41
42 <div class="layout_row_label">Latitude</div> 42 <div class="layout_row_label"><%= Event.human_attribute_name(:latitude) %></div>
43 <div class="layout_row_content"><%= f.text_field :latitude %></div> 43 <div class="layout_row_content"><%= f.text_field :latitude %></div>
44 44
45 <div class="layout_row_label">Longitude</div> 45 <div class="layout_row_label"><%= Event.human_attribute_name(:longitude) %></div>
46 <div class="layout_row_content"><%= f.text_field :longitude %></div> 46 <div class="layout_row_content"><%= f.text_field :longitude %></div>
47 47
48 <div class="layout_row_label"></div> 48 <div class="layout_row_label"></div>
49 <div class="layout_row_content"><%= hidden_field_tag :return_to, params[:return_to] %></div> 49 <div class="layout_row_content"><%= hidden_field_tag :return_to, params[:return_to] %></div>
50 50
51 <div class="layout_row_label"></div> 51 <div class="layout_row_label"></div>
52 <div class="layout_row_content"><%= f.submit 'Create' %></div> 52 <div class="layout_row_content"><%= f.submit t("admin.common.create") %></div>
53 </div> 53 </div>
54 </div> 54 </div>
55<% end %> 55<% end %>
diff --git a/app/views/events/show.html.erb b/app/views/events/show.html.erb
index 0bf14e8b..98e972c6 100644
--- a/app/views/events/show.html.erb
+++ b/app/views/events/show.html.erb
@@ -1,55 +1,55 @@
1<div id="admin_layout" class="show_node"> 1<div id="admin_layout" class="show_node">
2 <h1><%= @event.node ? "Event for node #{@event.node.unique_name}" : "Event" %></h1> 2 <h1><%= @event.node ? t(".title_for_node", :path => @event.node.unique_name) : t(".title") %></h1>
3 3
4 <div id="content"> 4 <div id="content">
5 <div class="layout_row_label">Actions</div> 5 <div class="layout_row_label"><%= t("admin.columns.actions") %></div>
6 <div class="layout_row_content info_group"> 6 <div class="layout_row_content info_group">
7 <div class="info_group_items"> 7 <div class="info_group_items">
8 <% if @event.node %> 8 <% if @event.node %>
9 <div class="info_item"> 9 <div class="info_item">
10 <%= link_to 'Node', node_path(@event.node) %> 10 <%= link_to t(".node_link"), node_path(@event.node) %>
11 </div> 11 </div>
12 <% end %> 12 <% end %>
13 <div class="info_item"> 13 <div class="info_item">
14 <%= link_to edit_event_path(@event, return_to: request.path), class: 'action_button' do %> 14 <%= link_to edit_event_path(@event, return_to: request.path), class: 'action_button' do %>
15 <%= icon("edit", library: "tabler", "aria-hidden": true) %> Edit 15 <%= icon("edit", library: "tabler", "aria-hidden": true) %> <%= t("admin.common.edit") %>
16 <% end %> 16 <% end %>
17 </div> 17 </div>
18 <div class="info_item"> 18 <div class="info_item">
19 <%= button_to event_path(@event), method: :delete, form: { data: { confirm: 'Delete this event?' }, class: 'button_to destructive' } do %> 19 <%= button_to event_path(@event), method: :delete, form: { data: { confirm: t("events.confirm_delete") }, class: 'button_to destructive' } do %>
20 <%= icon("trash", library: "tabler", "aria-hidden": true) %> Destroy 20 <%= icon("trash", library: "tabler", "aria-hidden": true) %> <%= t("admin.common.destroy") %>
21 <% end %> 21 <% end %>
22 </div> 22 </div>
23 </div> 23 </div>
24 </div> 24 </div>
25 25
26 <div class="layout_row_label">Start time</div> 26 <div class="layout_row_label"><%= Event.human_attribute_name(:start_time) %></div>
27 <div class="layout_row_content"><%=h @event.start_time %></div> 27 <div class="layout_row_content"><%=h @event.start_time %></div>
28 28
29 <div class="layout_row_label">End time</div> 29 <div class="layout_row_label"><%= Event.human_attribute_name(:end_time) %></div>
30 <div class="layout_row_content"><%=h @event.end_time %></div> 30 <div class="layout_row_content"><%=h @event.end_time %></div>
31 31
32 <div class="layout_row_label">Rrule</div> 32 <div class="layout_row_label"><%= Event.human_attribute_name(:rrule) %></div>
33 <div class="layout_row_content"><%=h @event.rrule %></div> 33 <div class="layout_row_content"><%=h @event.rrule %></div>
34 34
35 <% if (human = @event.humanize_rrule(I18n.locale)) %> 35 <% if (human = @event.humanize_rrule(I18n.locale)) %>
36 <div class="layout_row_label">Recurrence</div> 36 <div class="layout_row_label"><%= t(".recurrence") %></div>
37 <div class="layout_row_content"><em><%= human %></em></div> 37 <div class="layout_row_content"><em><%= human %></em></div>
38 <% end %> 38 <% end %>
39 39
40 <div class="layout_row_label">Tags</div> 40 <div class="layout_row_label"><%= Event.human_attribute_name(:tag_list) %></div>
41 <div class="layout_row_content"><%=h @event.tag_list %></div> 41 <div class="layout_row_content"><%=h @event.tag_list %></div>
42 42
43 <div class="layout_row_label">Allday</div> 43 <div class="layout_row_label"><%= Event.human_attribute_name(:allday) %></div>
44 <div class="layout_row_content"><%=h @event.allday %></div> 44 <div class="layout_row_content"><%= @event.allday ? t("admin.common.yes") : t("admin.common.no") %></div>
45 45
46 <div class="layout_row_label">Url</div> 46 <div class="layout_row_label"><%= Event.human_attribute_name(:url) %></div>
47 <div class="layout_row_content"><%=h @event.url %></div> 47 <div class="layout_row_content"><%=h @event.url %></div>
48 48
49 <div class="layout_row_label">Latitude</div> 49 <div class="layout_row_label"><%= Event.human_attribute_name(:latitude) %></div>
50 <div class="layout_row_content"><%=h @event.latitude %></div> 50 <div class="layout_row_content"><%=h @event.latitude %></div>
51 51
52 <div class="layout_row_label">Longitude</div> 52 <div class="layout_row_label"><%= Event.human_attribute_name(:longitude) %></div>
53 <div class="layout_row_content"><%=h @event.longitude %></div> 53 <div class="layout_row_content"><%=h @event.longitude %></div>
54 </div> 54 </div>
55</div> 55</div>
diff --git a/app/views/events/without_node.html.erb b/app/views/events/without_node.html.erb
index bb27173b..c610b560 100644
--- a/app/views/events/without_node.html.erb
+++ b/app/views/events/without_node.html.erb
@@ -1,19 +1,19 @@
1<h1>Events without a node</h1> 1<h1><%= t(".title") %></h1>
2 2
3<%= link_to '← All events', events_path %> 3<%= link_to t(".all_events_link"), events_path %>
4<%= link_to new_event_path, class: 'action_button' do %> 4<%= link_to new_event_path, class: 'action_button' do %>
5 <%= icon("plus", library: "tabler", "aria-hidden": true) %> Create event 5 <%= icon("plus", library: "tabler", "aria-hidden": true) %> <%= t("events.index.create_event") %>
6<% end %> 6<% end %>
7 7
8<%= will_paginate @events %> 8<%= will_paginate @events %>
9 9
10<table class="events_table"> 10<table class="events_table">
11 <tr class="header"> 11 <tr class="header">
12 <th>Title</th> 12 <th><%= t("admin.columns.title") %></th>
13 <th>Start time</th> 13 <th><%= Event.human_attribute_name(:start_time) %></th>
14 <th>End time</th> 14 <th><%= Event.human_attribute_name(:end_time) %></th>
15 <th>Allday</th> 15 <th><%= Event.human_attribute_name(:allday) %></th>
16 <th>Url</th> 16 <th><%= Event.human_attribute_name(:url) %></th>
17 <th></th> 17 <th></th>
18 </tr> 18 </tr>
19 19
@@ -22,9 +22,9 @@
22 <td><%= link_to event.display_title, event %></td> 22 <td><%= link_to event.display_title, event %></td>
23 <td><%=h event.start_time %></td> 23 <td><%=h event.start_time %></td>
24 <td><%=h event.end_time %></td> 24 <td><%=h event.end_time %></td>
25 <td><%=h event.allday %></td> 25 <td><%=h event.allday %><%= event.allday ? t("admin.common.yes") : t("admin.common.no") %></td>
26 <td><%=h event.url %></td> 26 <td><%=h event.url %></td>
27 <td><%= link_to 'edit', edit_event_path(event) %></td> 27 <td><%= link_to t("events.index.edit_link"), edit_event_path(event) %></td>
28 </tr> 28 </tr>
29<% end %> 29<% end %>
30</table> 30</table>
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 3e0dfdd7..e2b393ee 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -84,6 +84,26 @@ de:
84 container_aria_label: "Seitennavigation" 84 container_aria_label: "Seitennavigation"
85 page_aria_label: "Seite %{page}" 85 page_aria_label: "Seite %{page}"
86 86
87 activerecord:
88 attributes:
89 asset:
90 name: "Name"
91 upload: "Datei"
92 creator: "Urheber"
93 source_url: "Quell-URL"
94 license_key: "Lizenz"
95 event:
96 title: "Titel"
97 start_time: "Beginn"
98 end_time: "Ende"
99 rrule: "RRULE"
100 allday: "Ganztägig"
101 url: "URL"
102 node: "Node"
103 tag_list: "Tags"
104 latitude: "Breitengrad"
105 longitude: "Längengrad"
106
87 tags: 107 tags:
88 index: 108 index:
89 title: "Tags" 109 title: "Tags"
@@ -209,6 +229,10 @@ de:
209 destroy: "Löschen" 229 destroy: "Löschen"
210 search: "Suchen" 230 search: "Suchen"
211 reset: "Zurücksetzen" 231 reset: "Zurücksetzen"
232 show: "Anzeigen"
233 back: "Zurück"
234 update: "Aktualisieren"
235 confirm_sure: "Wirklich?"
212 confirm_irreversible: "Das kann nicht rückgängig gemacht werden. Fortfahren?" 236 confirm_irreversible: "Das kann nicht rückgängig gemacht werden. Fortfahren?"
213 toggle_preview: "Live-Vorschau umschalten" 237 toggle_preview: "Live-Vorschau umschalten"
214 force_render: "Vorschau neu rendern" 238 force_render: "Vorschau neu rendern"
@@ -221,6 +245,9 @@ de:
221 locked_by: "Gesperrt von" 245 locked_by: "Gesperrt von"
222 rev: "Rev." 246 rev: "Rev."
223 path: "Pfad" 247 path: "Pfad"
248 preview: "Vorschau"
249 name: "Name"
250 type: "Typ"
224 nodes: 251 nodes:
225 index: 252 index:
226 title: "Nodes" 253 title: "Nodes"
@@ -375,6 +402,47 @@ de:
375 delete_permanently: "Endgültig löschen" 402 delete_permanently: "Endgültig löschen"
376 restore_hint: "Zum Wiederherstellen eine Seite öffnen und in ihrem Papierkorb-Abschnitt einen neuen Eltern-Node wählen." 403 restore_hint: "Zum Wiederherstellen eine Seite öffnen und in ihrem Papierkorb-Abschnitt einen neuen Eltern-Node wählen."
377 404
405 events:
406 confirm_delete: "Diesen Termin löschen?"
407 index:
408 title: "Termine"
409 create_event: "Termin anlegen"
410 without_page_link: "Termine ohne Seite anzeigen →"
411 edit_link: "bearbeiten"
412 show:
413 title: "Termin"
414 title_for_node: "Termin für Node %{path}"
415 node_link: "Node"
416 recurrence: "Wiederholung"
417 edit:
418 title: "Termin bearbeiten"
419 change_node: "Node ändern"
420 change_node_hint: "Verknüpft den Termin mit einem anderen Node — selten nötig."
421 without_node:
422 title: "Termine ohne Node"
423 all_events_link: "← Alle Termine"
424 form:
425 node_hint: "Optional — Node suchen und auswählen, um diesen Termin mit einer Seite zu verknüpfen."
426 recurrence: "Wiederholung"
427 title_hint: "Optional — bleibt das Feld leer, wird der Titel des verknüpften Nodes verwendet."
428 rrule_builder:
429 weekly: "Wöchentlich"
430 monthly: "Monatlich"
431 biweekly: "Alle 2 Wochen"
432 monthly_ordinal: "An einem bestimmten Wochentag im Monat"
433 ordinal_1: "1."
434 ordinal_2: "2."
435 ordinal_3: "3."
436 ordinal_4: "4."
437 ordinal_last: "letzter"
438 ordinal_second_last: "vorletzter"
439 ordinal_custom: "Ausgewählte Wochen"
440 weeks_of_month: "Wochen im Monat:"
441 exclude_month: "Außer in einem Monat"
442 hint: "Füllt das Feld darunter automatisch. Für kompliziertere Muster das Feld einfach direkt bearbeiten — diese Bedienelemente ändern es nur, wenn sie benutzt werden."
443 new:
444 title: "Neuer Termin"
445
378 flash: 446 flash:
379 common: 447 common:
380 logged_in: "Erfolgreich angemeldet" 448 logged_in: "Erfolgreich angemeldet"
@@ -436,3 +504,34 @@ de:
436 none_to_remove: "Es existiert keine %{lang}-Übersetzung zum Entfernen." 504 none_to_remove: "Es existiert keine %{lang}-Übersetzung zum Entfernen."
437 last_translation: "Die einzige verbliebene Übersetzung kann nicht entfernt werden." 505 last_translation: "Die einzige verbliebene Übersetzung kann nicht entfernt werden."
438 removed: "%{lang}-Übersetzung aus dem Entwurf entfernt. Veröffentlichen, um das dauerhaft zu machen." 506 removed: "%{lang}-Übersetzung aus dem Entwurf entfernt. Veröffentlichen, um das dauerhaft zu machen."
507 assets:
508 index:
509 title: "Assets"
510 create_asset: "Asset anlegen"
511 show:
512 thumbnail: "Vorschaubild"
513 attached_to: "Angehängt an"
514 pending_only: "nur in ausstehenden Versionen"
515 not_attached: "— an keine Seite angehängt —"
516 new_page_with_attachment: "Neue Seite mit diesem Anhang"
517 public_path: "Öffentlicher Pfad"
518 copy_url: "URL kopieren"
519 creator: "Urheber"
520 source: "Quelle"
521 license: "Lizenz"
522 content_type: "Content-Type"
523 size: "Größe"
524 new:
525 title: "Neues Asset"
526 edit:
527 title: "Asset bearbeiten"
528 current_file: "Aktuelle Datei"
529 replace_file: "Datei ersetzen"
530 form:
531 drop_hint: "…oder Datei hier ablegen."
532 none_option: "— keine —"
533 attach_to_page: "an Seite anhängen"
534 attach_search_placeholder: "Seite suchen…"
535 attach_hint: "Optional — hängt dieses Asset an die Seite an, alle ausstehenden Versionen eingeschlossen."
536 as_headline: "als Aufmacher der Seite anhängen"
537 headline_hint: "Gilt nur, wenn die Seite noch keinen Aufmacher hat."
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 616a1d8f..83ceadda 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -36,6 +36,26 @@ en:
36 container_aria_label: "Pagination" 36 container_aria_label: "Pagination"
37 page_aria_label: "Page %{page}" 37 page_aria_label: "Page %{page}"
38 38
39 activerecord:
40 attributes:
41 asset:
42 name: "Name"
43 upload: "File"
44 creator: "Creator"
45 source_url: "Source URL"
46 license_key: "License"
47 event:
48 title: "Title"
49 start_time: "Start time"
50 end_time: "End time"
51 rrule: "Rrule"
52 allday: "Allday"
53 url: "Url"
54 node: "Node"
55 tag_list: "Tags"
56 latitude: "Latitude"
57 longitude: "Longitude"
58
39 tags: 59 tags:
40 index: 60 index:
41 title: "Tags" 61 title: "Tags"
@@ -161,6 +181,10 @@ en:
161 destroy: "Destroy" 181 destroy: "Destroy"
162 search: "Search" 182 search: "Search"
163 reset: "Reset" 183 reset: "Reset"
184 show: "Show"
185 back: "Back"
186 update: "Update"
187 confirm_sure: "Are you sure?"
164 confirm_irreversible: "This cannot be undone. Continue?" 188 confirm_irreversible: "This cannot be undone. Continue?"
165 toggle_preview: "Toggle live preview" 189 toggle_preview: "Toggle live preview"
166 force_render: "Force preview render" 190 force_render: "Force preview render"
@@ -173,6 +197,9 @@ en:
173 locked_by: "Locked by" 197 locked_by: "Locked by"
174 rev: "Rev." 198 rev: "Rev."
175 path: "Path" 199 path: "Path"
200 preview: "Preview"
201 name: "Name"
202 type: "Type"
176 nodes: 203 nodes:
177 index: 204 index:
178 title: "Nodes" 205 title: "Nodes"
@@ -327,6 +354,47 @@ en:
327 delete_permanently: "Delete permanently" 354 delete_permanently: "Delete permanently"
328 restore_hint: "To restore a page, open it and pick a new parent in its Trash section." 355 restore_hint: "To restore a page, open it and pick a new parent in its Trash section."
329 356
357 events:
358 confirm_delete: "Delete this event?"
359 index:
360 title: "Events"
361 create_event: "Create event"
362 without_page_link: "View events without a page →"
363 edit_link: "edit"
364 edit:
365 title: "Editing event"
366 change_node: "Change node"
367 change_node_hint: "This will re-link the event to a different node — rarely needed."
368 without_node:
369 title: "Events without a node"
370 all_events_link: "← All events"
371 show:
372 title: "Event"
373 title_for_node: "Event for node %{path}"
374 node_link: "Node"
375 recurrence: "Recurrence"
376 form:
377 node_hint: "Optional — search and pick a node to associate this event with a page."
378 recurrence: "Recurrence"
379 title_hint: "Optional — if left blank, the associated node's title is used."
380 rrule_builder:
381 weekly: "Weekly"
382 monthly: "Monthly"
383 biweekly: "Every 2 weeks"
384 monthly_ordinal: "On a specific weekday each month"
385 ordinal_1: "1st"
386 ordinal_2: "2nd"
387 ordinal_3: "3rd"
388 ordinal_4: "4th"
389 ordinal_last: "last"
390 ordinal_second_last: "second to last"
391 ordinal_custom: "Selected weeks"
392 weeks_of_month: "Weeks of the month:"
393 exclude_month: "Except in one month"
394 hint: "Builds the field below automatically. If your pattern is more complex than this covers, just edit it directly below - these controls won't touch it unless you use them."
395 new:
396 title: "New event"
397
330 flash: 398 flash:
331 common: 399 common:
332 logged_in: "Logged in successfully" 400 logged_in: "Logged in successfully"
@@ -388,3 +456,34 @@ en:
388 none_to_remove: "No %{lang} translation exists to remove." 456 none_to_remove: "No %{lang} translation exists to remove."
389 last_translation: "Can't remove the only remaining translation." 457 last_translation: "Can't remove the only remaining translation."
390 removed: "%{lang} translation removed from the draft. Publish to make this permanent." 458 removed: "%{lang} translation removed from the draft. Publish to make this permanent."
459 assets:
460 index:
461 title: "Assets"
462 create_asset: "Create asset"
463 show:
464 thumbnail: "Thumbnail"
465 attached_to: "Attached to"
466 pending_only: "pending versions only"
467 not_attached: "— not attached to any page —"
468 new_page_with_attachment: "New page with this attachment"
469 public_path: "Public Path"
470 copy_url: "Copy URL"
471 creator: "Creator"
472 source: "Source"
473 license: "License"
474 content_type: "Content Type"
475 size: "Size"
476 new:
477 title: "New asset"
478 edit:
479 title: "Editing asset"
480 current_file: "Current File"
481 replace_file: "Replace file"
482 form:
483 drop_hint: "…or drop a file here."
484 none_option: "— none —"
485 attach_to_page: "attach to page"
486 attach_search_placeholder: "Search for a page…"
487 attach_hint: "Optional — attaches this asset to that page, all pending versions included."
488 as_headline: "attach as the page's headline"
489 headline_hint: "Applies only if the page has no headline yet."