summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-07-25 15:39:17 +0200
committererdgeist <erdgeist@erdgeist.org>2026-07-25 15:39:17 +0200
commitb7dee77cd1dd6f70e3bfa55df8b61681e9db321e (patch)
treec621c76a1e4bc96f16473d26ca239fbf83a0caff
parent78cd4957c4ca5bd05d93af6061487db095d04ee5 (diff)
Extract admin strings to i18n: dashboard, layout chrome, and the JS bridge
-rw-r--r--app/views/admin/_drafts.html.erb16
-rw-r--r--app/views/admin/_menu.html.erb6
-rw-r--r--app/views/admin/conventions.html.erb4
-rw-r--r--app/views/admin/index.html.erb36
-rw-r--r--app/views/admin/search_results.html.erb2
-rw-r--r--app/views/layouts/_flash.html.erb17
-rw-r--r--app/views/layouts/admin.html.erb9
-rw-r--r--config/locales/de.yml111
-rw-r--r--config/locales/en.yml109
-rw-r--r--public/javascripts/admin_interface.js10
10 files changed, 208 insertions, 112 deletions
diff --git a/app/views/admin/_drafts.html.erb b/app/views/admin/_drafts.html.erb
index 4ef568f8..bfdc00a4 100644
--- a/app/views/admin/_drafts.html.erb
+++ b/app/views/admin/_drafts.html.erb
@@ -1,11 +1,11 @@
1<h2>Drafts (<%= @drafts.size %>)</h2> 1<h2><%= t(".title", :size => @drafts.size) %></h2>
2<div id="draft_list"> 2<div id="draft_list">
3 <table> 3 <table>
4 <tr class="header"> 4 <tr class="header">
5 <th>ID</th> 5 <th><%= t("admin.columns.id") %></th>
6 <th>Title</th> 6 <th><%= t("admin.columns.title") %></th>
7 <th>Path</th> 7 <th><%= t("admin.columns.path") %></th>
8 <th>author</th> 8 <th><%= t("admin.columns.author") %></th>
9 <th></th> 9 <th></th>
10 </tr> 10 </tr>
11 <% @drafts.each do |draft| %> 11 <% @drafts.each do |draft| %>
@@ -15,9 +15,9 @@
15 <td><%= draft.node.unique_name %></td> 15 <td><%= draft.node.unique_name %></td>
16 <td><%= draft.user.login rescue "" %></td> 16 <td><%= draft.user.login rescue "" %></td>
17 <td class="actions"> 17 <td class="actions">
18 <%= link_to 'Show', node_path(draft.node) %> 18 <%= link_to t("admin.common.show"), node_path(draft.node) %>
19 <%= link_to "Revisions", revision_path(draft.node.id) %> 19 <%= link_to t(".revisions"), revision_path(draft.node.id) %>
20 <%= button_to "Publish", publish_node_path(draft.node), method: :put, form: { data: { confirm: "Do you really want to publish?" }, class: 'button_to state_changing' } %> 20 <%= button_to t("nodes.show.publish"), publish_node_path(draft.node), method: :put, form: { data: { confirm: t("nodes.show.confirm_publish") }, class: 'button_to state_changing' } %>
21 </td> 21 </td>
22 </tr> 22 </tr>
23 <% end %> 23 <% end %>
diff --git a/app/views/admin/_menu.html.erb b/app/views/admin/_menu.html.erb
index 7270df49..b0e310e9 100644
--- a/app/views/admin/_menu.html.erb
+++ b/app/views/admin/_menu.html.erb
@@ -1,5 +1,5 @@
1<%= link_to icon("home", library: "tabler", "aria-hidden": true), admin_path, "aria-label": "Dashboard", title: "Dashboard" %> 1<%= link_to icon("home", library: "tabler", "aria-hidden": true), admin_path, "aria-label": t(".dashboard"), title: t(".dashboard") %>
2<a href="#" onclick="admin_search.display_toggle(); return false;" aria-label="Search" title="Search"><%= icon("search", library: "tabler", "aria-hidden": true) %></a> 2<a href="#" onclick="admin_search.display_toggle(); return false;" aria-label="<%= t(".search") %>" title="<%= t(".search") %>"><%= icon("search", library: "tabler", "aria-hidden": true) %></a>
3<%= button_to logout_path, method: :delete, aria: { label: "Log out" }, title: "Log out" do %> 3<%= button_to logout_path, method: :delete, aria: { label: t(".log_out") }, title: t(".log_out") do %>
4 <%= icon("logout", library: "tabler", "aria-hidden": true) %> 4 <%= icon("logout", library: "tabler", "aria-hidden": true) %>
5<% end %> 5<% end %>
diff --git a/app/views/admin/conventions.html.erb b/app/views/admin/conventions.html.erb
index 72f6214a..434c2e9c 100644
--- a/app/views/admin/conventions.html.erb
+++ b/app/views/admin/conventions.html.erb
@@ -1,7 +1,7 @@
1<h1>Node creation conventions</h1> 1<h1><%= t(".title") %></h1>
2 2
3<table id="conventions"> 3<table id="conventions">
4 <tr><th>Kind</th><th>What happens</th></tr> 4 <tr><th><%= t(".kind") %></th><th><%= t(".what_happens") %></th></tr>
5 <% @node_kinds.each do |kind, config| %> 5 <% @node_kinds.each do |kind, config| %>
6 <tr> 6 <tr>
7 <td><%= kind %></td> 7 <td><%= kind %></td>
diff --git a/app/views/admin/index.html.erb b/app/views/admin/index.html.erb
index 4d67dd77..25bdbdc6 100644
--- a/app/views/admin/index.html.erb
+++ b/app/views/admin/index.html.erb
@@ -1,29 +1,29 @@
1<h1>cccms dashboard</h1> 1<h1><%= t(".title") %></h1>
2<div id="dashboard_search"> 2<div id="dashboard_search">
3 <%= form_tag admin_search_path, method: :get do %> 3 <%= form_tag admin_search_path, method: :get do %>
4 <%= text_field_tag :search_term, nil, id: "dashboard_search_term", placeholder: "Search nodes and tags…", autocomplete: "off" %> 4 <%= text_field_tag :search_term, nil, id: "dashboard_search_term", placeholder: t(".search_placeholder"), autocomplete: "off" %>
5 <% end %> 5 <% end %>
6 <div id="dashboard_search_results" class="search_results"></div> 6 <div id="dashboard_search_results" class="search_results"></div>
7</div> 7</div>
8 8
9<div id="dashboard_signposts" class="button_row"> 9<div id="dashboard_signposts" class="button_row">
10 <%= link_to new_node_path, class: "action_button" do %> 10 <%= link_to new_node_path, class: "action_button" do %>
11 <%= icon("plus", library: "tabler", "aria-hidden": true) %> Create post 11 <%= icon("plus", library: "tabler", "aria-hidden": true) %> <%= t(".create_post") %>
12 <% end %> 12 <% end %>
13 <%= link_to chapters_nodes_path, class: "action_button" do %> 13 <%= link_to chapters_nodes_path, class: "action_button" do %>
14 <%= icon("map-pin", library: "tabler", "aria-hidden": true) %> Find a chapter 14 <%= icon("map-pin", library: "tabler", "aria-hidden": true) %> <%= t(".find_chapter") %>
15 <% end %> 15 <% end %>
16 <%= link_to new_asset_path, class: "action_button" do %> 16 <%= link_to new_asset_path, class: "action_button" do %>
17 <%= icon("upload", library: "tabler", "aria-hidden": true) %> Upload asset 17 <%= icon("upload", library: "tabler", "aria-hidden": true) %> <%= t(".upload_asset") %>
18 <% end %> 18 <% end %>
19 <%= link_to sitemap_nodes_path, class: "action_button" do %> 19 <%= link_to sitemap_nodes_path, class: "action_button" do %>
20 <%= icon("list-tree", library: "tabler", "aria-hidden": true) %> Add a page in the page tree 20 <%= icon("list-tree", library: "tabler", "aria-hidden": true) %> <%= t(".add_in_tree") %>
21 <% end %> 21 <% end %>
22</div> 22</div>
23 23
24<div id="dashboard_widgets"> 24<div id="dashboard_widgets">
25 <div class="dashboard_widget"> 25 <div class="dashboard_widget">
26 <h3>Drafts and autosaves</h3> 26 <h3><%= t(".drafts_widget") %></h3>
27 <ul> 27 <ul>
28 <% @drafts.each do |node| %> 28 <% @drafts.each do |node| %>
29 <li> 29 <li>
@@ -37,43 +37,43 @@
37 </li> 37 </li>
38 <% end %> 38 <% end %>
39 </ul> 39 </ul>
40 <%= link_to "See all drafts", drafts_nodes_path %> 40 <%= link_to t(".see_all_drafts"), drafts_nodes_path %>
41 </div> 41 </div>
42 42
43 <div class="dashboard_widget"> 43 <div class="dashboard_widget">
44 <h3>Recent changes</h3> 44 <h3><%= t("node_actions.heading") %></h3>
45 <table id="node_action_list"> 45 <table id="node_action_list">
46 <%= render partial: "node_actions/action_row", collection: @actions, as: :action %> 46 <%= render partial: "node_actions/action_row", collection: @actions, as: :action %>
47 </table> 47 </table>
48 <%= link_to "See all recent changes", admin_log_path %> 48 <%= link_to t(".see_all_changes"), admin_log_path %>
49 </div> 49 </div>
50 50
51</div> 51</div>
52 52
53<div id="dashboard_housekeeping"> 53<div id="dashboard_housekeeping">
54 <h3>Housekeeping</h3> 54 <h3><%= t(".housekeeping") %></h3>
55 <div class="button_row"> 55 <div class="button_row">
56 <%= link_to edit_user_path(current_user), class: "action_button" do %> 56 <%= link_to edit_user_path(current_user), class: "action_button" do %>
57 <%= icon("user-cog", library: "tabler", "aria-hidden": true) %> My account 57 <%= icon("user-cog", library: "tabler", "aria-hidden": true) %> <%= t(".my_account") %>
58 <% end %> 58 <% end %>
59 <%= link_to nodes_path, class: "action_button" do %> 59 <%= link_to nodes_path, class: "action_button" do %>
60 <%= icon("list", library: "tabler", "aria-hidden": true) %> Nodes 60 <%= icon("list", library: "tabler", "aria-hidden": true) %> <%= t("nodes.index.title") %>
61 <% end %> 61 <% end %>
62 <%= link_to events_path, class: "action_button" do %> 62 <%= link_to events_path, class: "action_button" do %>
63 <%= icon("calendar", library: "tabler", "aria-hidden": true) %> Events 63 <%= icon("calendar", library: "tabler", "aria-hidden": true) %> <%= t("events.index.title") %>
64 <% end %> 64 <% end %>
65 <%= link_to assets_path, class: "action_button" do %> 65 <%= link_to assets_path, class: "action_button" do %>
66 <%= icon("folder", library: "tabler", "aria-hidden": true) %> Assets 66 <%= icon("folder", library: "tabler", "aria-hidden": true) %> <%= t("assets.index.title") %>
67 <% end %> 67 <% end %>
68 <%= link_to users_path, class: "action_button" do %> 68 <%= link_to users_path, class: "action_button" do %>
69 <%= icon("users", library: "tabler", "aria-hidden": true) %> Users 69 <%= icon("users", library: "tabler", "aria-hidden": true) %> <%= t("users.index.users") %>
70 <% end %> 70 <% end %>
71 <%= link_to menu_items_path, class: "action_button" do %> 71 <%= link_to menu_items_path, class: "action_button" do %>
72 <%= icon("menu-2", library: "tabler", "aria-hidden": true) %> Navigation 72 <%= icon("menu-2", library: "tabler", "aria-hidden": true) %> <%= t(".navigation") %>
73 <% end %> 73 <% end %>
74 <% trash_count = Node.trash.children.count %> 74 <% trash_count = Node.trash.children.count %>
75 <%= link_to trashed_nodes_path, class: "action_button" do %> 75 <%= link_to trashed_nodes_path, class: "action_button" do %>
76 <%= icon("trash", library: "tabler", "aria-hidden": true) %> Trash<%= " (#{trash_count})" if trash_count > 0 %> 76 <%= icon("trash", library: "tabler", "aria-hidden": true) %> <%= t("nodes.trashed.title") %><%= " (#{trash_count})" if trash_count > 0 %>
77 <% end %> 77 <% end %>
78 </div> 78 </div>
79</div> 79</div>
diff --git a/app/views/admin/search_results.html.erb b/app/views/admin/search_results.html.erb
index a7571977..e3802a03 100644
--- a/app/views/admin/search_results.html.erb
+++ b/app/views/admin/search_results.html.erb
@@ -1,4 +1,4 @@
1<h1>Search Results</h1> 1<h1><%= t(".title") %></h1>
2 2
3<ul class="search_results_list"> 3<ul class="search_results_list">
4 <% @results.each do |result| %> 4 <% @results.each do |result| %>
diff --git a/app/views/layouts/_flash.html.erb b/app/views/layouts/_flash.html.erb
index a67fc866..b72c377f 100644
--- a/app/views/layouts/_flash.html.erb
+++ b/app/views/layouts/_flash.html.erb
@@ -2,20 +2,21 @@
2<div id="flash"> 2<div id="flash">
3 <%= flash[:notice] %> 3 <%= flash[:notice] %>
4 <% if flash[:status_path] %> 4 <% if flash[:status_path] %>
5 <%= link_to 'Go to Status', flash[:status_path] %> 5 <%= link_to t(".go_to_status"), flash[:status_path] %>
6 <% end %> 6 <% end %>
7 <% if flash[:stale_locale_path] %> 7 <% if flash[:stale_locale_path] %>
8 The <%= flash[:stale_locale] %> translation may be out of date — 8 <%= t(".stale_prefix", :lang => flash[:stale_locale]) %>
9 <%= link_to 'review it', flash[:stale_locale_path] %> too. 9 <%= link_to t(".stale_link"), flash[:stale_locale_path] %><%= t(".stale_suffix") %>
10 <% end %> 10 <% end %>
11 <% if flash[:locked_node_path] %> 11 <% if flash[:locked_node_path] %>
12 <span class="warning">The page is locked by <%= flash[:locked_by] %> 12 <span class="warning"><%= t(".locked_prefix", :login => flash[:locked_by]) %>
13 <%= link_to 'unlock it there', flash[:locked_node_path] %> first, 13 <%= link_to t(".locked_link"), flash[:locked_node_path] %><%= t(".locked_suffix") %>
14 then attach from this asset's page.</span> 14 </span>
15 <% end %> 15 <% end %>
16 <% if flash[:headline_kept_path] %> 16 <% if flash[:headline_kept_path] %>
17 <span class="warning">The page's existing headline was kept — 17 <span class="warning"><%= t(".headline_prefix") %>
18 <%= link_to 'change it there', flash[:headline_kept_path] %> if needed.</span> 18 <%= link_to t(".headline_link"), flash[:headline_kept_path] %><%= t(".headline_suffix") %>
19 </span>
19 <% end %> 20 <% end %>
20 <% if flash[:error] %> 21 <% if flash[:error] %>
21 <span id="flash_error"><%= flash[:error] %></span> 22 <span id="flash_error"><%= flash[:error] %></span>
diff --git a/app/views/layouts/admin.html.erb b/app/views/layouts/admin.html.erb
index 89c9b550..e056489f 100644
--- a/app/views/layouts/admin.html.erb
+++ b/app/views/layouts/admin.html.erb
@@ -10,15 +10,16 @@
10 <%= javascript_include_tag 'admin_bundle' %> 10 <%= javascript_include_tag 'admin_bundle' %>
11 <%= tinymce_assets %> 11 <%= tinymce_assets %>
12 <link rel="stylesheet" href="<%= mtime_busted_path('/stylesheets/admin.css') %>"> 12 <link rel="stylesheet" href="<%= mtime_busted_path('/stylesheets/admin.css') %>">
13 <script src="<%= mtime_busted_path('/javascripts/admin_search.js') %>"></script>
14 <script src="<%= mtime_busted_path('/javascripts/admin_interface.js') %>"></script>
15 <script src="<%= mtime_busted_path('/javascripts/related_assets.js') %>"></script>
16 <%= javascript_tag nonce: true do %> 13 <%= javascript_tag nonce: true do %>
17 var ADMIN_SEARCH_URL = "<%= admin_search_path %>"; 14 var ADMIN_SEARCH_URL = "<%= admin_search_path %>";
18 var ADMIN_MENU_SEARCH_URL = "<%= admin_menu_search_path %>"; 15 var ADMIN_MENU_SEARCH_URL = "<%= admin_menu_search_path %>";
16 var ADMIN_STRINGS = <%= raw({ :lock_lost_prefix => t(".lock_lost_prefix"), :lock_lost_link => t(".lock_lost_link"), :insert_image => t(".insert_image"), :insert_image_tooltip => t(".insert_image_tooltip") }.to_json) %>;
19 var PARAMETERIZE_PREVIEW_URL = "<%= parameterize_preview_nodes_path %>"; 17 var PARAMETERIZE_PREVIEW_URL = "<%= parameterize_preview_nodes_path %>";
20 var DASHBOARD_SEARCH_URL = "<%= admin_dashboard_search_path %>"; 18 var DASHBOARD_SEARCH_URL = "<%= admin_dashboard_search_path %>";
21 <% end %> 19 <% end %>
20 <script src="<%= mtime_busted_path('/javascripts/admin_search.js') %>"></script>
21 <script src="<%= mtime_busted_path('/javascripts/admin_interface.js') %>"></script>
22 <script src="<%= mtime_busted_path('/javascripts/related_assets.js') %>"></script>
22 </head> 23 </head>
23 24
24 <body> 25 <body>
@@ -30,7 +31,7 @@
30 <div id="search_widget" style="display: none;"> 31 <div id="search_widget" style="display: none;">
31 <div> 32 <div>
32 <%= form_tag admin_search_path, method: :get do %> 33 <%= form_tag admin_search_path, method: :get do %>
33 <%= text_field_tag :search_term, nil, placeholder: "Search nodes…", autocomplete: "off" %> 34 <%= text_field_tag :search_term, nil, placeholder: t(".search_placeholder"), autocomplete: "off" %>
34 <% end %> 35 <% end %>
35 </div> 36 </div>
36 <div id="menu_search_results" class="search_results" style="display: none"></div> 37 <div id="menu_search_results" class="search_results" style="display: none"></div>
diff --git a/config/locales/de.yml b/config/locales/de.yml
index e2b393ee..8a8a9a40 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -247,7 +247,35 @@ de:
247 path: "Pfad" 247 path: "Pfad"
248 preview: "Vorschau" 248 preview: "Vorschau"
249 name: "Name" 249 name: "Name"
250 author: "Autor"
250 type: "Typ" 251 type: "Typ"
252 menu:
253 dashboard: "Dashboard"
254 search: "Suche"
255 log_out: "Abmelden"
256 index:
257 title: "cccms Dashboard"
258 search_placeholder: "Nodes und Tags durchsuchen…"
259 create_post: "Beitrag anlegen"
260 find_chapter: "Chapter finden"
261 upload_asset: "Asset hochladen"
262 add_in_tree: "Seite im Seitenbaum anlegen"
263 drafts_widget: "Entwürfe und Autosaves"
264 see_all_drafts: "Alle Entwürfe →"
265 see_all_changes: "Alle Änderungen →"
266 housekeeping: "Verwaltung"
267 my_account: "Mein Konto"
268 navigation: "Navigation"
269 drafts:
270 title: "Entwürfe (%{size})"
271 revisions: "Revisionen"
272 conventions:
273 title: "Konventionen beim Anlegen von Nodes"
274 kind: "Art"
275 what_happens: "Was passiert"
276 search_results:
277 title: "Suchergebnisse"
278
251 nodes: 279 nodes:
252 index: 280 index:
253 title: "Nodes" 281 title: "Nodes"
@@ -504,34 +532,55 @@ de:
504 none_to_remove: "Es existiert keine %{lang}-Übersetzung zum Entfernen." 532 none_to_remove: "Es existiert keine %{lang}-Übersetzung zum Entfernen."
505 last_translation: "Die einzige verbliebene Übersetzung kann nicht entfernt werden." 533 last_translation: "Die einzige verbliebene Übersetzung kann nicht entfernt werden."
506 removed: "%{lang}-Übersetzung aus dem Entwurf entfernt. Veröffentlichen, um das dauerhaft zu machen." 534 removed: "%{lang}-Übersetzung aus dem Entwurf entfernt. Veröffentlichen, um das dauerhaft zu machen."
507 assets: 535
508 index: 536 assets:
509 title: "Assets" 537 index:
510 create_asset: "Asset anlegen" 538 title: "Assets"
511 show: 539 create_asset: "Asset anlegen"
512 thumbnail: "Vorschaubild" 540 show:
513 attached_to: "Angehängt an" 541 thumbnail: "Vorschaubild"
514 pending_only: "nur in ausstehenden Versionen" 542 attached_to: "Angehängt an"
515 not_attached: "— an keine Seite angehängt —" 543 pending_only: "nur in ausstehenden Versionen"
516 new_page_with_attachment: "Neue Seite mit diesem Anhang" 544 not_attached: "— an keine Seite angehängt —"
517 public_path: "Öffentlicher Pfad" 545 new_page_with_attachment: "Neue Seite mit diesem Anhang"
518 copy_url: "URL kopieren" 546 public_path: "Öffentlicher Pfad"
519 creator: "Urheber" 547 copy_url: "URL kopieren"
520 source: "Quelle" 548 creator: "Urheber"
521 license: "Lizenz" 549 source: "Quelle"
522 content_type: "Content-Type" 550 license: "Lizenz"
523 size: "Größe" 551 content_type: "Content-Type"
524 new: 552 size: "Größe"
525 title: "Neues Asset" 553 new:
526 edit: 554 title: "Neues Asset"
527 title: "Asset bearbeiten" 555 edit:
528 current_file: "Aktuelle Datei" 556 title: "Asset bearbeiten"
529 replace_file: "Datei ersetzen" 557 current_file: "Aktuelle Datei"
530 form: 558 replace_file: "Datei ersetzen"
531 drop_hint: "…oder Datei hier ablegen." 559 form:
532 none_option: "— keine —" 560 drop_hint: "…oder Datei hier ablegen."
533 attach_to_page: "an Seite anhängen" 561 none_option: "— keine —"
534 attach_search_placeholder: "Seite suchen…" 562 attach_to_page: "an Seite anhängen"
535 attach_hint: "Optional — hängt dieses Asset an die Seite an, alle ausstehenden Versionen eingeschlossen." 563 attach_search_placeholder: "Seite suchen…"
536 as_headline: "als Aufmacher der Seite anhängen" 564 attach_hint: "Optional — hängt dieses Asset an die Seite an, alle ausstehenden Versionen eingeschlossen."
537 headline_hint: "Gilt nur, wenn die Seite noch keinen Aufmacher hat." 565 as_headline: "als Aufmacher der Seite anhängen"
566 headline_hint: "Gilt nur, wenn die Seite noch keinen Aufmacher hat."
567
568 layouts:
569 flash:
570 go_to_status: "Zum Status"
571 stale_prefix: "Die %{lang}-Übersetzung ist womöglich veraltet —"
572 stale_link: "auch prüfen"
573 stale_suffix: "."
574 locked_prefix: "Die Seite ist von %{login} gesperrt —"
575 locked_link: "dort entsperren"
576 locked_suffix: ", dann von der Asset-Seite aus erneut anhängen."
577 headline_prefix: "Der bestehende Aufmacher der Seite wurde behalten —"
578 headline_link: "dort ändern"
579 headline_suffix: ", falls gewünscht."
580 admin:
581 search_placeholder: "Nodes durchsuchen…"
582 lock_lost_prefix: "Diese Seite ist jetzt von jemand anderem gesperrt — deine Änderungen hier können nicht mehr gespeichert werden. Kopiere, was du brauchst, dann "
583 lock_lost_link: "zurück zur veröffentlichten Seite"
584 insert_image: "Bild einfügen"
585 insert_image_tooltip: "Eines der angehängten Bilder dieser Seite einfügen"
586
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 83ceadda..44b1615b 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -199,7 +199,34 @@ en:
199 path: "Path" 199 path: "Path"
200 preview: "Preview" 200 preview: "Preview"
201 name: "Name" 201 name: "Name"
202 author: "Author"
202 type: "Type" 203 type: "Type"
204 menu:
205 dashboard: "Dashboard"
206 search: "Search"
207 log_out: "Log out"
208 index:
209 title: "cccms dashboard"
210 search_placeholder: "Search nodes and tags…"
211 create_post: "Create post"
212 find_chapter: "Find a chapter"
213 upload_asset: "Upload asset"
214 add_in_tree: "Add a page in the page tree"
215 drafts_widget: "Drafts and autosaves"
216 see_all_drafts: "See all drafts →"
217 see_all_changes: "See all recent changes →"
218 housekeeping: "Housekeeping"
219 my_account: "My account"
220 navigation: "Navigation"
221 drafts:
222 title: "Drafts (%{size})"
223 revisions: "Revisions"
224 conventions:
225 title: "Node creation conventions"
226 kind: "Kind"
227 what_happens: "What happens"
228 search_results:
229 title: "Search Results"
203 nodes: 230 nodes:
204 index: 231 index:
205 title: "Nodes" 232 title: "Nodes"
@@ -456,34 +483,54 @@ en:
456 none_to_remove: "No %{lang} translation exists to remove." 483 none_to_remove: "No %{lang} translation exists to remove."
457 last_translation: "Can't remove the only remaining translation." 484 last_translation: "Can't remove the only remaining translation."
458 removed: "%{lang} translation removed from the draft. Publish to make this permanent." 485 removed: "%{lang} translation removed from the draft. Publish to make this permanent."
459 assets: 486
460 index: 487 assets:
461 title: "Assets" 488 index:
462 create_asset: "Create asset" 489 title: "Assets"
463 show: 490 create_asset: "Create asset"
464 thumbnail: "Thumbnail" 491 show:
465 attached_to: "Attached to" 492 thumbnail: "Thumbnail"
466 pending_only: "pending versions only" 493 attached_to: "Attached to"
467 not_attached: "— not attached to any page —" 494 pending_only: "pending versions only"
468 new_page_with_attachment: "New page with this attachment" 495 not_attached: "— not attached to any page —"
469 public_path: "Public Path" 496 new_page_with_attachment: "New page with this attachment"
470 copy_url: "Copy URL" 497 public_path: "Public Path"
471 creator: "Creator" 498 copy_url: "Copy URL"
472 source: "Source" 499 creator: "Creator"
473 license: "License" 500 source: "Source"
474 content_type: "Content Type" 501 license: "License"
475 size: "Size" 502 content_type: "Content Type"
476 new: 503 size: "Size"
477 title: "New asset" 504 new:
478 edit: 505 title: "New asset"
479 title: "Editing asset" 506 edit:
480 current_file: "Current File" 507 title: "Editing asset"
481 replace_file: "Replace file" 508 current_file: "Current File"
482 form: 509 replace_file: "Replace file"
483 drop_hint: "…or drop a file here." 510 form:
484 none_option: "— none —" 511 drop_hint: "…or drop a file here."
485 attach_to_page: "attach to page" 512 none_option: "— none —"
486 attach_search_placeholder: "Search for a page…" 513 attach_to_page: "attach to page"
487 attach_hint: "Optional — attaches this asset to that page, all pending versions included." 514 attach_search_placeholder: "Search for a page…"
488 as_headline: "attach as the page's headline" 515 attach_hint: "Optional — attaches this asset to that page, all pending versions included."
489 headline_hint: "Applies only if the page has no headline yet." 516 as_headline: "attach as the page's headline"
517 headline_hint: "Applies only if the page has no headline yet."
518
519 layouts:
520 flash:
521 go_to_status: "Go to Status"
522 stale_prefix: "The %{lang} translation may be out of date —"
523 stale_link: "review it"
524 stale_suffix: " too."
525 locked_prefix: "The page is locked by %{login} —"
526 locked_link: "unlock it there"
527 locked_suffix: " first, then attach from this asset's page."
528 headline_prefix: "The page's existing headline was kept —"
529 headline_link: "change it there"
530 headline_suffix: " if needed."
531 admin:
532 search_placeholder: "Search nodes…"
533 lock_lost_prefix: "This page is now locked by someone else — your changes here can no longer be saved. Copy anything you need, then "
534 lock_lost_link: "return to the published page"
535 insert_image: "Insert image"
536 insert_image_tooltip: "Insert one of this page's attached images"
diff --git a/public/javascripts/admin_interface.js b/public/javascripts/admin_interface.js
index 984eec05..ee0b34cd 100644
--- a/public/javascripts/admin_interface.js
+++ b/public/javascripts/admin_interface.js
@@ -24,8 +24,8 @@ $(document).ready(function () {
24 24
25 editor.ui.registry.addButton('insertpageimage', { 25 editor.ui.registry.addButton('insertpageimage', {
26 icon: 'image', 26 icon: 'image',
27 text: 'Insert image', 27 text: ADMIN_STRINGS.insert_image,
28 tooltip: "Insert one of this page's attached images", 28 tooltip: ADMIN_STRINGS.insert_image_tooltip,
29 onAction: function() { 29 onAction: function() {
30 cccms.inline_images.open(editor); 30 cccms.inline_images.open(editor);
31 } 31 }
@@ -231,10 +231,8 @@ cccms = {
231 $flash = $("<div>", { id: "flash" }).insertAfter(".admin_content_spacer"); 231 $flash = $("<div>", { id: "flash" }).insertAfter(".admin_content_spacer");
232 } 232 }
233 233
234 var $banner = $("<span>", { "class": "warning" }).text( 234 var $banner = $("<span>", { "class": "warning" }).text(ADMIN_STRINGS.lock_lost_prefix);
235 "This page is now locked by someone else — your changes here can no longer be saved. Copy anything you need, then " 235 $banner.append($("<a>", { href: show_url }).text(ADMIN_STRINGS.lock_lost_link));
236 );
237 $banner.append($("<a>", { href: show_url }).text("return to the published page"));
238 $banner.append("."); 236 $banner.append(".");
239 237
240 $flash.html($banner); 238 $flash.html($banner);