Skip to content

Commit

Permalink
Add injects, clean, update readme
Browse files Browse the repository at this point in the history
  • Loading branch information
jfilla committed Sep 17, 2020
1 parent 49530c0 commit fd75efc
Show file tree
Hide file tree
Showing 15 changed files with 105 additions and 111 deletions.
11 changes: 7 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ namespaceTranslator:
loaders: # namespace translations loaders
neon: Wavevision\NamespaceTranslator\Loaders\Neon
php: Wavevision\NamespaceTranslator\Loaders\TranslationClass
flatJson: Wavevision\NamespaceTranslator\Loaders\FlatJson
```
> **Note:** Refer to [Contributte docs](https://contributte.org/packages/contributte/translation.html#configuration)
> for further info about configuring `translation`.
Expand Down Expand Up @@ -74,6 +74,7 @@ There are two resource loaders included by default:

- [Neon](./src/NamespaceTranslator/Loaders/Neon.php) – loads translations from `neon` files
- [TranslationClass](./src/NamespaceTranslator/Loaders/TranslationClass.php) – loads translations from PHP classes
- [FlatJson](./src/NamespaceTranslator/Loaders/FlatJson.php) - loads translations from flat (no nesting) `json` files

Using PHP classes is useful when you want to refer to your translations using constants so changes in your resources get propagated throughout the whole project.

Expand All @@ -89,7 +90,7 @@ For exporting \ importing translations to \ from CSV or GoogleSheet (or both) up
namespaceTranslator:
transfer:
google:
. credentials: credentials.json
credentials: credentials.json
sheetId: googleSheetId
parts:
- directory: %vendorDir%/../App/AdminModule
Expand All @@ -100,13 +101,15 @@ namespaceTranslator:
filename: %vendorDir%/../temp/front-module.csv
```

