diff --git a/config/googletranslate.php b/config/googletranslate.php index ad3b99f..0f974e0 100644 --- a/config/googletranslate.php +++ b/config/googletranslate.php @@ -4,6 +4,8 @@ /* |---------------------------------------------------------------------------------------------------- | The ISO 639-1 code of the default source language. + | + | You may as well leave an empty string '' for automatic source language detection. |---------------------------------------------------------------------------------------------------- */ 'default_source_translation' => 'en', diff --git a/src/GoogleTranslate.php b/src/GoogleTranslate.php index 27b4727..06745c0 100644 --- a/src/GoogleTranslate.php +++ b/src/GoogleTranslate.php @@ -61,23 +61,23 @@ public function translate($input, $from = null, $to = null, $format = 'text'): a { $this->validateInput($input); - $translateFrom = $from ?? config('googletranslate.default_source_translation'); + $translateFrom = $from === null ? config('googletranslate.default_source_translation') : $from; $translateTo = $to ?? config('googletranslate.default_target_translation'); - $translateFrom = $this->sanitizeLanguageCode($translateFrom); - $translateTo = $this->sanitizeLanguageCode($translateTo); - if (is_array($input)) { return $this->translateBatch($input, $translateFrom, $translateTo, $format); } + $translateFrom = $this->sanitizeLanguageCode($translateFrom, true); + $translateTo = $this->sanitizeLanguageCode($translateTo); + $response = $this ->translateClient ->translate($input, $translateFrom, $translateTo, $format); return [ 'source_text' => $input, - 'source_language_code' => $translateFrom, + 'source_language_code' => $response['source'], 'translated_text' => $response['text'], 'translated_language_code' => $translateTo ]; @@ -90,7 +90,7 @@ public function justTranslate(string $input, $from = null, $to = null): string $translateFrom = $from ?? config('googletranslate.default_source_translation'); $translateTo = $to ?? config('googletranslate.default_target_translation'); - $translateFrom = $this->sanitizeLanguageCode($translateFrom); + $translateFrom = $this->sanitizeLanguageCode($translateFrom, true); $translateTo = $this->sanitizeLanguageCode($translateTo); $response = $this @@ -102,7 +102,7 @@ public function justTranslate(string $input, $from = null, $to = null): string public function translateBatch(array $input, string $translateFrom, string $translateTo, $format = 'text'): array { - $translateFrom = $this->sanitizeLanguageCode($translateFrom); + $translateFrom = $this->sanitizeLanguageCode($translateFrom, true); $translateTo = $this->sanitizeLanguageCode($translateTo); $this->validateInput($input); @@ -114,7 +114,7 @@ public function translateBatch(array $input, string $translateFrom, string $tran foreach ($responses as $response) { $translations[] = [ 'source_text' => $response['input'], - 'source_language_code' => $translateFrom, + 'source_language_code' => $response['source'], 'translated_text' => $response['text'], 'translated_language_code' => $translateTo ]; @@ -150,8 +150,13 @@ public function unlessLanguageIs(string $languageCode, string $input, $from = nu return $input; } - public function sanitizeLanguageCode(string $languageCode) + public function sanitizeLanguageCode(string $languageCode, $allowEmptyString = false) { + // we can pass '' as source language for auto-detection + if ($allowEmptyString && $languageCode === '') { + return $languageCode; + } + $languageCode = trim(strtolower($languageCode)); if ($languageCode === 'zh-tw') {