Improved Translation Providers

This commit is contained in:
Mathieu Santostefano 2021-05-10 14:27:24 +02:00
parent 0b66008af2
commit 84fd13ce95
No known key found for this signature in database
GPG Key ID: EB610773AF2B5B5B
7 changed files with 28 additions and 67 deletions

View File

@ -28,9 +28,7 @@ class CrowdinProviderTest extends ProviderTestCase
yield [
$this->createProvider($this->getClient()->withOptions([
'base_uri' => 'https://api.crowdin.com/api/v2/projects/1/',
'headers' => [
'Authorization' => 'Bearer API_TOKEN',
],
'auth_bearer' => 'API_TOKEN',
]), $this->getLoader(), $this->getLogger(), $this->getDefaultLocale(), 'api.crowdin.com'),
'crowdin://api.crowdin.com',
];
@ -38,9 +36,7 @@ class CrowdinProviderTest extends ProviderTestCase
yield [
$this->createProvider($this->getClient()->withOptions([
'base_uri' => 'https://domain.api.crowdin.com/api/v2/projects/1/',
'headers' => [
'Authorization' => 'Bearer API_TOKEN',
],
'auth_bearer' => 'API_TOKEN',
]), $this->getLoader(), $this->getLogger(), $this->getDefaultLocale(), 'domain.api.crowdin.com'),
'crowdin://domain.api.crowdin.com',
];
@ -48,9 +44,7 @@ class CrowdinProviderTest extends ProviderTestCase
yield [
$this->createProvider($this->getClient()->withOptions([
'base_uri' => 'https://api.crowdin.com:99/api/v2/projects/1/',
'headers' => [
'Authorization' => 'Bearer API_TOKEN',
],
'auth_bearer' => 'API_TOKEN',
]), $this->getLoader(), $this->getLogger(), $this->getDefaultLocale(), 'api.crowdin.com:99'),
'crowdin://api.crowdin.com:99',
];
@ -146,9 +140,7 @@ XLIFF;
$provider = $this->createProvider((new MockHttpClient($responses))->withOptions([
'base_uri' => 'https://api.crowdin.com/api/v2/projects/1/',
'headers' => [
'Authorization' => 'Bearer API_TOKEN',
],
'auth_bearer' => 'API_TOKEN',
]), $this->getLoader(), $this->getLogger(), $this->getDefaultLocale(), 'api.crowdin.com/api/v2/projects/1/');
$provider->write($translatorBag);
@ -219,9 +211,7 @@ XLIFF;
$provider = $this->createProvider((new MockHttpClient($responses))->withOptions([
'base_uri' => 'https://api.crowdin.com/api/v2/projects/1/',
'headers' => [
'Authorization' => 'Bearer API_TOKEN',
],
'auth_bearer' => 'API_TOKEN',
]), $this->getLoader(), $this->getLogger(), $this->getDefaultLocale(), 'api.crowdin.com/api/v2/projects/1/');
$provider->write($translatorBag);
@ -325,9 +315,7 @@ XLIFF;
$provider = $this->createProvider((new MockHttpClient($responses))->withOptions([
'base_uri' => 'https://api.crowdin.com/api/v2/projects/1/',
'headers' => [
'Authorization' => 'Bearer API_TOKEN',
],
'auth_bearer' => 'API_TOKEN',
]), $this->getLoader(), $this->getLogger(), $this->getDefaultLocale(), 'api.crowdin.com/api/v2/projects/1/');
$provider->write($translatorBag);
@ -374,9 +362,7 @@ XLIFF;
$crowdinProvider = $this->createProvider((new MockHttpClient($responses))->withOptions([
'base_uri' => 'https://api.crowdin.com/api/v2/projects/1/',
'headers' => [
'Authorization' => 'Bearer API_TOKEN',
],
'auth_bearer' => 'API_TOKEN',
]), $this->getLoader(), $this->getLogger(), $this->getDefaultLocale(), 'api.crowdin.com/api/v2');
$translatorBag = $crowdinProvider->read([$domain], [$locale]);
@ -459,9 +445,7 @@ XLIFF
$crowdinProvider = $this->createProvider((new MockHttpClient($responses))->withOptions([
'base_uri' => 'https://api.crowdin.com/api/v2/projects/1/',
'headers' => [
'Authorization' => 'Bearer API_TOKEN',
],
'auth_bearer' => 'API_TOKEN',
]), $this->getLoader(), $this->getLogger(), $this->getDefaultLocale(), 'api.crowdin.com/api/v2');
$translatorBag = $crowdinProvider->read([$domain], [$locale]);
@ -567,9 +551,7 @@ XLIFF
$provider = $this->createProvider((new MockHttpClient($responses))->withOptions([
'base_uri' => 'https://api.crowdin.com/api/v2/projects/1/',
'headers' => [
'Authorization' => 'Bearer API_TOKEN',
],
'auth_bearer' => 'API_TOKEN',
]), $this->getLoader(), $this->getLogger(), $this->getDefaultLocale(), 'api.crowdin.com/api/v2/projects/1/');
$provider->delete($translatorBag);

