summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2023-02-07 14:13:04 +0100
committerJulius Härtl <jus@bitgrid.net>2023-02-27 16:52:03 +0100
commit3e6329838158892e3b89c7e5116fa313c282a8a1 (patch)
tree0e55e55fc3053b1263cf3a39fdfa25665fe3388e /core
parent0d67fc23f4077e7b06a01bc519957f3f13d95f10 (diff)
downloadnextcloud-server-3e6329838158892e3b89c7e5116fa313c282a8a1.tar.gz
nextcloud-server-3e6329838158892e3b89c7e5116fa313c282a8a1.zip
feat(translations): Add translation provider API
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'core')
-rw-r--r--core/Controller/TranslationApiController.php66
-rw-r--r--core/routes.php2
2 files changed, 68 insertions, 0 deletions
diff --git a/core/Controller/TranslationApiController.php b/core/Controller/TranslationApiController.php
new file mode 100644
index 00000000000..4927b7a2be5
--- /dev/null
+++ b/core/Controller/TranslationApiController.php
@@ -0,0 +1,66 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>
+ *
+ * @author Julius Härtl <jus@bitgrid.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+namespace OC\Core\Controller;
+
+use InvalidArgumentException;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\IRequest;
+use OCP\PreConditionNotMetException;
+use OCP\Translation\ITranslationManager;
+use RuntimeException;
+
+class TranslationApiController extends \OCP\AppFramework\OCSController {
+ private ITranslationManager $translationManager;
+
+ public function __construct($appName, IRequest $request, ITranslationManager $translationManager) {
+ parent::__construct($appName, $request);
+
+ $this->translationManager = $translationManager;
+ }
+
+ public function languages(): DataResponse {
+ return new DataResponse([
+ 'languages' => $this->translationManager->getLanguages(),
+ 'languageDetection' => $this->translationManager->canDetectLanguage(),
+ ]);
+ }
+
+ public function translate(string $text, ?string $fromLanguage, string $toLanguage): DataResponse {
+ try {
+ return new DataResponse([
+ 'text' => $this->translationManager->translate($text, $fromLanguage, $toLanguage)
+ ]);
+ } catch (PreConditionNotMetException) {
+ return new DataResponse(['message' => 'No translation provider available'], Http::STATUS_PRECONDITION_FAILED);
+ } catch (InvalidArgumentException) {
+ return new DataResponse(['message' => 'Could not detect language', Http::STATUS_NOT_FOUND]);
+ } catch (RuntimeException) {
+ return new DataResponse(['message' => 'Unable to translate', Http::STATUS_INTERNAL_SERVER_ERROR]);
+ }
+ }
+}
diff --git a/core/routes.php b/core/routes.php
index dcf8e4024af..0f9729e54eb 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -143,6 +143,8 @@ $application->registerRoutes($this, [
['root' => '/search', 'name' => 'UnifiedSearch#getProviders', 'url' => '/providers', 'verb' => 'GET'],
['root' => '/search', 'name' => 'UnifiedSearch#search', 'url' => '/providers/{providerId}/search', 'verb' => 'GET'],
+ ['root' => '/translation', 'name' => 'TranslationApi#languages', 'url' => '/languages', 'verb' => 'GET'],
+ ['root' => '/translation', 'name' => 'TranslationApi#translate', 'url' => '/translate', 'verb' => 'POST'],
],
]);