From dc67b48c28c37d77b29b9b9ed987d0664811eddf Mon Sep 17 00:00:00 2001
From: Joas Schilling <coding@schilljs.com>
Date: Mon, 1 May 2023 15:05:43 +0200
Subject: fix(translation): Detect the language first and then ask all
 providers for translations

Signed-off-by: Joas Schilling <coding@schilljs.com>
---
 lib/private/Translation/TranslationManager.php | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

(limited to 'lib')

diff --git a/lib/private/Translation/TranslationManager.php b/lib/private/Translation/TranslationManager.php
index ec829e83255..3fded754f6a 100644
--- a/lib/private/Translation/TranslationManager.php
+++ b/lib/private/Translation/TranslationManager.php
@@ -63,15 +63,23 @@ class TranslationManager implements ITranslationManager {
 			throw new PreConditionNotMetException('No translation providers available');
 		}
 
-		foreach ($this->getProviders() as $provider) {
-			if ($fromLanguage === null && $provider instanceof IDetectLanguageProvider) {
-				$fromLanguage = $provider->detectLanguage($text);
+		if ($fromLanguage === null) {
+			foreach ($this->getProviders() as $provider) {
+				if ($provider instanceof IDetectLanguageProvider) {
+					$fromLanguage = $provider->detectLanguage($text);
+				}
+
+				if ($fromLanguage !== null) {
+					break;
+				}
 			}
 
 			if ($fromLanguage === null) {
 				throw new InvalidArgumentException('Could not detect language');
 			}
+		}
 
+		foreach ($this->getProviders() as $provider) {
 			try {
 				return $provider->translate($fromLanguage, $toLanguage, $text);
 			} catch (RuntimeException $e) {
-- 
cgit v1.2.3