View File

@ -21,12 +21,10 @@
],
"require": {
"php": ">=7.2.5",
"symfony/config": "^5.3",
"symfony/http-client": "^5.3",
"symfony/translation": "^5.3"
},
"require-dev": {
"symfony/config": "^4.4|^5.2"
},
"autoload": {
"psr-4": { "Symfony\\Component\\Translation\\Bridge\\Crowdin\\": "" },
"exclude-from-classmap": [

View File

@ -18,11 +18,9 @@
"require": {
"php": ">=7.2.5",
"symfony/http-client": "^5.3",
"symfony/config": "^5.3",
"symfony/translation": "^5.3"
},
"require-dev": {
"symfony/config": "^4.4|^5.2"
},
"autoload": {
"psr-4": { "Symfony\\Component\\Translation\\Bridge\\Loco\\": "" },
"exclude-from-classmap": [

View File

@ -52,7 +52,7 @@ final class LokaliseProviderFactory extends AbstractProviderFactory
$endpoint = sprintf('%s%s', 'default' === $dsn->getHost() ? self::HOST : $dsn->getHost(), $dsn->getPort() ? ':'.$dsn->getPort() : '');
$client = $this->client->withOptions([
'base_uri' => sprintf('https://%sprojects/%s/api2/', $endpoint, $this->getUser($dsn)),
'base_uri' => 'https://'.$endpoint.'/projects/'.$this->getUser($dsn).'/api2/',
'headers' => [
'X-Api-Token' => $this->getPassword($dsn),
],

View File

@ -17,12 +17,10 @@
],
"require": {
"php": ">=7.2.5",
"symfony/config": "^5.3",
"symfony/http-client": "^5.3",
"symfony/translation": "^5.3"
},
"require-dev": {
"symfony/config": "^4.4|^5.2"
},
"autoload": {
"psr-4": { "Symfony\\Component\\Translation\\Bridge\\Lokalise\\": "" },
"exclude-from-classmap": [

View File

@ -104,25 +104,21 @@ final class PoEditorProvider implements ProviderInterface
foreach ($locales as $locale) {
foreach ($domains as $domain) {
$exportResponses[] = [
'response' => $this->client->request('POST', 'projects/export', [
'body' => [
'api_token' => $this->apiKey,
'id' => $this->projectId,
'language' => $locale,
'type' => 'xlf',
'filters' => json_encode(['translated']),
'tags' => json_encode([$domain]),
],
]),
'locale' => $locale,
'domain' => $domain,
];
$response = $this->client->request('POST', 'projects/export', [
'body' => [
'api_token' => $this->apiKey,
'id' => $this->projectId,
'language' => $locale,
'type' => 'xlf',
'filters' => json_encode(['translated']),
'tags' => json_encode([$domain]),
],
]);
$exportResponses[] = [$response, $locale, $domain];
}
}
foreach ($exportResponses as $exportResponse) {
$response = $exportResponse['response'];
foreach ($exportResponses as [$response, $locale, $domain]) {
$responseContent = $response->toArray(false);
if (200 !== $response->getStatusCode() || '200' !== (string) $responseContent['response']['code']) {
@ -131,19 +127,10 @@ final class PoEditorProvider implements ProviderInterface
}
$fileUrl = $responseContent['result']['url'];
$downloadResponses[] = [
'response' => $this->client->request('GET', $fileUrl),
'locale' => $exportResponse['locale'],
'domain' => $exportResponse['domain'],
'fileUrl' => $fileUrl,
];
$downloadResponses[] = [$this->client->request('GET', $fileUrl), $locale, $domain, $fileUrl];
}
foreach ($downloadResponses as $downloadResponse) {
$response = $downloadResponse['response'];
$locale = $downloadResponse['locale'];
$domain = $downloadResponse['domain'];
$fileUrl = $downloadResponse['fileUrl'];
foreach ($downloadResponses as [$response, $locale, $domain, $fileUrl]) {
$responseContent = $response->getContent(false);
if (200 !== $response->getStatusCode()) {

View File

@ -17,12 +17,10 @@
],
"require": {
"php": ">=7.2.5",
"symfony/config": "^5.3",
"symfony/http-client": "^5.3",
"symfony/translation": "^5.3"
},
"require-dev": {
"symfony/config": "^4.4|^5.2"
},
"autoload": {
"psr-4": { "Symfony\\Component\\Translation\\Bridge\\PoEditor\\": "" },
"exclude-from-classmap": [