run command to export translations
Set locales whitelist from [contributte/translation](https://contributte.org/packages/contributte/translation.html#configuration). Whitelist is used for creating translation columns in export.

Run command to export translations

```bash
php {bin/console} namespace-translator:export
```

update translations, then run command to import them
Update translations, then run command to import them

```bash
php {bin/console} namespace-translator:import
Expand Down
2 changes: 1 addition & 1 deletion src/NamespaceTranslator/DI/config.neon
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ services:
inject: true
parametersManager:
factory: Wavevision\NamespaceTranslator\ParametersManager
arguments: [%dirNames%, %loaders%]
arguments: [%dirNames%]
inject: true
resourceLoader:
factory: Wavevision\NamespaceTranslator\ResourceLoader
Expand Down
2 changes: 1 addition & 1 deletion src/NamespaceTranslator/DomainManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use Wavevision\DIServiceAnnotation\DIService;

/**
* @DIService(name="domainManager")
* @DIService(name="domainManager", generateInject=true)
*/
class DomainManager
{
Expand Down
21 changes: 21 additions & 0 deletions src/NamespaceTranslator/InjectContributteTranslator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php declare(strict_types = 1);

namespace Wavevision\NamespaceTranslator;

use Contributte\Translation\Translator;

trait InjectContributteTranslator
{

private Translator $contributteTranslator;

/**
* @return static
*/
public function injectContributteTranslator(Translator $contributteTranslator)
{
$this->contributteTranslator = $contributteTranslator;
return $this;
}

}
15 changes: 15 additions & 0 deletions src/NamespaceTranslator/InjectDomainManager.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php declare (strict_types = 1);

namespace Wavevision\NamespaceTranslator;

trait InjectDomainManager
{

protected DomainManager $domainManager;

public function injectDomainManager(DomainManager $domainManager): void
{
$this->domainManager = $domainManager;
}

}
15 changes: 15 additions & 0 deletions src/NamespaceTranslator/InjectResourceLoader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php declare (strict_types = 1);

namespace Wavevision\NamespaceTranslator;

trait InjectResourceLoader
{

protected ResourceLoader $resourceLoader;

public function injectResourceLoader(ResourceLoader $resourceLoader): void
{
$this->resourceLoader = $resourceLoader;
}

}
15 changes: 15 additions & 0 deletions src/NamespaceTranslator/InjectResourceManager.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php declare (strict_types = 1);

namespace Wavevision\NamespaceTranslator;

trait InjectResourceManager
{

protected ResourceManager $resourceManager;

public function injectResourceManager(ResourceManager $resourceManager): void
{
$this->resourceManager = $resourceManager;
}

}
23 changes: 3 additions & 20 deletions src/NamespaceTranslator/ParametersManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use Wavevision\DIServiceAnnotation\DIService;

/**
* @DIService(generateInject=true, name="parametersManager", params={"%dirNames%", "%loaders%"})
* @DIService(generateInject=true, name="parametersManager", params={"%dirNames%"})
*/
class ParametersManager
{
Expand All @@ -18,21 +18,12 @@ class ParametersManager
*/
private array $dirNames;

/**
* @var string[]
*/
private array $loaders;

/**
* @param string[] $dirNames
* @param string[] $loaders
*/
public function __construct(
array $dirNames,
array $loaders
) {
public function __construct(array $dirNames)
{
$this->dirNames = $dirNames;
$this->loaders = $loaders;
}

/**
Expand All @@ -43,12 +34,4 @@ public function getDirNames(): array
return $this->dirNames;
}

/**
* @return string[]
*/
public function getLoaders(): array
{
return $this->loaders;
}

}
10 changes: 4 additions & 6 deletions src/NamespaceTranslator/ResourceLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,23 @@
use Symfony\Component\Translation\MessageCatalogue;
use Wavevision\DIServiceAnnotation\DIService;
use Wavevision\NamespaceTranslator\Exceptions\InvalidState;
use Wavevision\NamespaceTranslator\Loaders\Manager;
use Wavevision\NamespaceTranslator\Loaders\InjectManager;
use Wavevision\NamespaceTranslator\Resources\Messages;

/**
* @DIService(name="resourceLoader")
* @DIService(name="resourceLoader", generateInject=true)
*/
class ResourceLoader
{

use SmartObject;
use InjectManager;

private ArrayLoader $arrayLoader;

private Manager $manager;

public function __construct(Manager $manager)
public function __construct()
{
$this->arrayLoader = new ArrayLoader();
$this->manager = $manager;
}

public function load(string $resource, string $domain): MessageCatalogue
Expand Down
33 changes: 11 additions & 22 deletions src/NamespaceTranslator/ResourceManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Wavevision\NamespaceTranslator;

use Contributte\Translation\Translator;
use Nette\SmartObject;
use Nette\Utils\Finder;
use ReflectionClass;
Expand All @@ -16,37 +15,27 @@
use Wavevision\Utils\Path;

/**
* @DIService(name="resourceManager")
* @DIService(name="resourceManager", generateInject=true)
*/
class ResourceManager
{

use SmartObject;
use InjectContributteTranslator;
use InjectManager;

private ResourceLoader $loader;
use InjectParametersManager;
use InjectResourceLoader;
use SmartObject;

/**
* @var string[]
*/
private array $namespaces = [];

private ParametersManager $pm;

/**
* @var MessageCatalogue[]
*/
private array $resources = [];

private Translator $translator;

public function __construct(ResourceLoader $loader, ParametersManager $pm, Translator $translator)
{
$this->loader = $loader;
$this->pm = $pm;
$this->translator = $translator;
}

/**
* @return Finder<SplFileInfo>|null
*/
Expand All @@ -66,8 +55,8 @@ public function findResources(string $className): ?iterable
public function loadResource(string $resource, string $domain): MessageCatalogue
{
if (!isset($this->resources[$resource])) {
$catalogue = $this->loader->load($resource, $domain);
$this->translator
$catalogue = $this->resourceLoader->load($resource, $domain);
$this->contributteTranslator
->getCatalogue($catalogue->getLocale())
->addCatalogue($catalogue);
$this->setFallback($catalogue);
Expand All @@ -93,7 +82,7 @@ private function getDirs(string $file): array
{
return array_filter(
Arrays::map(
$this->pm->getDirNames(),
$this->parametersManager->getDirNames(),
function (string $dir) use ($file): string {
return Path::join(dirname($file), $dir);
}
Expand All @@ -114,11 +103,11 @@ private function getMasks(): array

private function setFallback(MessageCatalogue $catalogue): void
{
foreach ($this->translator->getFallbackLocales() as $fallbackLocale) {
foreach ($this->contributteTranslator->getFallbackLocales() as $fallbackLocale) {
if ($catalogue->getLocale() !== $fallbackLocale) {
$this->translator
$this->contributteTranslator
->getCatalogue($catalogue->getLocale())
->addFallbackCatalogue($this->translator->getCatalogue($fallbackLocale));
->addFallbackCatalogue($this->contributteTranslator->getCatalogue($fallbackLocale));
}
}
}
Expand Down
17 changes: 5 additions & 12 deletions src/NamespaceTranslator/Translator.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,10 @@
class Translator implements ITranslator
{

use InjectContributteTranslator;
use SmartObject;

private ?string $domain;

private ContributteTranslator $translator;

public function __construct(ContributteTranslator $translator)
{
$this->domain = null;
$this->translator = $translator;
}
private ?string $domain = null;

/**
* @param Message|NotTranslate|int|int[]|string|string[] $message
Expand Down Expand Up @@ -52,7 +45,7 @@ public function translate($message, ...$parameters): string
$params = $count;
$count = null;
}
return $this->translator->translate($message, $count, $params, $domain, $locale);
return $this->contributteTranslator->translate($message, $count, $params, $domain, $locale);
}

public function getDomain(): ?string
Expand All @@ -68,7 +61,7 @@ public function setDomain(?string $domain): self

public function getTranslator(): ContributteTranslator
{
return $this->translator;
return $this->contributteTranslator;
}

public function classPrefixed(string $className): PrefixedTranslator
Expand All @@ -86,7 +79,7 @@ private function messageExists(string $message, ?string $locale): bool
if ($this->domain === null) {
return false;
}
return $this->translator
return $this->contributteTranslator
->getCatalogue($locale)
->has($message, $this->domain);
}
Expand Down
23 changes: 5 additions & 18 deletions src/NamespaceTranslator/TranslatorFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Wavevision\NamespaceTranslator;

use Contributte\Translation\Translator as ContributteTranslator;
use Nette\SmartObject;
use SplFileInfo;
use Wavevision\DIServiceAnnotation\DIService;
Expand All @@ -14,33 +13,21 @@
class TranslatorFactory
{

use InjectContributteTranslator;
use InjectDomainManager;
use InjectResourceManager;
use SmartObject;

private DomainManager $domainManager;

private ResourceManager $resourceManager;

private ContributteTranslator $translator;

/**
* @var Translator[]
*/
private array $translators = [];

public function __construct(
DomainManager $domainManager,
ResourceManager $resourceManager,
ContributteTranslator $translator
) {
$this->domainManager = $domainManager;
$this->translator = $translator;
$this->resourceManager = $resourceManager;
}

public function create(string $namespace): Translator
{
$domain = $this->domainManager->getDomain($namespace);
$translator = $this->translators[$domain] ?? new Translator($this->translator);
$translator = $this->translators[$domain] ?? (new Translator())
->injectContributteTranslator($this->contributteTranslator);
if (!$this->resourceManager->getNamespaceLoaded($namespace)) {
if ($resources = $this->resourceManager->findResources($namespace)) {
/** @var SplFileInfo $resource */
Expand Down

0 comments on commit fd75efc

Please sign in to comment.