Skip to content

Commit

Permalink
Allow translation integer keys
Browse files Browse the repository at this point in the history
  • Loading branch information
rozsival committed Sep 15, 2020
1 parent d41c9d0 commit 3e39749
Show file tree
Hide file tree
Showing 15 changed files with 71 additions and 9 deletions.
3 changes: 3 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
root = true

[*.expected]
insert_final_newline = false

[*.neon]
charset = utf-8
indent_style = tab
Expand Down
10 changes: 9 additions & 1 deletion src/NamespaceTranslator/Helpers.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,15 @@ class Helpers
use StaticClass;

/**
* @param string [] $keys
* @param mixed $message
*/
public static function filter($message): string
{
return (string)$message;
}

/**
* @param int[]|string[] $keys
*/
public static function key(array $keys): string
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\Array_;
use PhpParser\Node\Expr\ArrayItem;
use PhpParser\Node\Scalar\LNumber;
use PhpParser\Node\Scalar\String_;
use Wavevision\DIServiceAnnotation\DIService;

Expand Down Expand Up @@ -43,8 +44,14 @@ private function items(array $content): array
return $items;
}

private function key(string $key): Expr
/**
* @param int|string $key
*/
private function key($key): Expr
{
if (is_int($key)) {
return new LNumber($key);
}
if ($this->serializeClassConstFetch->isSerialized($key)) {
return $this->serializeClassConstFetch->deserialize($key);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use PhpParser\Node\Expr\Array_;
use PhpParser\Node\Expr\ArrayItem;
use PhpParser\Node\Expr\ClassConstFetch;
use PhpParser\Node\Scalar\LNumber;
use PhpParser\Node\Scalar\String_;
use Wavevision\DIServiceAnnotation\DIService;
use Wavevision\NamespaceTranslator\Exceptions\InvalidState;
Expand Down Expand Up @@ -48,16 +49,22 @@ private function value(ArrayItem $item)
}
}

private function key(ArrayItem $item): string
/**
* @return int|string
*/
private function key(ArrayItem $item)
{
$key = $item->key;
if ($key instanceof LNumber) {
return $key->value;
}
if ($key instanceof String_) {
return $key->value;
}
if ($key instanceof ClassConstFetch) {
return $this->serializeClassConstFetch->serialize($key);
}
throw new InvalidState('Key should be string or class constant.');
throw new InvalidState('Key should be integer, string or class constant.');
}

}
4 changes: 2 additions & 2 deletions src/NamespaceTranslator/PrefixedTranslator.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public function __construct(Translator $translator, string $prefix)
}

/**
* @param Message|NotTranslate|string|string[] $message
* @param Message|NotTranslate|int|int[]|string|string[] $message
* @param mixed ...$parameters
*/
public function translate($message, ...$parameters): string
Expand All @@ -34,7 +34,7 @@ public function translate($message, ...$parameters): string
if (is_array($message)) {
$message = [$this->prefix, ...$message];
}
if (is_string($message)) {
if (is_int($message) || is_string($message)) {
$message = Helpers::key([$this->prefix, $message]);
}
return $this->translator->translate($message, ...$parameters);
Expand Down
3 changes: 2 additions & 1 deletion src/NamespaceTranslator/Translator.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public function __construct(ContributteTranslator $translator)
}

/**
* @param Message|NotTranslate|string|string[] $message
* @param Message|NotTranslate|int|int[]|string|string[] $message
* @param mixed ...$parameters
*/
public function translate($message, ...$parameters): string
Expand All @@ -40,6 +40,7 @@ public function translate($message, ...$parameters): string
if (is_array($message)) {
$message = Helpers::key($message);
}
$message = Helpers::filter($message);
$count = $parameters[0] ?? null;
$params = $parameters[1] ?? [];
$domain = $parameters[2] ?? null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ public function process(): string
return $this->translator->translate(Cs::SOME_KEY);
}

public function processInteger(): string
{
return $this->translator->translate(1);
}

public function processNested(): string
{
return $this->translator->translate([Cs::SUB, Cs::NESTED]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class Cs extends Translation
public static function define(): array
{
return [
1 => 'Jedna!',
self::SOME_KEY => 'My chceme modele!',
self::SUB => [
self::NESTED => 'Zano艡en茅',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class En extends Translation
public static function define(): array
{
return [
1 => 'One!',
self::SOME_KEY => 'We want modele!',
];
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,14 @@ public function actionDefault(): void
'modelTranslation' => $this->translatedModel->process(),
'nestedTranslation' => $this->translatedModel->processNested(),
'paramTranslation' => $this->translatedModel->process(),
'integerTranslation' => $this->translatedModel->processInteger(),
]
);
}

public function actionInteger(): void
{
$this->template->setParameters(['translation' => $this->translatedModel->processInteger()]);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{block content}
{$translation}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
file,key,cs,en,format
/Components/SomeComponent/translations/,message,Zpr谩va,Message,neon
/Components/SomeComponent/translations/,otherMessage,"Dal拧铆 zpr谩va","Other message",neon
/Models/Translated/Translations/,1,Jedna!,One!,php
/Models/Translated/Translations/,c:self-SOME_KEY,"My chceme modele!","We want modele!",php
/Models/Translated/Translations/,c:self-SUB.c:self-NESTED,Zano艡en茅,,php
/Models/Translated/Translations/One,c:self-HELLO,"Ahoj {c:self-NAME}!",,php
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ class Cs extends Translation
*/
public static function define() : array
{
return array(self::SOME_KEY => 'My chceme modele!', self::SUB => array(self::NESTED => 'Zano艡en茅'));
return array(1 => 'Jedna!', self::SOME_KEY => 'My chceme modele!', self::SUB => array(self::NESTED => 'Zano艡en茅'));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ class En extends Translation
*/
public static function define() : array
{
return array(self::SOME_KEY => 'We want modele!', self::SUB => array(self::NESTED => 'nested'));
return array(1 => 'One!', self::SOME_KEY => 'We want modele!', self::SUB => array(self::NESTED => 'nested'));
}
}
20 changes: 20 additions & 0 deletions tests/NamespaceTranslatorTests/TranslatedPresenterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,24 @@ public function testPrefixed(): void
);
}

public function testInteger(): void
{
$this->assertEquals(
"Jedna!\n",
$this->extractTextResponseContent(
$this->runPresenter(new PresenterRequest(HomePresenter::class, 'integer', ['locale' => 'cs']))
)
);
}

public function testIntegerEn(): void
{
$this->assertEquals(
"One!\n",
$this->extractTextResponseContent(
$this->runPresenter(new PresenterRequest(HomePresenter::class, 'integer', ['locale' => 'en']))
)
);
}

}

0 comments on commit 3e39749

Please sign in to comment.