Completed
Push — v4.0-dev ( 627b53 )
by Oscar
03:24
created

PhpArray::toArray()   A

Complexity

Conditions 4
Paths 8

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 9
rs 9.2
cc 4
eloc 6
nc 8
nop 1
1
<?php
2
3
namespace Gettext\Generators;
4
5
use Gettext\Translations;
6
7
class PhpArray extends Generator implements GeneratorInterface
8
{
9
    /**
10
     * {@inheritdoc}
11
     */
12
    public static function toString(Translations $translations)
13
    {
14
        $array = self::toArray($translations);
15
16
        return '<?php return '.var_export($array, true).'; ?>';
17
    }
18
19
    /**
20
     * Generates an array with the translations.
21
     *
22
     * @param Translations $translations
23
     *
24
     * @return array
25
     */
26
    public static function toArray(Translations $translations)
27
    {
28
        return [
29
            'domain' => $translations->getDomain() ?: 'messages',
30
            'lang' => $translations->getLanguage() ?: 'en',
31
            'plural-forms' => $translations->getHeader('Plural-Forms') ?: 'nplurals=2; plural=(n != 1);',
32
            'messages' => static::buildArray($translations)
33
        ];
34
    }
35
36
    /**
37
     * Generates an array with all translations.
38
     * 
39
     * @param Translations $translations
40
     *
41
     * @return array
42
     */
43
    protected static function buildArray(Translations $translations)
44
    {
45
        $messages = [];
46
47
        foreach ($translations as $translation) {
48
            $context = (string) $translation->getContext();
49
50
            if (!isset($messages[$context])) {
51
                $messages[$context] = [];
52
            }
53
54
            $message = $translation->getPluralTranslations();
55
            array_unshift($message, $translation->getTranslation());
56
57
            $messages[$context][$translation->getOriginal()] = $message;
58
        }
59
60
        return $messages;
61
    }
62
}
63