@@ -37,6 +37,14 @@ class Translator extends BaseTranslator implements WarmableInterface
3737 */
3838 private $ resourceLocales ;
3939
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+
4048 /**
4149 * Constructor.
4250 *
@@ -65,9 +73,7 @@ public function __construct(ContainerInterface $container, MessageSelector $sele
6573
6674 $ this ->options = array_merge ($ this ->options , $ options );
6775 $ 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 ' ]);
7177
7278 parent ::__construct ($ container ->getParameter ('kernel.default_locale ' ), $ selector , $ this ->options ['cache_dir ' ], $ this ->options ['debug ' ]);
7379 }
@@ -93,6 +99,11 @@ public function warmUp($cacheDir)
9399 }
94100 }
95101
102+ public function addResource ($ format , $ resource , $ locale , $ domain = null )
103+ {
104+ $ this ->resources [] = array ($ format , $ resource , $ locale , $ domain );
105+ }
106+
96107 /**
97108 * {@inheritdoc}
98109 */
@@ -104,22 +115,26 @@ protected function initializeCatalogue($locale)
104115
105116 protected function initialize ()
106117 {
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+
108124 foreach ($ this ->loaderIds as $ id => $ aliases ) {
109125 foreach ($ aliases as $ alias ) {
110126 $ this ->addLoader ($ alias , $ this ->container ->get ($ id ));
111127 }
112128 }
113129 }
114130
115- private function loadResources ( )
131+ private function addResourceFiles ( $ filesByLocale )
116132 {
117- foreach ($ this -> options [ ' resource_files ' ] as $ locale => $ files ) {
133+ foreach ($ filesByLocale as $ locale => $ files ) {
118134 foreach ($ files as $ key => $ file ) {
119135 // filename is domain.locale.format
120136 list ($ domain , $ locale , $ format ) = explode ('. ' , basename ($ file ), 3 );
121137 $ this ->addResource ($ format , $ file , $ locale , $ domain );
122- unset($ this ->options ['resource_files ' ][$ locale ][$ key ]);
123138 }
124139 }
125140 }
0 commit comments