Add translation support and German texts.

This commit is contained in:
Joachim Bauch 2021-12-07 16:44:26 +01:00
parent 25584ad2ff
commit dfae068786
No known key found for this signature in database
GPG key ID: 77C1D22D53E15F02
10 changed files with 500 additions and 39 deletions

4
.gitignore vendored
View file

@ -4,3 +4,7 @@ build/
js/
server/config.js
server/docker-compose.yml
translationtool.phar
*.mo
*.po~

2
.l10nignore Normal file
View file

@ -0,0 +1,2 @@
js/loader.js
js/pdfdraw.js

View file

@ -8,8 +8,29 @@ sign_dir=$(build_dir)/sign
package_name=$(app_name)
cert_dir=$(HOME)/.nextcloud/certificates
POT_FILES=$(wildcard translationfiles/*/pdfdraw.po)
all: npm build
translationtool.phar:
curl -L -o translationtool.phar https://github.com/nextcloud/docker-ci/raw/master/translations/translationtool/translationtool.phar
chmod a+x translationtool.phar
.PHONY: pot
pot: translationtool.phar
./translationtool.phar create-pot-files
sed -i "s|$(CURDIR)/||" translationfiles/templates/pdfdraw.pot
.PHONY: po
po: $(POT_FILES)
translationfiles/%/pdfdraw.po: translationtool.phar pot
msgmerge --update $@ translationfiles/templates/pdfdraw.pot
.PHONY: l10n
l10n: translationtool.phar
./translationtool.phar convert-po-files
npm: package.json package-lock.json
npm install

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<info>
<id>pdfdraw</id>
<name>PDF annotations</name>
<name>PDF Annotations</name>
<summary><![CDATA[Annotate PDF documents]]></summary>
<description><![CDATA[PDF annotations for Nextcloud

35
l10n/de.js Normal file
View file

@ -0,0 +1,35 @@
OC.L10N.register(
"pdfdraw",
{
"FileId is empty." : "Keine FileId übergeben.",
"File not found." : "Datei wurde nicht gefunden.",
"You do not have enough permissions to view the file." : "Sie haben keine ausreichenden Berechtigungen, um die Datei zu öffnen.",
"Token is empty." : "Kein Token übergeben.",
"File %s is not a PDF file (%s)." : "Datei %s ist kein PDF Dokument (%s).",
"No backend configured." : "Kein Backend konfiguriert.",
"Invalid token." : "Ungültiger Token.",
"Access denied." : "Zugriff verweigert.",
"PDF Annotations" : "PDF Annotationen",
"Annotate PDF documents" : "PDF Dokumente annotieren",
"Annotate" : "Annotieren",
"Open" : "Öffnen",
"Backend server" : "Backend-Server",
"Saved" : "Gespeichert",
"Shared secret" : "Geteiltes Geheimnis",
"Establishing connection, please wait..." : "Verbindung wird hergestellt, bitte warten...",
"The connection is interrupted, reconnecting..." : "Die Verbindung ist unterbrochen, verbinde neu...",
"Generating combined PDF, please wait..." : "Zusammengefügtes PDF wird erstellt, bitte warten...",
"PDF generation failed, please try again later." : "PDF Erzeugung fehlgeschlagen, bitte versuchen Sie es später nochmal.",
"Freehand" : "Freihand",
"Rectangle" : "Rechteck",
"Ellipse" : "Ellipse",
"Line" : "Linie",
"No tool" : "Nichts wählen",
"Select" : "Auswählen",
"Pointer" : "Zeiger",
"Draw mode" : "Zeichenmodus",
"Select color" : "Farbe wählen",
"Download" : "Herunterladen",
"Close" : "Schließen"
},
"nplurals=2; plural=(n != 1);");

33
l10n/de.json Normal file
View file

@ -0,0 +1,33 @@
{ "translations": {
"FileId is empty." : "Keine FileId übergeben.",
"File not found." : "Datei wurde nicht gefunden.",
"You do not have enough permissions to view the file." : "Sie haben keine ausreichenden Berechtigungen, um die Datei zu öffnen.",
"Token is empty." : "Kein Token übergeben.",
"File %s is not a PDF file (%s)." : "Datei %s ist kein PDF Dokument (%s).",
"No backend configured." : "Kein Backend konfiguriert.",
"Invalid token." : "Ungültiger Token.",
"Access denied." : "Zugriff verweigert.",
"PDF Annotations" : "PDF Annotationen",
"Annotate PDF documents" : "PDF Dokumente annotieren",
"Annotate" : "Annotieren",
"Open" : "Öffnen",
"Backend server" : "Backend-Server",
"Saved" : "Gespeichert",
"Shared secret" : "Geteiltes Geheimnis",
"Establishing connection, please wait..." : "Verbindung wird hergestellt, bitte warten...",
"The connection is interrupted, reconnecting..." : "Die Verbindung ist unterbrochen, verbinde neu...",
"Generating combined PDF, please wait..." : "Zusammengefügtes PDF wird erstellt, bitte warten...",
"PDF generation failed, please try again later." : "PDF Erzeugung fehlgeschlagen, bitte versuchen Sie es später nochmal.",
"Freehand" : "Freihand",
"Rectangle" : "Rechteck",
"Ellipse" : "Ellipse",
"Line" : "Linie",
"No tool" : "Nichts wählen",
"Select" : "Auswählen",
"Pointer" : "Zeiger",
"Draw mode" : "Zeichenmodus",
"Select color" : "Farbe wählen",
"Download" : "Herunterladen",
"Close" : "Schließen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -148,7 +148,7 @@ class ViewerController extends Controller {
*/
private function getFile($userId, $fileId) {
if (empty($fileId)) {
return [NULL, $this->l10n->t("FileId is empty")];
return [NULL, $this->l10n->t("FileId is empty.")];
}
if ($userId !== NULL) {
@ -159,19 +159,19 @@ class ViewerController extends Controller {
}
if (empty($files)) {
return [NULL, $this->l10n->t("File not found")];
return [NULL, $this->l10n->t("File not found.")];
}
$file = $files[0];
if (!$file->isReadable()) {
return [NULL, $this->l10n->t("You do not have enough permissions to view the file")];
return [NULL, $this->l10n->t("You do not have enough permissions to view the file.")];
}
return [$file, NULL];
}
private function getShare($token) {
if (empty($token)) {
return [NULL, $this->l10n->t("Token is empty")];
return [NULL, $this->l10n->t("Token is empty.")];
}
$share;
@ -183,13 +183,13 @@ class ViewerController extends Controller {
}
if ($share === NULL || $share === false) {
return [NULL, $this->l10n->t("You do not have enough permissions to view the file")];
return [NULL, $this->l10n->t("You do not have enough permissions to view the file.")];
}
if ($share->getPassword()
&& (!$this->session->exists("public_link_authenticated")
|| $this->session->get("public_link_authenticated") !== (string) $share->getId())) {
return [NULL, $this->l10n->t("You do not have enough permissions to view the file")];
return [NULL, $this->l10n->t("You do not have enough permissions to view the file.")];
}
return [$share, NULL];
@ -203,20 +203,20 @@ class ViewerController extends Controller {
}
if (($share->getPermissions() & Constants::PERMISSION_READ) === 0) {
return [NULL, $this->l10n->t("You do not have enough permissions to view the file")];
return [NULL, $this->l10n->t("You do not have enough permissions to view the file.")];
}
try {
$node = $share->getNode();
} catch (NotFoundException $e) {
$this->logger->error("getFileByToken error: " . $e->getMessage(), array("app" => $this->appName));
return [NULL, $this->l10n->t("File not found")];
return [NULL, $this->l10n->t("File not found.")];
}
if ($node instanceof Folder) {
$files = $node->getById($fileId);
if (empty($files)) {
return [NULL, $this->l10n->t("File not found")];
return [NULL, $this->l10n->t("File not found.")];
}
$file = $files[0];
} else {
@ -272,7 +272,7 @@ class ViewerController extends Controller {
$mime = strtolower($mime);
}
if (!in_array($mime, self::PDF_MIME_TYPES)) {
return $this->l10n->t('File %s is not a PDF file (%s)', [$file->getName(), $mime]);
return $this->l10n->t('File %s is not a PDF file (%s).', [$file->getName(), $mime]);
}
return null;
@ -453,7 +453,7 @@ class ViewerController extends Controller {
'message' => 'download: ' . $token,
'app' => $this->appName,
]);
return new JSONResponse(["message" => $this->l10n->t("Invalid token")], Http::STATUS_FORBIDDEN);
return new JSONResponse(["message" => $this->l10n->t("Invalid token.")], Http::STATUS_FORBIDDEN);
}
if ($this->userSession->isLoggedIn()) {
@ -470,7 +470,7 @@ class ViewerController extends Controller {
}
if ($this->userSession->isLoggedIn() && !$file->isReadable()) {
return new JSONResponse(["message" => $this->l10n->t("Access denied")], Http::STATUS_FORBIDDEN);
return new JSONResponse(["message" => $this->l10n->t("Access denied.")], Http::STATUS_FORBIDDEN);
}
return new DataDisplayResponse($file->getContent(), Http::STATUS_OK, [

View file

@ -50,16 +50,16 @@ See https://github.com/adobe-type-tools/cmap-resources
<div id="colorPicker">
</div>
<div id="connectingMessage">
Establishing connection, please wait...
<?php p($l->t('Establishing connection, please wait...')) ?>
</div>
<div id="connectionError">
The connection is interrupted, reconnecting...
<?php p($l->t('The connection is interrupted, reconnecting...')) ?>
</div>
<div id="downloadInProgress">
Generating combined PDF, please wait...
<?php p($l->t('Generating combined PDF, please wait...')) ?>
</div>
<div id="downloadFailed">
PDF generation failed, please try again later.
<?php p($l->t('PDF generation failed, please try again later.')) ?>
</div>
<div id="outerContainer">
@ -219,17 +219,25 @@ See https://github.com/adobe-type-tools/cmap-resources
<div id="drawMenuToolbar" class="secondaryToolbar drawMenuToolbar hidden doorHangerRight hiddenReadonly">
<div id="drawModeToolbarButtonContainer">
<button id="freehandMode" class="modeButton toolbarButton freehandMode hiddenMediumView" title="Freehand" tabindex="34" data-l10n-id="freehand" data-mode="freehand">
<span data-l10n-id="freehand_label">Freehand</span>
<button id="freehandMode" class="modeButton toolbarButton freehandMode hiddenMediumView" title="<?php p($l->t('Freehand')) ?>" tabindex="34" data-l10n-id="freehand" data-mode="freehand">
<span data-l10n-id="freehand_label">
<?php p($l->t('Freehand')) ?>
</span>
</button>
<button id="rectangleMode" class="modeButton toolbarButton rectangleMode hiddenMediumView" title="Rectangle" tabindex="34" data-l10n-id="rectangle" data-mode="rectangle">
<span data-l10n-id="rectangle_label">Rectangle</span>
<button id="rectangleMode" class="modeButton toolbarButton rectangleMode hiddenMediumView" title="<?php p($l->t('Rectangle')) ?>" tabindex="34" data-l10n-id="rectangle" data-mode="rectangle">
<span data-l10n-id="rectangle_label">
<?php p($l->t('Rectangle')) ?>
</span>
</button>
<button id="ellipseMode" class="modeButton toolbarButton ellipseMode hiddenMediumView" title="Ellipse" tabindex="34" data-l10n-id="ellipse" data-mode="ellipse">
<span data-l10n-id="ellipse_label">Ellipse</span>
<button id="ellipseMode" class="modeButton toolbarButton ellipseMode hiddenMediumView" title="<?php p($l->t('Ellipse')) ?>" tabindex="34" data-l10n-id="ellipse" data-mode="ellipse">
<span data-l10n-id="ellipse_label">
<?php p($l->t('Ellipse')) ?>
</span>
</button>
<button id="lineMode" class="modeButton toolbarButton lineMode hiddenMediumView" title="Line" tabindex="34" data-l10n-id="line" data-mode="line">
<span data-l10n-id="line_label">Line</span>
<button id="lineMode" class="modeButton toolbarButton lineMode hiddenMediumView" title="<?php p($l->t('Line')) ?>" tabindex="34" data-l10n-id="line" data-mode="line">
<span data-l10n-id="line_label">
<?php p($l->t('Line')) ?>
</span>
</button>
</div>
@ -278,29 +286,43 @@ See https://github.com/adobe-type-tools/cmap-resources
<span data-l10n-id="bookmark_label">Current View</span>
</a>
<button id="noneMode" class="modeButton toolbarButton noneMode hiddenMediumView hiddenReadonly" title="No tool" tabindex="32" data-l10n-id="noneMode" data-mode="">
<span data-l10n-id="noneMode_label">No tool</span>
<button id="noneMode" class="modeButton toolbarButton noneMode hiddenMediumView hiddenReadonly" title="<?php p($l->t('No tool')) ?>" tabindex="32" data-l10n-id="noneMode" data-mode="">
<span data-l10n-id="noneMode_label">
<?php p($l->t('No tool')); ?>
</span>
</button>
<button id="selectMode" class="modeButton toolbarButton selectMode hiddenMediumView hiddenReadonly" title="Select" tabindex="32" data-l10n-id="selectMode" data-mode="select">
<span data-l10n-id="selectMode_label">Select</span>
<button id="selectMode" class="modeButton toolbarButton selectMode hiddenMediumView hiddenReadonly" title="<?php p($l->t('Select')) ?>" tabindex="32" data-l10n-id="selectMode" data-mode="select">
<span data-l10n-id="selectMode_label">
<?php p($l->t('Select')); ?>
</span>
</button>
<button id="pointerMode" class="modeButton toolbarButton pointerMode hiddenMediumView hiddenReadonly" title="Pointer" tabindex="33" data-l10n-id="pointer" data-mode="pointer">
<span data-l10n-id="pointer_label">Pointer</span>
<button id="pointerMode" class="modeButton toolbarButton pointerMode hiddenMediumView hiddenReadonly" title="<?php p($l->t('Pointer')); ?>" tabindex="33" data-l10n-id="pointer" data-mode="pointer">
<span data-l10n-id="pointer_label">
<?php p($l->t('Pointer')) ?>
</span>
</button>
<button id="drawModeToolbar" class="toolbarButton drawMode freehandMode toggle hiddenReadonly" title="Draw mode" tabindex="36" data-l10n-id="draw_mode">
<span data-l10n-id="tools_label">Draw mode</span>
<button id="drawModeToolbar" class="toolbarButton drawMode freehandMode toggle hiddenReadonly" title="<?php p($l->t('Draw mode')) ?>" tabindex="36" data-l10n-id="draw_mode">
<span data-l10n-id="tools_label">
<?php p($l->t('Draw mode')); ?>
</span>
<span class="dropdown"></span>
</button>
<button id="colorMode" class="modeButton toolbarButton colorMode hiddenMediumView hiddenReadonly" title="Select color" tabindex="35" data-l10n-id="color" data-mode="color">
<span data-l10n-id="color_label">Select color</span>
<button id="colorMode" class="modeButton toolbarButton colorMode hiddenMediumView hiddenReadonly" title="<?php p($l->t('Select color')) ?>" tabindex="35" data-l10n-id="color" data-mode="color">
<span data-l10n-id="color_label">
<?php p($l->t('Select color')) ?>
</span>
</button>
<button id="downloadPdf" class="toolbarButton download hiddenMediumView" title="Download" tabindex="36" data-l10n-id="download">
<span data-l10n-id="download_label">Download</span>
<button id="downloadPdf" class="toolbarButton download hiddenMediumView" title="<?php p($l->t('Download')) ?>" tabindex="36">
<span>
<?php p($l->t('Download')) ?>
</span>
</button>
<button id="secondaryToolbarClose" class="toolbarButton close" title="Close" tabindex="37" data-l10n-id="Close">
<span data-l10n-id="close_label">Close</span>
<button id="secondaryToolbarClose" class="toolbarButton close" title="<?php p($l->t('Close')) ?>" tabindex="37" data-l10n-id="Close">
<span data-l10n-id="close_label">
<?php p($l->t('Close')) ?>
</span>
</button>
<div class="verticalToolbarSeparator hiddenSmallView"></div>

View file

@ -0,0 +1,166 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Nextcloud package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Nextcloud 3.14159\n"
"Report-Msgid-Bugs-To: translations\\@example.com\n"
"POT-Creation-Date: 2021-12-07 16:40+0100\n"
"PO-Revision-Date: 2021-12-07 16:43+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/Controller/ViewerController.php:151
msgid "FileId is empty."
msgstr "Keine FileId übergeben."
#: lib/Controller/ViewerController.php:162
#: lib/Controller/ViewerController.php:213
#: lib/Controller/ViewerController.php:219
msgid "File not found."
msgstr "Datei wurde nicht gefunden."
#: lib/Controller/ViewerController.php:167
#: lib/Controller/ViewerController.php:186
#: lib/Controller/ViewerController.php:192
#: lib/Controller/ViewerController.php:206
msgid "You do not have enough permissions to view the file."
msgstr "Sie haben keine ausreichenden Berechtigungen, um die Datei zu öffnen."
#: lib/Controller/ViewerController.php:174
msgid "Token is empty."
msgstr "Kein Token übergeben."
#: lib/Controller/ViewerController.php:275
#, php-format
msgid "File %s is not a PDF file (%s)."
msgstr "Datei %s ist kein PDF Dokument (%s)."
#: lib/Controller/ViewerController.php:312
msgid "No backend configured."
msgstr "Kein Backend konfiguriert."
#: lib/Controller/ViewerController.php:456
msgid "Invalid token."
msgstr "Ungültiger Token."
#: lib/Controller/ViewerController.php:473
msgid "Access denied."
msgstr "Zugriff verweigert."
#: lib/Settings/Admin/Section.php:77 specialAppInfoFakeDummyForL10nScript.php:2
#: templates/settings/admin/backend.php:9
msgid "PDF Annotations"
msgstr "PDF Annotationen"
#: specialAppInfoFakeDummyForL10nScript.php:3
msgid "Annotate PDF documents"
msgstr "PDF Dokumente annotieren"
#: specialAppInfoFakeDummyForL10nScript.php:4
msgid ""
"PDF annotations for Nextcloud\n"
"\n"
"Annotate any PDF document collaboratively inside Nextcloud. Select \"Annotate"
"\" from the context menu of PDF files to open the annotation mode.\n"
"\n"
"Requires a separate nodejs server running on the backend to distribute the "
"signaling messages between clients.\n"
"The server is available on [GitHub](https://github.com/strukturag/pdfdraw/"
"tree/master/server)."
msgstr ""
#: src/loader.js:42 src/loader.js:96
msgid "Annotate"
msgstr "Annotieren"
#: src/loader.js:105
msgid "Open"
msgstr "Öffnen"
#: templates/settings/admin/backend.php:11
#: templates/settings/admin/backend.php:13
msgid "Backend server"
msgstr "Backend-Server"
#: templates/settings/admin/backend.php:13
msgid "https://server.domain.invalid/path/"
msgstr ""
#: templates/settings/admin/backend.php:14
#: templates/settings/admin/backend.php:20
msgid "Saved"
msgstr "Gespeichert"
#: templates/settings/admin/backend.php:17
#: templates/settings/admin/backend.php:19
msgid "Shared secret"
msgstr "Geteiltes Geheimnis"
#: templates/viewer.php:53
msgid "Establishing connection, please wait..."
msgstr "Verbindung wird hergestellt, bitte warten..."
#: templates/viewer.php:56
msgid "The connection is interrupted, reconnecting..."
msgstr "Die Verbindung ist unterbrochen, verbinde neu..."
#: templates/viewer.php:59
msgid "Generating combined PDF, please wait..."
msgstr "Zusammengefügtes PDF wird erstellt, bitte warten..."
#: templates/viewer.php:62
msgid "PDF generation failed, please try again later."
msgstr "PDF Erzeugung fehlgeschlagen, bitte versuchen Sie es später nochmal."
#: templates/viewer.php:222 templates/viewer.php:224
msgid "Freehand"
msgstr "Freihand"
#: templates/viewer.php:227 templates/viewer.php:229
msgid "Rectangle"
msgstr "Rechteck"
#: templates/viewer.php:232 templates/viewer.php:234
msgid "Ellipse"
msgstr "Ellipse"
#: templates/viewer.php:237 templates/viewer.php:239
msgid "Line"
msgstr "Linie"
#: templates/viewer.php:289 templates/viewer.php:291
msgid "No tool"
msgstr "Nichts wählen"
#: templates/viewer.php:294 templates/viewer.php:296
msgid "Select"
msgstr "Auswählen"
#: templates/viewer.php:299 templates/viewer.php:301
msgid "Pointer"
msgstr "Zeiger"
#: templates/viewer.php:305 templates/viewer.php:307
msgid "Draw mode"
msgstr "Zeichenmodus"
#: templates/viewer.php:312 templates/viewer.php:314
msgid "Select color"
msgstr "Farbe wählen"
#: templates/viewer.php:317 templates/viewer.php:319
msgid "Download"
msgstr "Herunterladen"
#: templates/viewer.php:322 templates/viewer.php:324
msgid "Close"
msgstr "Schließen"

View file

@ -0,0 +1,178 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Nextcloud package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Nextcloud 3.14159\n"
"Report-Msgid-Bugs-To: translations\\@example.com\n"
"POT-Creation-Date: 2021-12-07 16:43+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: lib/Controller/ViewerController.php:151
msgid "FileId is empty."
msgstr ""
#: lib/Controller/ViewerController.php:162
#: lib/Controller/ViewerController.php:213
#: lib/Controller/ViewerController.php:219
msgid "File not found."
msgstr ""
#: lib/Controller/ViewerController.php:167
#: lib/Controller/ViewerController.php:186
#: lib/Controller/ViewerController.php:192
#: lib/Controller/ViewerController.php:206
msgid "You do not have enough permissions to view the file."
msgstr ""
#: lib/Controller/ViewerController.php:174
msgid "Token is empty."
msgstr ""
#: lib/Controller/ViewerController.php:275
#, php-format
msgid "File %s is not a PDF file (%s)."
msgstr ""
#: lib/Controller/ViewerController.php:312
msgid "No backend configured."
msgstr ""
#: lib/Controller/ViewerController.php:456
msgid "Invalid token."
msgstr ""
#: lib/Controller/ViewerController.php:473
msgid "Access denied."
msgstr ""
#: lib/Settings/Admin/Section.php:77
#: specialAppInfoFakeDummyForL10nScript.php:2
#: templates/settings/admin/backend.php:9
msgid "PDF Annotations"
msgstr ""
#: specialAppInfoFakeDummyForL10nScript.php:3
msgid "Annotate PDF documents"
msgstr ""
#: specialAppInfoFakeDummyForL10nScript.php:4
msgid ""
"PDF annotations for Nextcloud\n"
"\n"
"Annotate any PDF document collaboratively inside Nextcloud. Select \"Annotate"
"\" from the context menu of PDF files to open the annotation mode.\n"
"\n"
"Requires a separate nodejs server running on the backend to distribute the "
"signaling messages between clients.\n"
"The server is available on [GitHub](https://github.com/strukturag/pdfdraw/"
"tree/master/server)."
msgstr ""
#: src/loader.js:42
#: src/loader.js:96
msgid "Annotate"
msgstr ""
#: src/loader.js:105
msgid "Open"
msgstr ""
#: templates/settings/admin/backend.php:11
#: templates/settings/admin/backend.php:13
msgid "Backend server"
msgstr ""
#: templates/settings/admin/backend.php:13
msgid "https://server.domain.invalid/path/"
msgstr ""
#: templates/settings/admin/backend.php:14
#: templates/settings/admin/backend.php:20
msgid "Saved"
msgstr ""
#: templates/settings/admin/backend.php:17
#: templates/settings/admin/backend.php:19
msgid "Shared secret"
msgstr ""
#: templates/viewer.php:53
msgid "Establishing connection, please wait..."
msgstr ""
#: templates/viewer.php:56
msgid "The connection is interrupted, reconnecting..."
msgstr ""
#: templates/viewer.php:59
msgid "Generating combined PDF, please wait..."
msgstr ""
#: templates/viewer.php:62
msgid "PDF generation failed, please try again later."
msgstr ""
#: templates/viewer.php:222
#: templates/viewer.php:224
msgid "Freehand"
msgstr ""
#: templates/viewer.php:227
#: templates/viewer.php:229
msgid "Rectangle"
msgstr ""
#: templates/viewer.php:232
#: templates/viewer.php:234
msgid "Ellipse"
msgstr ""
#: templates/viewer.php:237
#: templates/viewer.php:239
msgid "Line"
msgstr ""
#: templates/viewer.php:289
#: templates/viewer.php:291
msgid "No tool"
msgstr ""
#: templates/viewer.php:294
#: templates/viewer.php:296
msgid "Select"
msgstr ""
#: templates/viewer.php:299
#: templates/viewer.php:301
msgid "Pointer"
msgstr ""
#: templates/viewer.php:305
#: templates/viewer.php:307
msgid "Draw mode"
msgstr ""
#: templates/viewer.php:312
#: templates/viewer.php:314
msgid "Select color"
msgstr ""
#: templates/viewer.php:317
#: templates/viewer.php:319
msgid "Download"
msgstr ""
#: templates/viewer.php:322
#: templates/viewer.php:324
msgid "Close"
msgstr ""