Ver Fonte

Translate the API information page (#7922)

Closes #6222
Translate the `api/index.php` page

* Update app/i18n/pl/api.php

Co-authored-by: Inverle <inverle@proton.me>

* Update app/i18n/de/api.php

Co-authored-by: maTh <1645099+math-GH@users.noreply.github.com>

* i18n: fr
* <kbd>

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>

---------

Co-authored-by: Inverle <inverle@proton.me>
Co-authored-by: maTh <1645099+math-GH@users.noreply.github.com>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Alexis Degrugillier há 6 meses atrás
pai
commit
a1411c7f2c

+ 33 - 0
app/i18n/cs/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/de/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'API-Adresse:',
+		'output' => array(
+			'encoding-support' => '⚠️ WARNUNG: Kein <code>%2F</code> support, Einige Clients/Apps funktionieren ggf. nicht!',
+			'invalid-configuration' => '⚠️ WARNUNG: Die Base URL in ./data/config.php könnte ungültig sein',
+			'pass' => '✔️ OK',
+			'unknown-error' => '❌ ',	// IGNORE
+		),
+		'test' => array(
+			'fever' => 'Prüfung der Fever API Einstellungen:',
+			'greader' => 'Prüfung der Google Reader API Einstellungen:',
+		),
+		'title' => array(
+			'_' => 'FreshRSS API-Endpoints',
+			'extension' => 'API für Erweiterungen',
+			'fever' => 'Fever kompatible API',
+			'greader' => 'Google Reader kompatible API',
+		),
+	),
+);

+ 33 - 0
app/i18n/el/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/en-us/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// IGNORE
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// IGNORE
+			'greader' => 'Google Reader API configuration test:',	// IGNORE
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// IGNORE
+			'extension' => 'API for extensions',	// IGNORE
+			'fever' => 'Fever compatible API',	// IGNORE
+			'greader' => 'Google Reader compatible API',	// IGNORE
+		),
+	),
+);

+ 33 - 0
app/i18n/en/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',
+			'greader' => 'Google Reader API configuration test:',
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',
+			'extension' => 'API for extensions',
+			'fever' => 'Fever compatible API',
+			'greader' => 'Google Reader compatible API',
+		),
+	),
+);

+ 33 - 0
app/i18n/es/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/fa/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/fi/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/fr/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Adresse de votre API :',
+		'output' => array(
+			'encoding-support' => '⚠️ Avertissement : pas de support <code>%2F</code> ; certains clients pourraient ne pas fonctionner !',
+			'invalid-configuration' => '⚠️ Avertissement : <code>base_url</code> probablement invalide dans <kbd>./data/config.php</kbd>',
+			'pass' => '✔️ Succès',
+			'unknown-error' => '❌ ',	// IGNORE
+		),
+		'test' => array(
+			'fever' => 'Test de configuration de l’API Fever :',
+			'greader' => 'Test de configuration de l’API Google Reader :',
+		),
+		'title' => array(
+			'_' => 'API de FreshRSS',
+			'extension' => 'API des extensions',
+			'fever' => 'API compatible avec l’API Fever',
+			'greader' => 'API compatible avec l’API Google Reader',
+		),
+	),
+);

+ 33 - 0
app/i18n/he/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/hu/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/id/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/it/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/ja/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/ko/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/lv/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/nl/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/oc/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/pl/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Twój adres API:',
+		'output' => array(
+			'encoding-support' => '⚠️ UWAGA: brak wsparcia dla <code>%2F</code>, niektóre aplikacje mogą nie działać!',
+			'invalid-configuration' => '⚠️ UWAGA: Prawdopodobnie nieprawidłowy bazowy URL w ./data/config.php',
+			'pass' => '✔️ OK',
+			'unknown-error' => '❌ ',	// IGNORE
+		),
+		'test' => array(
+			'fever' => 'Test konfiguracji Fever API:',
+			'greader' => 'Test konfiguracji Google Reader API:',
+		),
+		'title' => array(
+			'_' => 'Endpointy API FreshRSS',
+			'extension' => 'API dla rozszerzeń',
+			'fever' => 'API kompatybilne z Fever',
+			'greader' => 'API kompatybilne z Google Reader',
+		),
+	),
+);

