oficina / slides Public

Clone
git clone https://amadan.net/oficina/slides

Plain git — no account needed to clone.

Download

Download this file

1# Slides' English catalog. Every user-visible string this app writes is
2# a key here, never a literal in a template or a handler, resolved
3# through rastrillo.T at render time.
4#
5# Flat TOML, one key per line, dotted names grouped by screen — the
6# format rastrillo.Options.LocaleFS reads as locales/<code>.toml.
7# Adding a language means adding a file beside this one with the same
8# keys; nothing else in the app has to change.
9
10# slides.signin.* — GET /signin (auth.go's signin handler): the errors
11# estilo's sign-in door shows, on the way back from rastrillo/auth, for
12# whichever outcome it was redirected here with
13# (?err=rate|address|expired|keymail|removed|refused|1), and the card
14# between the form and Keymail (slides.signin.keymail.*), and the line on the
15# confirm step an emailed link opens on (slides.signin.confirm.lede, under
16# the door's own "Sign in" heading and button). The door's own words
17# (form, check-your-email, signed out) are estilo's chrome.English, not
18# keys here, so no app can drift from the others (shared chrome spec §9.2).
19#
20# error.unknown covers both the keymail outcome and a bare failure:
21# rastrillo/auth's Verify deliberately answers the same way for an
22# unknown, a used and an expired token, so there is no finer
23# distinction for this page to draw — and every outcome on this screen
24# means one operational thing, "ask for a new link".
25slides.signin.error.rate = "Too many attempts. Wait a few minutes, then try again."
26slides.signin.error.address = "That doesn’t look like an email address."
27slides.signin.error.expired = "That link has expired or was already used. Enter your email to get a new one."
28slides.signin.error.unknown = "We couldn’t sign you in. Enter your email to get a new link."
29slides.signin.error.removed = "Your access has been removed, so you’ve been signed out. Ask whoever runs this team if that’s wrong."
30slides.signin.error.refused = "That address can’t sign in to Slides. Use a different address, or ask whoever runs this team to add it."
31slides.signin.confirm.lede = "Select Sign in to finish signing in."
32slides.signin.keymail.title = "Continue signing in"
33slides.signin.keymail.body = "Taking you to Keymail to finish signing in."
34slides.signin.keymail.action = "Continue to Keymail"
35
36# slides.chrome.* — estilo's shared bar and account menu (chrome.go).
37slides.chrome.skip = "Skip to content"
38slides.chrome.menu = "Menu"
39slides.chrome.signin = "Sign in"
40slides.chrome.account = "Account"
41slides.chrome.account.who = "Account: {address}"
42slides.chrome.signed_in_as = "Signed in as"
43slides.chrome.appearance = "Appearance"
44slides.chrome.appearance.light = "Light"
45slides.chrome.appearance.dark = "Dark"
46slides.chrome.appearance.system = "System"
47slides.chrome.switcher = "Oficina apps"
48slides.chrome.switcher.current = "(this app)"
49slides.chrome.switcher.all = "All apps"
50
51# slides.error.* — the error page (errors.go), shared chrome spec §3.2.
52# title is the <title>'s first part; heading the page's h1.
53slides.error.404.title = "Page not found"
54slides.error.404.heading = "We can’t find that page"
55slides.error.404.body = "The link may be out of date, or the page may have moved."
56slides.error.deck.title = "Deck not available"
57slides.error.deck.heading = "This deck isn’t available"
58slides.error.deck.body = "It may have been deleted, or it hasn’t been shared with you."
59slides.error.403.title = "No access"
60slides.error.403.heading = "You don’t have access to this page"
61slides.error.403.body = "Ask whoever runs this team if you think you should."
62slides.error.422.title = "That didn’t work"
63slides.error.422.heading = "That didn’t work"
64slides.error.422.body = "Go back and try again."
65slides.error.500.title = "Something went wrong"
66slides.error.500.heading = "Something went wrong"
67slides.error.500.body = "Try again in a moment. If it keeps happening, quote the reference below."
68slides.error.503.title = "Slides is unavailable"
69slides.error.503.heading = "Slides is unavailable right now"
70slides.error.503.body = "Try again in a few minutes."
71slides.error.home = "Go to Slides"
72slides.error.again = "Try again"
73slides.error.ref = "Reference:"
74slides.error.back = "Back"
75
76# slides.decks.* — GET /, the deck list, and GET /decks/new. Title is
77# the screen's noun, per page-header's own contract ("Decks", not
78# "Home").
79#
80# The empty state is a designed screen, not a blank page: it says what
81# this screen is for rather than only that there is nothing on it. In
82# practice a new person never sees it — their first sign-in seeds a
83# sample deck — so it is what somebody meets after deleting the last
84# deck they had, which is exactly when a screen should say what it is
85# for.
86slides.decks.title = "Decks"
87slides.decks.empty.title = "No decks yet"
88slides.decks.empty.body = "A deck is a set of slides you write, present and share. Start one and it will show up here."
89slides.decks.new = "New deck"
90slides.decks.new.body = "Give it a name and a look. Both are easy to change later."
91slides.decks.new.submit = "Create deck"
92
93# A list row's meta line: how many slides, and when it last changed.
94# Two keys for the count because English has two forms and the catalog
95# has no plural machinery — the handler picks (decks.go's rowSub).
96slides.decks.row.slides.one = "1 slide"
97slides.decks.row.slides = "{n} slides"
98slides.decks.row.sub = "{slides} · edited {when}"
99# The same line for a deck whose document would not open: the time is
100# still true, and a slide count would be a guess.
101slides.decks.row.sub.plain = "edited {when}"
102# Who made that last change (spec §6.2's actor). A person is their
103# address; an agent is the robot mark and its principal, so a deck a
104# program has been editing says so on the row rather than only in a
105# history nobody opens.
106slides.decks.row.by = "{sub} · by {who}"
107
108# slides.when.* — day-grained relative time. A deck list is scanned for
109# which deck, never for what minute, so nothing here is finer than a
110# day, and past a week the date itself is easier to read than a count.
111slides.when.today = "today"
112slides.when.yesterday = "yesterday"
113slides.when.days = "{n} days ago"
114slides.when.on = "on {date}"
115
116# slides.deck.* — one deck: its own page, its settings, its deletion.
117#
118# slide is the fallback name for a slide with no heading of its own —
119# what the filmstrip and the notes page call it when there is nothing
120# better to call it (viewer.go's slideLabel).
121slides.deck.settings = "Deck settings"
122slides.deck.settings.submit = "Save settings"
123slides.deck.back = "Back to the deck"
124slides.deck.slide = "Slide {n}"
125slides.deck.title.label = "Title"
126slides.deck.title.required = "Give the deck a title."
127slides.deck.theme.label = "Theme"
128slides.deck.theme.invalid = "Pick one of the themes listed."
129slides.deck.rung.legend = "Who can open this deck"
130slides.deck.rung.invalid = "Pick who can open this deck."
131
132# Deleting: its own page, its own question. The title names the deck,
133# because "Delete this deck?" on a page you reached by accident is a
134# question you cannot answer.
135slides.deck.delete = "Delete this deck"
136slides.deck.delete.lead = "Deleting a deck removes it and everything written in it. Nobody else can open it afterwards, including people it was shared with."
137slides.deck.delete.title = "Delete “{title}”?"
138slides.deck.delete.body = "The slides, the speaker notes and the whole edit history go with it. This cannot be undone."
139slides.deck.delete.confirm = "Delete the deck"
140
141# slides.rung.* — spec §5's sharing rungs, as a person reads them. Each
142# is a short title plus the line that says who it leaves out; "Private"
143# on its own does not. Only private and team are offered by a screen
144# today, but a deck already on the granted rung still has to be
145# labelled, so all three are here.
146slides.rung.private = "Only me"
147slides.rung.private.desc = "Nobody else on this instance can open it."
148slides.rung.granted = "People I've named"
149slides.rung.granted.desc = "Only the people who have been given access."
150slides.rung.team = "Everyone here"
151slides.rung.team.desc = "Anyone signed in to this instance can open and edit it."
152
153# slides.theme.* — the six themes, by name. The ids themselves
154# (paper, ink, …) are identifiers and never rendered.
155slides.theme.paper = "Paper"
156slides.theme.ink = "Ink"
157slides.theme.sunset = "Sunset"
158slides.theme.forest = "Forest"
159slides.theme.slate = "Slate"
160slides.theme.candy = "Candy"
161
162# slides.cancel — leaving a form. One key, because it means the same
163# thing on every screen that has one.
164slides.cancel = "Cancel"
165
166# slides.account.* — the shell's account menu.
167slides.account.agents = "Agents"
168slides.account.signout = "Sign out"
169
170# slides.agents.* — GET/POST /agents, the tokens that let a program
171# drive this person's decks (spec §7.1).
172#
173# The warning is stated before the button rather than in a help page,
174# the share screen's rule: a token is genuinely useful and genuinely
175# means a program can write everything you can write, and the person
176# deciding should see both.
177slides.agents.title = "Agents"
178slides.agents.lead = "An agent is a program that edits your decks over the API — a coding assistant, a script, a bot. It gets its own token and its own name, and every change it makes is recorded under that name rather than yours."
179slides.agents.warning.title = "What a token can do"
180slides.agents.warning = "A token can read and change every deck you can, and start a presentation from any of them. It cannot mint another token, and it stops working the moment you revoke it."
181slides.agents.create = "Create an agent"
182slides.agents.name.label = "Name"
183slides.agents.name.hint = "Lowercase letters, digits and hyphens, 2 to 32 characters — claude, codex, release-bot."
184slides.agents.name.invalid = "Use 2 to 32 lowercase letters, digits or hyphens."
185slides.agents.name.taken = "You already have an agent with that name. Revoke it first, or pick another name."
186slides.agents.revoke = "Revoke"
187# "Revoke" repeated down a list does not say which agent it revokes,
188# so the button carries a full accessible name of its own.
189slides.agents.revoke.aria = "Revoke {principal}"
190slides.agents.active = "Active"
191slides.agents.revoked = "Revoked"
192slides.agents.empty.title = "No agents yet"
193slides.agents.empty.body = "Nothing is driving your decks but you. Create an agent when you want a program to write slides on your behalf."
194slides.agents.row.created = "Created {when}"
195
196# Shown once, at the moment of minting, because only the token's
197# fingerprint is stored and there is nothing to show a second time.
198slides.agents.new.title = "Copy this now — it is not shown again"
199slides.agents.new.body = "Only a fingerprint of this token is stored, so it cannot be shown again. If you lose it, revoke the agent and create another."
200slides.agents.new.label = "Agent token"
201slides.agents.new.copy = "Select the whole field and copy it."
202slides.agents.new.use = "Send it as: Authorization: Bearer <token> to {origin}/api/v1"
203
204# slides.error.generic is this app's one fallback error string: a
205# failure with nowhere styled to land. Still a key, never a literal,
206# even though it is plain text today.
207slides.error.generic = "Something went wrong."
208
209# slides.viewer.* — GET /d/{sqid} and GET /s/{token}, the paged viewer.
210# One slide per page, and every control on it named in words: the
211# counter is text rather than a position in a scrollbar, and the pager's
212# ends are text rather than a greyed-out shape.
213slides.viewer.counter = "{n} of {total}"
214slides.viewer.prev = "Previous slide"
215slides.viewer.next = "Next slide"
216slides.viewer.pager = "Slides"
217slides.viewer.film = "All slides"
218slides.viewer.tools = "This deck"
219slides.viewer.notes = "Speaker notes"
220slides.viewer.notes.page = "All notes"
221slides.viewer.share = "Share"
222slides.viewer.present = "Present"
223slides.viewer.edit = "Edit"
224# A link, not a form: the export asks a question first (with the notes
225# or without), so the button opens the screen that asks it.
226slides.viewer.export = "Export PDF"
227# A deck whose document has nothing in it. Reachable today only after a
228# document was emptied by something other than a screen, which is
229# exactly when a page saying "not found" would read as data loss.
230slides.viewer.empty.title = "No slides yet"
231slides.viewer.empty.body = "This deck has no slides yet. Open the editor to add one."
232slides.viewer.empty.body.link = "This deck has no slides yet."
233
234# slides.editor.* — GET /d/{sqid}/edit, the editor (editor.go). The
235# status and link strings are rendered into data attributes on the page
236# and shown by the bundle, which is why they are here and not in a JS
237# file: the bundle carries no copy of its own.
238slides.editor.menu = "Slide"
239slides.editor.slide.new = "New slide"
240slides.editor.slide.duplicate = "Duplicate slide"
241slides.editor.undo = "Undo"
242slides.editor.redo = "Redo"
243slides.editor.strip = "Slides"
244slides.editor.strip.current = "Current slide"
245slides.editor.stage = "Stage"
246slides.editor.empty.body = "This deck has no slides yet. Add the first one from the Slide menu."
247slides.editor.inspector = "Inspector"
248slides.editor.inspector.empty = "Select a block to see its settings."
249slides.editor.status = "Save status"
250slides.editor.status.saved = "Saved"
251slides.editor.status.saving = "Saving…"
252slides.editor.status.offline = "Offline, retrying"
253slides.editor.status.failed = "Some changes could not be saved. Reload to continue."
254slides.editor.status.error = "Couldn't load that slide. Check the connection and try again."
255slides.editor.link.title = "Link"
256slides.editor.link.url = "Address"
257slides.editor.link.insert = "Insert link"
258slides.editor.link.remove = "Remove link"
259slides.editor.link.cancel = "Cancel"
260slides.editor.noscript = "Editing needs scripts, which are off in this browser. You can still read the deck."
261slides.editor.noscript.link = "Open the deck"
262
263# The strip's per-slide menu. "Slide actions" names the menu button,
264# which otherwise shows only an icon; the items repeat the Slide
265# section's commands so a slide can be reordered, copied or removed
266# from where it is listed.
267slides.editor.strip.actions = "Slide actions"
268slides.editor.strip.reorder = "Drag to reorder, or press Alt with the up or down arrow."
269
270# Presence (spec §3.3): who else has this deck open, and where they
271# are. Every one of these names the person — the colour of an avatar or
272# an outline is a second way of saying it, never the only one. The
273# arrivals and departures are the only presence a screen reader is
274# interrupted for; moving around a deck is not announced.
275slides.editor.presence.slide = "{name} is on this slide"
276slides.editor.presence.block = "{name} is editing this block"
277slides.editor.presence.more = "{n} more people on this slide"
278slides.editor.presence.joined = "{name} opened this deck"
279slides.editor.presence.left = "{name} closed this deck"
280
281# The desktop/phone switcher on the stage (spec §3.2). Three visible
282# words, never icons alone: which view is on decides where an edit
283# lands.
284slides.editor.view = "View"
285slides.editor.view.desktop = "Desktop"
286slides.editor.view.phone = "Phone"
287slides.editor.view.both = "Both"
288slides.editor.view.phone.readonly = "Phone preview, read-only"
289
290# The inspector's three sections and the Blocks list.
291slides.editor.inspector.deck = "Deck"
292slides.editor.inspector.slide = "Slide"
293slides.editor.inspector.block = "Block"
294slides.editor.inspector.blocks = "Blocks on this slide"
295slides.editor.inspector.blocks.none = "No blocks yet. Add one below."
296
297# Deck settings: every control is one set_meta.
298slides.editor.deck.title = "Title"
299slides.editor.deck.theme = "Theme"
300slides.editor.deck.accent = "Accent colour"
301slides.editor.deck.accent.reset = "Use the theme's accent"
302# Unused images: the Deck section's list of assets no image block on any
303# slide refers to any more. Removing one is `remove_asset`; the bytes
304# stay in the object store, which is content-addressed and shared.
305slides.editor.assets.unused = "Unused images"
306slides.editor.assets.unused.none = "Every image is on a slide."
307slides.editor.assets.remove = "Remove"
308slides.editor.deck.font.heading = "Heading font"
309slides.editor.deck.font.body = "Body font"
310slides.editor.font.theme = "Theme's"
311slides.editor.font.system = "System"
312slides.editor.font.serif = "Serif"
313slides.editor.font.mono = "Mono"
314
315# Slide settings: every control is one set_slide, and the structure
316# buttons are add_slide, duplicate_slide, move_slide, remove_slide.
317slides.editor.slide.layout = "Layout"
318slides.editor.layout.flow = "Flow"
319slides.editor.layout.flow.desc = "Blocks stack in the template's regions. Switching from canvas drops every box."
320slides.editor.layout.canvas = "Canvas"
321slides.editor.layout.canvas.desc = "Blocks sit where you put them. Switching from flow gives each block its region's box."
322slides.editor.slide.template = "Template"
323slides.editor.template.title = "Title"
324slides.editor.template.title-body = "Title and body"
325slides.editor.template.two-column = "Two columns"
326slides.editor.template.section = "Section"
327slides.editor.template.image-full = "Full image"
328slides.editor.template.quote = "Quote"
329slides.editor.template.blank = "Blank"
330slides.editor.slide.background = "Background"
331slides.editor.background.theme = "Theme's"
332slides.editor.background.color = "A colour"
333slides.editor.slide.background.color = "Background colour"
334slides.editor.slide.transition = "Transition"
335slides.editor.transition.none = "None"
336slides.editor.transition.fade = "Fade"
337slides.editor.slide.phone = "On a phone"
338slides.editor.slide.phone.inherit = "Scale the canvas to fit"
339slides.editor.slide.phone.reflow = "Reflow the blocks as a column"
340slides.editor.slide.notes.show = "Show speaker notes"
341slides.editor.slide.add = "Add slide after"
342slides.editor.slide.move.up = "Move up"
343slides.editor.slide.move.down = "Move down"
344slides.editor.slide.delete = "Delete slide"
345slides.editor.slide.delete.confirm = "Delete this slide? Undo brings it back."
346slides.editor.slide.delete.cancel = "Keep it"
347
348# Blocks: the add menu lists the eleven types by name, and the same
349# names label the Blocks list.
350slides.editor.block.add = "Add block"
351slides.editor.type.heading = "Heading"
352slides.editor.type.text = "Text"
353slides.editor.type.list = "List"
354slides.editor.type.quote = "Quote"
355slides.editor.type.image = "Image"
356slides.editor.type.columns = "Columns"
357slides.editor.type.code = "Code"
358slides.editor.type.shape = "Shape"
359slides.editor.type.table = "Table"
360slides.editor.type.divider = "Divider"
361slides.editor.type.spacer = "Spacer"
362
363# Block settings: every control is one set_block (or set_text for a
364# shape's label), the position fields are set_block on the desktop and
365# set_phone in the phone view, and the phone fields are set_phone.
366slides.editor.block.level = "Level"
367slides.editor.block.size = "Size"
368slides.editor.size.s = "Small"
369slides.editor.size.m = "Medium"
370slides.editor.size.l = "Large"
371slides.editor.block.align = "Alignment"
372slides.editor.align.start = "Start"
373slides.editor.align.center = "Centre"
374slides.editor.align.end = "End"
375slides.editor.block.style = "List style"
376slides.editor.style.bullet = "Bullets"
377slides.editor.style.number = "Numbers"
378slides.editor.block.cite = "Citation"
379slides.editor.block.fit = "Fit"
380slides.editor.fit.cover = "Cover"
381slides.editor.fit.contain = "Contain"
382slides.editor.block.alt = "Alternative text"
383slides.editor.block.decorative = "Decorative, no description needed"
384# The image block's upload. The bundle reads these off data attributes
385# and shows one at a time as the upload moves through choosing, putting
386# and registering; the file input is disabled and nostore is what shows
387# instead when this deployment has no object store bound.
388slides.editor.block.image.file = "Image file"
389slides.editor.block.image.hint = "PNG, JPEG, WebP or SVG, up to 20 MB."
390slides.editor.block.image.nostore = "Uploading needs an object store. This deployment doesn't have one yet."
391slides.editor.block.image.uploading = "Uploading…"
392slides.editor.block.image.checking = "Checking the image…"
393slides.editor.block.image.done = "Uploaded."
394slides.editor.block.image.failed = "That upload didn't finish. Try again."
395slides.editor.block.image.toolarge = "That file is bigger than 20 MB."
396slides.editor.block.image.type = "Use a PNG, JPEG, WebP or SVG file."
397slides.editor.block.image.altfirst = "Write the alternative text first, or mark the image decorative."
398slides.editor.block.radius = "Corner radius"
399slides.editor.block.count = "Number of columns"
400slides.editor.block.language = "Language"
401slides.editor.block.kind = "Shape"
402slides.editor.kind.rect = "Rectangle"
403slides.editor.kind.ellipse = "Ellipse"
404slides.editor.kind.line = "Line"
405slides.editor.kind.arrow = "Arrow"
406slides.editor.block.fill = "Fill"
407slides.editor.block.stroke = "Stroke"
408slides.editor.block.strokeWidth = "Stroke width"
409slides.editor.block.label = "Label"
410slides.editor.block.rows = "Rows"
411slides.editor.block.cols = "Columns"
412slides.editor.block.header = "First row is a header"
413slides.editor.block.region = "Region"
414slides.editor.region.heading = "Heading"
415slides.editor.region.body = "Body"
416slides.editor.region.aside = "Aside"
417slides.editor.region.media = "Media"
418slides.editor.block.box = "Position and size, as a percentage of the frame"
419slides.editor.box.x = "Left"
420slides.editor.box.y = "Top"
421slides.editor.box.w = "Width"
422slides.editor.box.h = "Height"
423slides.editor.block.forward = "Bring forward"
424slides.editor.block.back = "Send back"
425slides.editor.block.move.up = "Move up"
426slides.editor.block.move.down = "Move down"
427slides.editor.block.delete = "Delete block"
428slides.editor.block.phone = "On a phone"
429slides.editor.block.phone.hidden = "Hidden on a phone"
430slides.editor.block.phone.order = "Order on a phone"
431slides.editor.block.phone.size = "Size on a phone"
432slides.editor.block.phone.same = "Same as the desktop"
433slides.editor.block.phone.override = "Phone override"
434slides.editor.block.phone.reset = "Reset to desktop"
435
436# The canvas overlay: the selected block's drag surface, named for a
437# screen reader, with the keys said out loud.
438slides.editor.canvas.selected = "Selected block. Arrow keys move it, Shift moves further, Alt resizes."
439
440# slides.notes.* — GET /d/{sqid}/notes, every slide's notes on one page.
441slides.notes.title = "Speaker notes"
442slides.notes.body = "Every slide's notes, in order. Print this, or keep it open on a second screen while you present."
443slides.notes.none = "No notes on this slide."
444
445# slides.share.* — GET/POST /d/{sqid}/share, the deck's read-only links.
446#
447# The warning is stated before the button rather than in a help page: a
448# share link is genuinely useful and genuinely means anyone who has it
449# can read the deck, and the person deciding should see both.
450slides.share.title = "Share links"
451slides.share.lead = "A share link opens this deck read-only, with no sign-in. The slides are what it shows — never the speaker notes, and never the settings."
452slides.share.warning.title = "What a share link does"
453slides.share.warning = "Anyone who has the link can open this deck, including anyone it gets forwarded to. It shows the deck as it is now, so later edits are visible through it too. Revoke it and the URL stops working."
454slides.share.create = "Create a share link"
455slides.share.revoke = "Revoke"
456# "Revoke" repeated down a list does not say which link it revokes, and
457# a link has no name — the URL is shown once — so the date it was made
458# is what the accessible name has to carry.
459slides.share.revoke.aria = "Revoke the link created {when}"
460slides.share.active = "Active"
461slides.share.revoked = "Revoked"
462slides.share.empty.title = "No share links"
463slides.share.empty.body = "A link lets somebody read this deck without signing in. Nothing is shared until you make one."
464
465# Shown once, at the moment of minting, because only the link's
466# fingerprint is stored and there is nothing to show a second time.
467slides.share.new.title = "Copy this now — it is not shown again"
468slides.share.new.body = "Only a fingerprint of this link is stored, so it cannot be shown again. If you lose it, revoke it and make another."
469slides.share.new.label = "Share link"
470slides.share.new.copy = "Select the whole field and copy it."
471
472# A link's row: when it was made, and how much it has been used. Three
473# keys for the count because English has three shapes here and the
474# catalog has no plural machinery — the handler picks (share.go).
475slides.share.row.created = "Created {when}"
476slides.share.row.views.none = "Never opened"
477slides.share.row.views.one = "1 view"
478slides.share.row.views = "{n} views"
479
480# slides.present.* — presenting (spec §3.4): the fullscreen surface,
481# the presenter view, and the commands all three driving surfaces send.
482#
483# The blackout has two keys rather than one label that changes colour:
484# what the button does next is the thing a person needs to know, and a
485# room that is dark is not a state to signal with a tint.
486slides.present.progress = "{n} / {total}"
487slides.present.progress.label = "Where you are in the deck"
488slides.present.next = "Next slide"
489slides.present.prev = "Previous slide"
490slides.present.next.label = "Coming next"
491slides.present.current = "On screen now"
492slides.present.blackout = "Black the screen"
493slides.present.unblackout = "Show the screen"
494slides.present.blacked = "The screen is blacked out."
495slides.present.end = "End the presentation"
496slides.present.notes.title = "Presenter view"
497slides.present.stage = "Full screen"
498slides.present.clock = "Time now"
499slides.present.started = "Started {when}"
500slides.present.elapsed = "Running {n} min"
501
502# A session that is over — ended, or past its twelve hours. A 410, and
503# worded as one: the talk finished, which is a different thing from an
504# address that was never real.
505slides.present.over.title = "Presentation over"
506slides.present.over.heading = "That presentation is over"
507slides.present.over.body = "The talk it was showing has ended. Ask whoever presented it for the deck, or open it again from your own list."
508
509# Pairing a phone. Shown once, at the moment of pairing, because only
510# a fingerprint of the key is stored — the share link's bargain, and
511# the reason the body says what pressing Present again does.
512slides.present.pair.title = "Use your phone as the remote"
513slides.present.pair.body = "Scan this, or open the address and type the code and key. It is shown once: press Present again to pair a different phone, which retires this one."
514slides.present.pair.code = "Pairing code"
515slides.present.pair.url = "Remote address"
516slides.present.pair.qr = "QR code for the remote, pairing code {code}"
517
518# slides.remote.* — the phone, and the page that pairs it.
519slides.remote.title = "Remote"
520slides.remote.pair.title = "Pair this phone"
521slides.remote.pair.body = "Type the code from the presenter's screen and the key beside it. Scanning the QR fills both in."
522slides.remote.pair.code = "Pairing code"
523slides.remote.pair.code.hint = "Six characters, from the presenter's screen."
524slides.remote.pair.token = "Remote key"
525slides.remote.pair.token.hint = "The long string beside the code. The QR carries it for you."
526slides.remote.pair.submit = "Open the remote"
527slides.remote.pair.error = "That code and key do not go together. Check both, or scan the QR."
528
529# slides.follow.* — the audience, watching a live talk through a share
530# link. Following is read-only: it moves with the presenter and never
531# moves them.
532slides.follow.offer = "Follow the presenter"
533slides.follow.browse = "Browse on your own"
534
535# slides.live.* — the live-sync transport (live.go). These four are
536# read by a script rather than by a person, so each is written for the
537# person who WILL read it: whoever has the network tab open when
538# something has gone wrong. Plain sentences, no codes, and never a
539# reason the client cannot act on.
540slides.live.error.badsince = "That cursor isn't a number. Reload the page."
541slides.live.error.toolarge = "That change is too large to save in one piece."
542slides.live.error.invalid = "This change couldn't be applied. Reload the page and try again."
543slides.live.error.busy = "Somebody else saved at the same moment. Try again."
544
545# slides.assets.* — the three image endpoints (assets.go, spec §2.7).
546# Read by the editor's bundle, which shows them beside the file input,
547# so each says what happened and what to do about it. The machine-
548# readable half of the same answer is a fixed identifier the bundle
549# branches on ("no_store", "too_large", …) and is deliberately not a
550# catalog key.
551slides.assets.error.nostore = "This deployment has no object store, so images can't be uploaded yet."
552slides.assets.error.invalid = "That upload request didn't make sense. Reload the page and try again."
553slides.assets.error.type = "Images must be PNG, JPEG, WebP or SVG."
554slides.assets.error.toolarge = "An image may be at most 20 MB."
555slides.assets.error.missing = "Those bytes never arrived. Try the upload again."
556slides.assets.error.notimage = "That file isn't a PNG, JPEG, WebP or SVG image."
557slides.assets.error.svg = "That SVG carries something we can't make safe — a script, or a reference to another site."
558slides.assets.error.altrequired = "An image needs alternative text unless it's marked decorative."
559slides.assets.error.failed = "The image couldn't be stored. Try again."
560
561# slides.export.* — the PDF export (exports.go, spec §4.3): the little
562# form that starts it, the status page it lands on, and everything the
563# job may have to say to the person who pressed the button.
564#
565# The job's sentences are resolved from this catalog while the request
566# is still here and carried into the goroutine (exportWords), because a
567# job outlives the request and rastrillo.T reads the locale off one. So
568# an export answers in the language of whoever started it, which is the
569# only person who ever sees it.
570#
571# progress carries {n} and {total} and is filled in Go, one substitution
572# per slide, for the same reason.
573slides.export.title = "Export as PDF"
574slides.export.body = "Every slide becomes a page, 16:9, with the text as real text you can search and copy."
575slides.export.notes = "Add the speaker notes as pages of their own"
576slides.export.submit = "Make the PDF"
577slides.export.held = "The file is kept for an hour, then it goes. Make another whenever you like."
578slides.export.job = "Exporting {title}"
579slides.export.progress = "slide {n} of {total}"
580slides.export.done = "The PDF is ready."
581slides.export.download = "Download the PDF"
582slides.export.again = "Export this deck again"
583# What the deck looks like in the file, said before somebody finds it
584# in a printed handout (§11's degrade loudly). Every line names the
585# slide it is about.
586slides.export.warnings = "Worth knowing"
587slides.export.warnings.body = "The PDF is complete, but these are the places it doesn't match the deck on screen."
588# The bytes were held in this process and the process no longer has
589# them: the hour is up, or the instance was replaced under it.
590slides.export.gone = "This export has expired. Make another one — it takes a few seconds."
591slides.export.error.busy = "You already have several exports running. Wait for one to finish and try again."
592slides.export.error.toomany = "This deck has more than {max} slides, which is more than one PDF will take."
593slides.export.error.open = "This deck couldn't be opened. Try again in a moment."
594slides.export.error.render = "The PDF couldn't be made. Try again, and tell us if it keeps happening."
595slides.export.error.toobig = "This PDF is larger than we can hold. Export it without the notes, or split the deck."
596slides.export.error.store = "The PDF was made but couldn't be stored. Try again."
597
598# slides.home.* — connect's account-connection pages. The hub is never
599# named: it is "your Oficina account", and the verb is Connect (Paul's
600# answer 3 to the shared chrome spec's §13).
601slides.home.start_title = "Connect your Oficina account"
602slides.home.start_body = "Use your Oficina account to sign in to this Slides account. Your decks and sharing settings stay as they are."
603slides.home.start_action = "Connect"
604slides.home.cancel_action = "Back"
605slides.home.confirm_title = "Confirm account connection"
606slides.home.confirm_body = "Connect the account below to the Oficina account you just signed in to."
607slides.home.confirm_action = "Connect accounts"
608slides.home.unknown_title = "Oficina account not connected"
609slides.home.unknown_body = "Sign in to your existing Slides account, then connect your Oficina account from the account menu."
610slides.home.local_action = "Sign in to your existing Slides account"
611slides.home.failed_title = "Could not connect accounts"
612slides.home.failed_body = "Return to Slides and start again."
613slides.home.success_title = "Accounts connected"
614slides.home.success_body = "You can now use your Oficina account to sign in to this Slides account."
615slides.home.documents_action = "Back to Slides"
616slides.home.menu_action = "Connect your Oficina account"
617
618slides.credits.title = "Open source"
619slides.credits.help = "Help"
620slides.credits.missing = "No notice file is included in this release."
621