12
12
namespace Symfony \Bundle \FrameworkBundle \Tests \Translation ;
13
13
14
14
use Symfony \Bundle \FrameworkBundle \Translation \Translator ;
15
+ use Symfony \Component \Translation \Loader \ArrayLoader ;
15
16
use Symfony \Component \Translation \MessageCatalogue ;
16
17
use Symfony \Component \Filesystem \Filesystem ;
17
18
use Symfony \Component \Translation \MessageSelector ;
@@ -183,6 +184,34 @@ public function testGetLocaleWithInvalidLocale()
183
184
$ this ->assertSame ('en-US ' , $ translator ->getLocale ());
184
185
}
185
186
187
+ public function testDifferentCacheFilesAreUsedForDifferentSetsOfFallbackLocales ()
188
+ {
189
+ /*
190
+ * Because the cache file contains a catalogue including all of its fallback
191
+ * catalogues, we must take the active set of fallback locales into
192
+ * consideration when loading a catalogue from the cache.
193
+ */
194
+ $ translator = $ this ->createTranslator (new ArrayLoader (), array ('cache_dir ' => $ this ->tmpDir ));
195
+ $ translator ->setLocale ('a ' );
196
+ $ translator ->setFallbackLocales (array ('b ' ));
197
+ $ translator ->addResource ('loader ' , array ('foo ' => 'foo (a) ' ), 'a ' );
198
+ $ translator ->addResource ('loader ' , array ('bar ' => 'bar (b) ' ), 'b ' );
199
+
200
+ $ this ->assertEquals ('bar (b) ' , $ translator ->trans ('bar ' ));
201
+
202
+ // Remove fallback locale
203
+ $ translator ->setFallbackLocales (array ());
204
+ $ this ->assertEquals ('bar ' , $ translator ->trans ('bar ' ));
205
+
206
+ // Use a fresh translator with no fallback locales, result should be the same
207
+ $ translator = $ this ->createTranslator (new ArrayLoader (), array ('cache_dir ' => $ this ->tmpDir ));
208
+ $ translator ->setLocale ('a ' );
209
+ $ translator ->addResource ('loader ' , array ('foo ' => 'foo (a) ' ), 'a ' );
210
+ $ translator ->addResource ('loader ' , array ('bar ' => 'bar (b) ' ), 'b ' );
211
+
212
+ $ this ->assertEquals ('bar ' , $ translator ->trans ('bar ' ));
213
+ }
214
+
186
215
protected function getCatalogue ($ locale , $ messages )
187
216
{
188
217
$ catalogue = new MessageCatalogue ($ locale );
@@ -265,12 +294,7 @@ protected function getContainer($loader)
265
294
266
295
public function getTranslator ($ loader , $ options = array (), $ translatorClass = '\Symfony\Bundle\FrameworkBundle\Translation\Translator ' )
267
296
{
268
- $ translator = new $ translatorClass (
269
- $ this ->getContainer ($ loader ),
270
- new MessageSelector (),
271
- array ('loader ' => array ('loader ' )),
272
- $ options
273
- );
297
+ $ translator = $ this ->createTranslator ($ loader , $ options , $ translatorClass );
274
298
275
299
$ translator ->addResource ('loader ' , 'foo ' , 'fr ' );
276
300
$ translator ->addResource ('loader ' , 'foo ' , 'en ' );
@@ -282,6 +306,18 @@ public function getTranslator($loader, $options = array(), $translatorClass = '\
282
306
283
307
return $ translator ;
284
308
}
309
+
310
+ private function createTranslator ($ loader , $ options , $ translatorClass = '\Symfony\Bundle\FrameworkBundle\Translation\Translator ' )
311
+ {
312
+ $ translator = new $ translatorClass (
313
+ $ this ->getContainer ($ loader ),
314
+ new MessageSelector (),
315
+ array ('loader ' => array ('loader ' )),
316
+ $ options
317
+ );
318
+
319
+ return $ translator ;
320
+ }
285
321
}
286
322
287
323
class TranslatorWithInvalidLocale extends Translator
0 commit comments