+ 33 - 0
app/i18n/pt-br/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/pt-pt/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/ru/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/sk/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/tr/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/zh-cn/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 33 - 0
app/i18n/zh-tw/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its   */
+/* state. When there is no comment, it means the entry is fully translated.   */
+/* The recognized comments are (comment matching is case-insensitive):        */
+/*   + TODO: the entry has never been translated.                             */
+/*   + DIRTY: the entry has been translated but needs to be updated.          */
+/*   + IGNORE: the entry does not need to be translated.                      */
+/* When a comment is not recognized, it is discarded.                         */
+/******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Your API address:',	// TODO
+		'output' => array(
+			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
+			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
+			'pass' => '✔️ PASS',	// TODO
+			'unknown-error' => '❌ ',	// TODO
+		),
+		'test' => array(
+			'fever' => 'Fever API configuration test:',	// TODO
+			'greader' => 'Google Reader API configuration test:',	// TODO
+		),
+		'title' => array(
+			'_' => 'FreshRSS API endpoints',	// TODO
+			'extension' => 'API for extensions',	// TODO
+			'fever' => 'Fever compatible API',	// TODO
+			'greader' => 'Google Reader compatible API',	// TODO
+		),
+	),
+);

+ 1 - 1
docs/i18n/flags/gen/el.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="darkred" />
-		<text x="34" y="14">🇬🇷 23%</text>
+		<text x="34" y="14">🇬🇷 22%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/en-us.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="green" />
-		<text x="34" y="14">🇺🇸 100%</text>
+		<text x="34" y="14">🇺🇸 99%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/es.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="green" />
-		<text x="34" y="14">🇪🇸 93%</text>
+		<text x="34" y="14">🇪🇸 92%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/fa.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="green" />
-		<text x="34" y="14">🇮🇷 99%</text>
+		<text x="34" y="14">🇮🇷 98%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/fi.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="green" />
-		<text x="34" y="14">🇫🇮 93%</text>
+		<text x="34" y="14">🇫🇮 92%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/he.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="darkred" />
-		<text x="34" y="14">🇮🇱 46%</text>
+		<text x="34" y="14">🇮🇱 45%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/hu.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="green" />
-		<text x="34" y="14">🇭🇺 97%</text>
+		<text x="34" y="14">🇭🇺 96%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/id.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="green" />
-		<text x="34" y="14">🇮🇩 98%</text>
+		<text x="34" y="14">🇮🇩 97%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/it.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="green" />
-		<text x="34" y="14">🇮🇹 98%</text>
+		<text x="34" y="14">🇮🇹 97%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/ja.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="green" />
-		<text x="34" y="14">🇯🇵 96%</text>
+		<text x="34" y="14">🇯🇵 95%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/lv.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="gold" />
-		<text x="34" y="14">🇱🇻 83%</text>
+		<text x="34" y="14">🇱🇻 82%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/nl.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="green" />
-		<text x="34" y="14">🇳🇱 91%</text>
+		<text x="34" y="14">🇳🇱 90%</text>
 	</g>
 </svg>

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
docs/i18n/flags/gen/oc.svg


+ 1 - 1
docs/i18n/flags/gen/pt-br.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="gold" />
-		<text x="34" y="14">🇧🇷 89%</text>
+		<text x="34" y="14">🇧🇷 88%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/pt-pt.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="gold" />
-		<text x="34" y="14">🇵🇹 89%</text>
+		<text x="34" y="14">🇵🇹 88%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/sk.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="gold" />
-		<text x="34" y="14">🇸🇰 89%</text>
+		<text x="34" y="14">🇸🇰 88%</text>
 	</g>
 </svg>

+ 1 - 1
docs/i18n/flags/gen/tr.svg

@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
 	<g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
 		<rect rx="3" width="70" height="20" fill="green" />
-		<text x="34" y="14">🇹🇷 98%</text>
+		<text x="34" y="14">🇹🇷 97%</text>
 	</g>
 </svg>

+ 32 - 26
p/api/index.php

@@ -1,52 +1,58 @@
 <?php
 	declare(strict_types=1);
+	require dirname(__DIR__, 2) . '/constants.php';
+	require LIB_PATH . '/lib_rss.php';	//Includes class autoloader
 	header("Content-Security-Policy: default-src 'self'; frame-ancestors 'none'");
 	header('X-Content-Type-Options: nosniff');
+
+	FreshRSS_Context::initSystem();
+	Minz_Translate::init(Minz_Translate::getLanguage(null, Minz_Request::getPreferredLanguages(), null));
 ?>
 <!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="en-GB">
 <head>
 <meta charset="UTF-8" />
-<title>FreshRSS API endpoints</title>
+<title><?= _t('api.information.title') ?></title>
 <meta name="robots" content="noindex" />
 <link rel="start" href="../i/" />
 <script src="../scripts/api.js" defer="defer"></script>
-<script id="jsonVars" type="application/json">
-<?php
-require dirname(__DIR__, 2) . '/constants.php';
-require LIB_PATH . '/lib_rss.php';	//Includes class autoloader
-FreshRSS_Context::initSystem();
-echo json_encode([
-	'greader' => Minz_Url::display('/api/greader.php', 'php', true),
-	'fever' => Minz_Url::display('/api/fever.php', 'php', true),
-]);
-?>
-</script>
 </head>
 
 <body>
-<h1>FreshRSS API endpoints</h1>
+<h1><?= _t('api.information.title') ?></h1>
 
-<h2>Google Reader compatible API</h2>
+<h2><?= _t('api.information.title.greader') ?></h2>
 <dl>
-<dt>Your API address:</dt>
-<dd><?= Minz_Url::display('/api/greader.php', 'html', true) ?></dd>
-<dt>Google Reader API configuration test:</dt>
-<dd id="greaderOutput">?</dd>
+<dt><?= _t('api.information.address') ?>
+</dt>
+<dd><kbd><?= Minz_Url::display('/api/greader.php', 'html', true) ?></kbd></dd>
+<dt><?= _t('api.information.test.greader') ?></dt>
+<dd id="greaderOutput"
+	data-api-url="<?= Minz_Url::display('/api/greader.php', 'php', true) ?>"
+	data-i18n-pass="<?= _t('api.information.output.pass') ?>"
+	data-i18n-encoding-support="<?= _t('api.information.output.encoding-support') ?>"
+	data-i18n-invalid-configuration="<?= _t('api.information.output.invalid-configuration') ?>"
+	data-i18n-unknown-error="<?= _t('api.information.output.unknown-error') ?>"
+>?</dd>
 </dl>
 
-<h2>Fever compatible API</h2>
+<h2><?= _t('api.information.title.fever') ?></h2>
 <dl>
-<dt>Your API address:</dt>
-<dd><?= Minz_Url::display('/api/fever.php', 'html', true) ?></dd>
-<dt>Fever API configuration test:</dt>
-<dd id="feverOutput">?</dd>
+<dt><?= _t('api.information.address') ?></dt>
+<dd><kbd><?= Minz_Url::display('/api/fever.php', 'html', true) ?></kbd></dd>
+<dt><?= _t('api.information.test.fever') ?></dt>
+<dd id="feverOutput"
+	data-api-url="<?= Minz_Url::display('/api/fever.php', 'php', true) ?>"
+	data-i18n-pass="<?= _t('api.information.output.pass') ?>"
+	data-i18n-invalid-configuration="<?= _t('api.information.output.invalid-configuration') ?>"
+	data-i18n-unknown-error="<?= _t('api.information.output.unknown-error') ?>"
+>?</dd>
 </dl>
 
-<h2>API for extensions</h2>
+<h2><?= _t('api.information.title.extension') ?></h2>
 <dl>
-<dt>Your API address:</dt>
-<dd><?= Minz_Url::display('/api/misc.php/Extension%20name/', 'html', true) ?></dd>
+<dt><?= _t('api.information.address') ?></dt>
+<dd><kbd><?= Minz_Url::display('/api/misc.php/Extension%20name/', 'html', true) ?></kbd></dd>
 </dl>
 
 </body>

+ 72 - 42
p/scripts/api.js

@@ -1,7 +1,7 @@
 // @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0
 'use strict';
 
-function check(url, next) {
+const check = function (url, next) {
 	if (!url || !next) {
 		return;
 	}
@@ -19,45 +19,75 @@ function check(url, next) {
 		}
 	};
 	req.send();
-}
-
-const jsonVars = JSON.parse(document.getElementById('jsonVars').innerHTML);
-
-check(jsonVars.greader + '/check/compatibility', function next(result1) {
-	const greaderOutput = document.getElementById('greaderOutput');
-	if (result1 === 'PASS') {
-		greaderOutput.innerHTML = '✔️ ' + result1;
-	} else {
-		check(jsonVars.greader + '/check%2Fcompatibility', function next(result2) {
-			if (result2 === 'PASS') {
-				greaderOutput.innerHTML = '⚠️ WARN: no <code>%2F</code> support, so some clients will not work!';
-			} else {
-				check('./greader.php/check/compatibility', function next(result3) {
-					if (result3 === 'PASS') {
-						greaderOutput.innerHTML = '⚠️ WARN: Probable invalid base URL in ./data/config.php';
-					} else {
-						greaderOutput.innerHTML = '❌ ' + result1;
-					}
-				});
-			}
-		});
-	}
-});
-
-check(jsonVars.fever + '?api', function next(result1) {
-	const feverOutput = document.getElementById('feverOutput');
-	try {
-		JSON.parse(result1);
-		feverOutput.innerHTML = '✔️ PASS';
-	} catch (ex) {
-		check('./fever.php?api', function next(result2) {
-			try {
-				JSON.parse(result2);
-				feverOutput.innerHTML = '⚠️ WARN: Probable invalid base URL in ./data/config.php';
-			} catch (ex) {
-				feverOutput.innerHTML = '❌ ' + result1;
-			}
-		});
-	}
-});
+};
+
+const pass = function (output) {
+	output.innerHTML = output.dataset.i18nPass;
+};
+
+const encodingSupport = function (output) {
+	output.innerHTML = output.dataset.i18nEncodingSupport;
+};
+
+const invalidConfiguration = function (output) {
+	output.innerHTML = output.dataset.i18nInvalidConfiguration;
+};
+
+const unknownError = function (output, message) {
+	output.innerHTML = output.dataset.i18nUnknownError + message;
+};
+
+const checkGReaderAPI = function () {
+	const output = document.getElementById('greaderOutput');
+	const apiUrl = output.dataset.apiUrl;
+
+	check(apiUrl + '/check/compatibility', function next(result1) {
+		if (result1 === 'PASS') {
+			pass(output);
+		} else {
+			check(apiUrl + '/check%2Fcompatibility', function next(result2) {
+				if (result2 === 'PASS') {
+					encodingSupport(output);
+				} else {
+					check('./greader.php/check/compatibility', function next(result3) {
+						if (result3 === 'PASS') {
+							invalidConfiguration(output);
+						} else {
+							unknownError(output, result1);
+						}
+					});
+				}
+			});
+		}
+	});
+};
+
+const checkFeverAPI = function () {
+	const output = document.getElementById('feverOutput');
+	const apiUrl = output.dataset.apiUrl;
+
+	check(apiUrl + '?api', function next(result1) {
+		try {
+			JSON.parse(result1);
+			pass(output);
+		} catch (ex) {
+			check('./fever.php?api', function next(result2) {
+				try {
+					JSON.parse(result2);
+					invalidConfiguration(output);
+				} catch (ex) {
+					unknownError(output, result1);
+				}
+			});
+		}
+	});
+};
+
+/**
+ * The API tests are done this way to simulate in a more accurate manner
+ * outside requests. Since the APIs are used by third-party tools, they
+ * cannot interact at the server level.
+ */
+checkGReaderAPI();
+checkFeverAPI();
 // @license-end

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff