Skip to content

Commit b0207a5

Browse files
committed
Merge branch 'v5'
2 parents 10ef024 + 5efa215 commit b0207a5

File tree

1 file changed

+31
-30
lines changed

1 file changed

+31
-30
lines changed

src/Utility/Language.php

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,37 +19,33 @@ final class Language
1919
/**
2020
* The constructor.
2121
*
22-
* @param string|string[] $langOrTrans the language string or translations array
22+
* @param string|string[] $target the language string or translations dict
2323
*/
24-
public function __construct($langOrTrans = 'eng')
24+
public function __construct($target = 'eng')
2525
{
26-
$this->setLanguageOrTranslations($langOrTrans);
26+
$this->setLanguageOrTranslations($target);
2727
}
2828

2929
/**
30-
* Set the language name.
30+
* Set up this class.
3131
*
32-
* @param string|string[] $langOrTrans the language string or translations array
32+
* @param string|string[] $target the language string or translations array
3333
*
3434
* @throws \InvalidArgumentException
3535
*
3636
* @return self
3737
*/
38-
public function setLanguageOrTranslations($langOrTrans): self
38+
public function setLanguageOrTranslations($target): self
3939
{
40-
if (\is_string($langOrTrans)) {
41-
$this->setLanguage($langOrTrans);
42-
43-
return $this;
40+
if (\is_string($target)) {
41+
$this->setUpWithLanguage($target);
42+
} elseif (\is_array($target)) {
43+
$this->setUpWithTranslations($target);
44+
} else {
45+
throw new \InvalidArgumentException('$target must be the type of string|string[]');
4446
}
4547

46-
if (\is_array($langOrTrans)) {
47-
$this->setTranslations($langOrTrans);
48-
49-
return $this;
50-
}
51-
52-
throw new \InvalidArgumentException('$langOrTrans must be either string or array');
48+
return $this;
5349
}
5450

5551
/**
@@ -83,7 +79,7 @@ public function getTranslations(): array
8379
*
8480
* @return string[]
8581
*/
86-
public function getTranslationsByLanguage(string $language): array
82+
public static function getTranslationsByLanguage(string $language): array
8783
{
8884
$filePath = __DIR__ . "/../languages/{$language}.json";
8985
$file = new \SplFileObject($filePath, 'r');
@@ -93,7 +89,11 @@ public function getTranslationsByLanguage(string $language): array
9389
$decoded = \json_decode($fileContent, true);
9490

9591
if (\json_last_error() !== \JSON_ERROR_NONE) {
96-
throw new \Exception("Fail to decode JSON file: {$filePath}");
92+
throw new \Exception(\sprintf(
93+
'Fail to decode JSON file (code %d): %s',
94+
\json_last_error(),
95+
\realpath($filePath)
96+
));
9797
}
9898

9999
return (array) $decoded;
@@ -112,31 +112,32 @@ public function translate(string $text): string
112112
}
113113

114114
/**
115-
* Set the language name.
115+
* Set up this class by language name.
116116
*
117117
* @param string $language the language name
118118
*
119119
* @return self
120120
*/
121-
private function setLanguage(string $language): self
121+
private function setUpWithLanguage(string $language): self
122122
{
123-
$this->language = $language;
124-
$this->translations = $this->getTranslationsByLanguage($language);
125-
126-
return $this;
123+
return $this->setUpWithTranslations(
124+
self::getTranslationsByLanguage($language),
125+
$language
126+
);
127127
}
128128

129129
/**
130-
* Set the translations.
130+
* Set up this class by translations.
131131
*
132-
* @param string[] $translations the language translations array
132+
* @param string[] $translations the translations dict
133+
* @param string $language the language name
133134
*
134135
* @return self
135136
*/
136-
private function setTranslations(array $translations): self
137+
private function setUpWithTranslations(array $translations, string $language = '_custom_'): self
137138
{
138-
$this->language = '_custom_';
139-
$this->translations = $translations;
139+
$this->language = $language;
140+
$this->translations = \array_map('strval', $translations);
140141

141142
return $this;
142143
}

0 commit comments

Comments
 (0)