diff options
author | Julius Härtl <jus@bitgrid.net> | 2023-02-07 14:13:04 +0100 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2023-02-27 16:52:03 +0100 |
commit | 3e6329838158892e3b89c7e5116fa313c282a8a1 (patch) | |
tree | 0e55e55fc3053b1263cf3a39fdfa25665fe3388e /core | |
parent | 0d67fc23f4077e7b06a01bc519957f3f13d95f10 (diff) | |
download | nextcloud-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.php | 66 | ||||
-rw-r--r-- | core/routes.php | 2 |
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'], ], ]); |