-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathLokaliseProviderFactory.php
59 lines (49 loc) · 1.81 KB
/
LokaliseProviderFactory.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Translation\Bridge\Lokalise;
use Psr\Log\LoggerInterface;
use Symfony\Component\Translation\Exception\UnsupportedSchemeException;
use Symfony\Component\Translation\Loader\LoaderInterface;
use Symfony\Component\Translation\Provider\AbstractProviderFactory;
use Symfony\Component\Translation\Provider\Dsn;
use Symfony\Contracts\HttpClient\HttpClientInterface;
/**
* @author Mathieu Santostefano <[email protected]>
*/
final class LokaliseProviderFactory extends AbstractProviderFactory
{
private const HOST = 'api.lokalise.com';
public function __construct(
private HttpClientInterface $client,
private LoggerInterface $logger,
private string $defaultLocale,
private LoaderInterface $loader,
) {
}
public function create(Dsn $dsn): LokaliseProvider
{
if ('lokalise' !== $dsn->getScheme()) {
throw new UnsupportedSchemeException($dsn, 'lokalise', $this->getSupportedSchemes());
}
$endpoint = 'default' === $dsn->getHost() ? self::HOST : $dsn->getHost();
$endpoint .= $dsn->getPort() ? ':'.$dsn->getPort() : '';
$client = $this->client->withOptions([
'base_uri' => 'https://'.$endpoint.'/api2/projects/'.$this->getUser($dsn).'/',
'headers' => [
'X-Api-Token' => $this->getPassword($dsn),
],
]);
return new LokaliseProvider($client, $this->loader, $this->logger, $this->defaultLocale, $endpoint);
}
protected function getSupportedSchemes(): array
{
return ['lokalise'];
}
}