12
12
namespace Symfony \Component \Translation ;
13
13
14
14
/**
15
+ * Merges the fallback catalogues into the loaded one.
16
+ *
15
17
* @author Abdellatif Ait boudad <[email protected] >
16
18
*/
17
19
class FallbackTranslatorBag implements TranslatorBagInterface, TranslatorBagIdentifiable
18
20
{
21
+ /**
22
+ * @var TranslatorBagInterface
23
+ */
19
24
private $ translatorBag ;
20
25
21
26
/**
22
27
* @var array
23
28
*/
24
- private $ fallbackLocales = array () ;
29
+ private $ fallbackLocales ;
25
30
31
+ /**
32
+ * @param array $fallbackLocales The fallback locales.
33
+ * @param TranslatorBagInterface $translatorBag The translator bag to use for loading the catalogue.
34
+ */
26
35
public function __construct ($ fallbackLocales = array (), TranslatorBagInterface $ translatorBag = null )
27
36
{
28
- $ this ->translatorBag = $ translatorBag ?: new TranslatorBag ();
29
37
$ this ->fallbackLocales = $ fallbackLocales ;
38
+ $ this ->translatorBag = $ translatorBag ?: new TranslatorBag ();
30
39
}
31
40
32
41
/**
@@ -40,44 +49,10 @@ public function getCatalogue($locale)
40
49
return $ catalogue ;
41
50
}
42
51
43
- private function loadFallbackCatalogues ($ catalogue , $ locale )
44
- {
45
- $ current = $ catalogue ;
46
-
47
- foreach ($ this ->computeFallbackLocales ($ locale ) as $ fallback ) {
48
- $ catalogue = $ this ->translatorBag ->getCatalogue ($ fallback );
49
-
50
- $ current ->addFallbackCatalogue ($ catalogue );
51
- $ current = $ catalogue ;
52
- }
53
- }
54
-
55
- private function computeFallbackLocales ($ locale )
56
- {
57
- $ locales = array ();
58
- foreach ($ this ->fallbackLocales as $ fallback ) {
59
- if ($ fallback === $ locale ) {
60
- continue ;
61
- }
62
-
63
- $ locales [] = $ fallback ;
64
- }
65
-
66
- if (strrchr ($ locale , '_ ' ) !== false ) {
67
- array_unshift ($ locales , substr ($ locale , 0 , -strlen (strrchr ($ locale , '_ ' ))));
68
- }
69
-
70
- return array_unique ($ locales );
71
- }
72
-
73
52
/**
74
53
* Sets the fallback locales.
75
54
*
76
55
* @param array $locales The fallback locales
77
- *
78
- * @throws \InvalidArgumentException If a locale contains invalid characters
79
- *
80
- * @api
81
56
*/
82
57
public function setFallbackLocales (array $ locales )
83
58
{
@@ -88,8 +63,6 @@ public function setFallbackLocales(array $locales)
88
63
* Gets the fallback locales.
89
64
*
90
65
* @return array $locales The fallback locales
91
- *
92
- * @api
93
66
*/
94
67
public function getFallbackLocales ()
95
68
{
@@ -108,4 +81,33 @@ public function getIdentifier()
108
81
109
82
return sha1 ($ id );
110
83
}
84
+
85
+ private function loadFallbackCatalogues ($ catalogue , $ locale )
86
+ {
87
+ $ current = $ catalogue ;
88
+ foreach ($ this ->computeFallbackLocales ($ locale ) as $ fallback ) {
89
+ $ catalogue = $ this ->translatorBag ->getCatalogue ($ fallback );
90
+
91
+ $ current ->addFallbackCatalogue ($ catalogue );
92
+ $ current = $ catalogue ;
93
+ }
94
+ }
95
+
96
+ private function computeFallbackLocales ($ locale )
97
+ {
98
+ $ locales = array ();
99
+ foreach ($ this ->fallbackLocales as $ fallback ) {
100
+ if ($ fallback === $ locale ) {
101
+ continue ;
102
+ }
103
+
104
+ $ locales [] = $ fallback ;
105
+ }
106
+
107
+ if (strrchr ($ locale , '_ ' ) !== false ) {
108
+ array_unshift ($ locales , substr ($ locale , 0 , -strlen (strrchr ($ locale , '_ ' ))));
109
+ }
110
+
111
+ return array_unique ($ locales );
112
+ }
111
113
}
0 commit comments