@@ -37,6 +37,14 @@ class Translator extends BaseTranslator implements WarmableInterface
37
37
*/
38
38
private $ resourceLocales ;
39
39
40
+ /**
41
+ * Holds parameters from addResource() calls so we can defer the actual
42
+ * parent::addResource() calls until initialize() is executed.
43
+ *
44
+ * @var array
45
+ */
46
+ private $ resources = array ();
47
+
40
48
/**
41
49
* Constructor.
42
50
*
@@ -65,9 +73,7 @@ public function __construct(ContainerInterface $container, MessageSelector $sele
65
73
66
74
$ this ->options = array_merge ($ this ->options , $ options );
67
75
$ this ->resourceLocales = array_keys ($ this ->options ['resource_files ' ]);
68
- if (null !== $ this ->options ['cache_dir ' ] && $ this ->options ['debug ' ]) {
69
- $ this ->loadResources ();
70
- }
76
+ $ this ->addResourceFiles ($ this ->options ['resource_files ' ]);
71
77
72
78
parent ::__construct ($ container ->getParameter ('kernel.default_locale ' ), $ selector , $ this ->options ['cache_dir ' ], $ this ->options ['debug ' ]);
73
79
}
@@ -93,6 +99,11 @@ public function warmUp($cacheDir)
93
99
}
94
100
}
95
101
102
+ public function addResource ($ format , $ resource , $ locale , $ domain = null )
103
+ {
104
+ $ this ->resources [] = array ($ format , $ resource , $ locale , $ domain );
105
+ }
106
+
96
107
/**
97
108
* {@inheritdoc}
98
109
*/
@@ -104,22 +115,26 @@ protected function initializeCatalogue($locale)
104
115
105
116
protected function initialize ()
106
117
{
107
- $ this ->loadResources ();
118
+ foreach ($ this ->resources as $ key => $ params ) {
119
+ list ($ format , $ resource , $ locale , $ domain ) = $ params ;
120
+ parent ::addResource ($ format , $ resource , $ locale , $ domain );
121
+ }
122
+ $ this ->resources = array ();
123
+
108
124
foreach ($ this ->loaderIds as $ id => $ aliases ) {
109
125
foreach ($ aliases as $ alias ) {
110
126
$ this ->addLoader ($ alias , $ this ->container ->get ($ id ));
111
127
}
112
128
}
113
129
}
114
130
115
- private function loadResources ( )
131
+ private function addResourceFiles ( $ filesByLocale )
116
132
{
117
- foreach ($ this -> options [ ' resource_files ' ] as $ locale => $ files ) {
133
+ foreach ($ filesByLocale as $ locale => $ files ) {
118
134
foreach ($ files as $ key => $ file ) {
119
135
// filename is domain.locale.format
120
136
list ($ domain , $ locale , $ format ) = explode ('. ' , basename ($ file ), 3 );
121
137
$ this ->addResource ($ format , $ file , $ locale , $ domain );
122
- unset($ this ->options ['resource_files ' ][$ locale ][$ key ]);
123
138
}
124
139
}
125
140
}
0 commit comments