Skip to content

Commit

Permalink
Add FallbackLevel enum
Browse files Browse the repository at this point in the history
  • Loading branch information
natanfelles committed Apr 16, 2022
1 parent baa0248 commit 38e1479
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 52 deletions.
7 changes: 1 addition & 6 deletions src/Debug/LanguageCollector.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,7 @@ public function getContents() : string
?></p>
<p><strong>Fallback Level:</strong> <?php
$level = $this->language->getFallbackLevel();
$levelName = match ($level) {
Language::FALLBACK_PARENT => 'parent',
Language::FALLBACK_DEFAULT => 'default',
default => 'none',
};
echo "{$level} ({$levelName})"; ?></p>
echo "{$level->value} ({$level->name})"; ?></p>
<h1>Rendered Messages</h1>
<?= $this->renderRenderedMessages() ?>
<h1>Directories</h1>
Expand Down
39 changes: 39 additions & 0 deletions src/FallbackLevel.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php declare(strict_types=1);
/*
* This file is part of Aplus Framework Language Library.
*
* (c) Natan Felles <natanfelles@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Framework\Language;

/**
* Enum FallbackLevel.
*
* @package language
*/
enum FallbackLevel: int
{
/**
* Disable fallback.
*
* Use language lines only from the given language.
*/
case none = 0;
/**
* Fallback to parent language.
*
* If the given language is pt-BR and a line is not found, try to use the line of pt.
*
* NOTE: The parent locale must be set in the Supported Locales to this fallback work.
*/
case parent = 1;
/**
* Fallback to default language.
*
* If the parent language is not found, try to use the default language.
*/
case default = 2;
}
43 changes: 8 additions & 35 deletions src/Language.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,26 +25,6 @@
*/
class Language
{
/**
* Fallback to default language.
*
* If the parent language is not found, try to use the default language.
*/
public const FALLBACK_DEFAULT = 2;
/**
* Disable fallback.
*
* Use language lines only from the given language.
*/
public const FALLBACK_NONE = 0;
/**
* Fallback to parent language.
*
* If the given language is pt-BR and a line is not found, try to use the line of pt.
*
* NOTE: The parent locale must be set in the Supported Locales to this fallback work.
*/
public const FALLBACK_PARENT = 1;
/**
* The current locale.
*/
Expand All @@ -62,7 +42,7 @@ class Language
/**
* The locale fallback level.
*/
protected int $fallbackLevel = Language::FALLBACK_DEFAULT;
protected FallbackLevel $fallbackLevel = FallbackLevel::default;
/**
* List with locales of already scanned directories.
*
Expand Down Expand Up @@ -252,10 +232,10 @@ public function getDirectories() : array
/**
* Gets the Fallback Level.
*
* @return int One of the FALLBACK_* constants
* @return FallbackLevel
*/
#[Pure]
public function getFallbackLevel() : int
public function getFallbackLevel() : FallbackLevel
{
return $this->fallbackLevel;
}
Expand All @@ -273,15 +253,15 @@ public function getFallbackLevel() : int
protected function getFallbackLine(string $locale, string $file, string $line) : array
{
$text = null;
$level = $this->getFallbackLevel();
$level = $this->getFallbackLevel()->value;
// Fallback to parent
if ($level > static::FALLBACK_NONE && \strpos($locale, '-') > 1) {
if ($level > FallbackLevel::none->value && \strpos($locale, '-') > 1) {
[$locale] = \explode('-', $locale, 2);
$text = $this->getLine($locale, $file, $line);
}
// Fallback to default
if ($text === null
&& $level > static::FALLBACK_PARENT
&& $level > FallbackLevel::parent->value
&& $locale !== $this->getDefaultLocale()
) {
$locale = $this->getDefaultLocale();
Expand Down Expand Up @@ -604,19 +584,12 @@ protected function reindex() : void
/**
* Sets the Fallback Level.
*
* @param int $level one of the FALLBACK_* constants
* @param FallbackLevel $level
*
* @return static
*/
public function setFallbackLevel(int $level) : static
public function setFallbackLevel(FallbackLevel $level) : static
{
if ( ! \in_array($level, [
static::FALLBACK_NONE,
static::FALLBACK_PARENT,
static::FALLBACK_DEFAULT,
], true)) {
throw new InvalidArgumentException('Invalid fallback level: ' . $level);
}
$this->fallbackLevel = $level;
return $this;
}
Expand Down
5 changes: 3 additions & 2 deletions tests/Debug/LanguageCollectorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
namespace Tests\Language\Debug;

use Framework\Language\Debug\LanguageCollector;
use Framework\Language\FallbackLevel;
use Framework\Language\Language;
use PHPUnit\Framework\TestCase;

Expand Down Expand Up @@ -47,12 +48,12 @@ public function testFallbackLevels() : void
'2 (default)',
$this->collector->getContents()
);
$language->setFallbackLevel(Language::FALLBACK_PARENT);
$language->setFallbackLevel(FallbackLevel::parent);
self::assertStringContainsString(
'1 (parent)',
$this->collector->getContents()
);
$language->setFallbackLevel(Language::FALLBACK_NONE);
$language->setFallbackLevel(FallbackLevel::none);
self::assertStringContainsString(
'0 (none)',
$this->collector->getContents()
Expand Down
13 changes: 4 additions & 9 deletions tests/LanguageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*/
namespace Tests\Language;

use Framework\Language\FallbackLevel;
use Framework\Language\Language;
use PHPUnit\Framework\TestCase;

Expand Down Expand Up @@ -129,15 +130,9 @@ public function testSetDirectoryAfterScan() : void

public function testFallbackLevel() : void
{
self::assertSame($this->language::FALLBACK_DEFAULT, $this->language->getFallbackLevel());
$this->language->setFallbackLevel($this->language::FALLBACK_NONE);
self::assertSame($this->language::FALLBACK_NONE, $this->language->getFallbackLevel());
}

public function testInvalidFallbackLevel() : void
{
$this->expectException(\InvalidArgumentException::class);
$this->language->setFallbackLevel(999);
self::assertSame(FallbackLevel::default, $this->language->getFallbackLevel());
$this->language->setFallbackLevel(FallbackLevel::none);
self::assertSame(FallbackLevel::none, $this->language->getFallbackLevel());
}

public function testLang() : void
Expand Down

0 comments on commit 38e1479

Please sign in to comment.