Completed
Branch next (8f844e)
by Neomerx
04:06
created

Messages::compose()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 2
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
namespace Neomerx\JsonApi\I18n;
4
5
/**
6
 * Copyright 2015-2019 [email protected]
7
 *
8
 * Licensed under the Apache License, Version 2.0 (the "License");
9
 * you may not use this file except in compliance with the License.
10
 * You may obtain a copy of the License at
11
 *
12
 * http://www.apache.org/licenses/LICENSE-2.0
13
 *
14
 * Unless required by applicable law or agreed to in writing, software
15
 * distributed under the License is distributed on an "AS IS" BASIS,
16
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
 * See the License for the specific language governing permissions and
18
 * limitations under the License.
19
 */
20
21
/**
22
 * @package Neomerx\JsonApi
23
 */
24
class Messages
25
{
26
    /**
27
     * @var array
28
     */
29
    private static $translations = [];
30
31
    /**
32
     * Try to translate the message and format it with the given parameters.
33
     *
34
     * @param string $message
35
     * @param mixed  ...$parameters
36
     *
37
     * @return string
38
     */
0 ignored issues
show
Documentation introduced by
Consider making the type for parameter $parameters a bit more specific; maybe use array.
Loading history...
39 10
    public static function compose(string $message, ...$parameters): string
40
    {
41 10
        $translation = static::getTranslation($message);
42 10
        $result      = empty($parameters) === false ? vsprintf($translation, $parameters) : $translation;
43
44 10
        return $result;
45
    }
46
47
    /**
48
     * Translate message if configured or return the original untranslated message.
49
     *
50
     * @param string $message
51
     *
52
     * @return string
53
     */
54 10
    public static function getTranslation(string $message): string
55
    {
56 10
        return array_key_exists($message, static::$translations) === true ? static::$translations[$message] : $message;
0 ignored issues
show
Bug introduced by
Since $translations is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $translations to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
57
    }
58
59
    /**
60
     * Set translations for messages.
61
     *
62
     * @param array $translations
63
     *
64
     * @return void
65
     */
66 1
    public static function setTranslations(array $translations): void
67
    {
68 1
        self::$translations = $translations;
69 1
    }
70
}
71