make(Connection::class, [ 'path' => $path, 'folderId' => $config['folder_id'], 'privateKey' => $keyData['private_key'], 'keyId' => $keyData['id'], 'serviceAccountId' => $keyData['service_account_id'], ]), ); } public function __construct( private readonly Connection $connection ) { } public function translateText(string|array $text, string $targetLanguageCode, ?string $sourceLanguageCode = null): string|array { $format = 'PLAIN_TEXT'; $result = $this->translate($text, $format, $targetLanguageCode, $sourceLanguageCode); if (\is_string($text)) { return array_shift($result); } return $result; } public function translateHtml(string|array $text, string $targetLanguageCode, ?string $sourceLanguageCode = null): string|array { $format = 'HTML'; $result = $this->translate($text, $format, $targetLanguageCode, $sourceLanguageCode); if (\is_string($text)) { return array_shift($result); } return $result; } public function listLanguages(): Languages { $params = []; try { $result = $this->connection->post('languages', $params); if (! isset($result['languages'])) { $message = $result['message'] ?? 'Missing value languages in array'; throw new TranslateException($message); } $languages = new Languages(); foreach ($result['languages'] as $language) { $languages->add($language['code'], $language['name'] ?? $language['code']); } return $languages; } catch (TranslateException $e) { throw $e; } catch (\Throwable $exception) { throw new TranslateException($exception->getMessage()); } } private function translate(string|array $text, string $format, string $targetLanguageCode, ?string $sourceLanguageCode = null): array { if (\is_string($text)) { $text = [$text]; } $params = [ 'targetLanguageCode' => $targetLanguageCode, 'format' => $format, 'texts' => $text, 'speller' => true, ]; if ($sourceLanguageCode) { $params['sourceLanguageCode'] = $sourceLanguageCode; } try { $result = $this->connection->post('translate', $params); if (! isset($result['translations'])) { $message = $result['message'] ?? 'Missing value translations in array'; throw new TranslateException($message); } $translations = []; foreach ($result['translations'] as $translation) { $translations[] = $translation['text']; } return $translations; } catch (TranslateException $e) { throw $e; } catch (\Throwable $exception) { throw new TranslateException($exception->getMessage()); } } }