1212namespace Symfony \Component \Translation ;
1313
1414/**
15+ * Merges the fallback catalogues into the loaded one.
16+ *
1517 * @author Abdellatif Ait boudad <[email protected] > 1618 */
1719class FallbackTranslatorBag implements TranslatorBagInterface, TranslatorBagIdentifiable
1820{
21+ /**
22+ * @var TranslatorBagInterface
23+ */
1924 private $ translatorBag ;
2025
2126 /**
2227 * @var array
2328 */
24- private $ fallbackLocales = array () ;
29+ private $ fallbackLocales ;
2530
31+ /**
32+ * @param array $fallbackLocales The fallback locales.
33+ * @param TranslatorBagInterface $translatorBag The translator bag to use for loading the catalogue.
34+ */
2635 public function __construct ($ fallbackLocales = array (), TranslatorBagInterface $ translatorBag = null )
2736 {
28- $ this ->translatorBag = $ translatorBag ?: new TranslatorBag ();
2937 $ this ->fallbackLocales = $ fallbackLocales ;
38+ $ this ->translatorBag = $ translatorBag ?: new TranslatorBag ();
3039 }
3140
3241 /**
@@ -40,44 +49,10 @@ public function getCatalogue($locale)
4049 return $ catalogue ;
4150 }
4251
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-
7352 /**
7453 * Sets the fallback locales.
7554 *
7655 * @param array $locales The fallback locales
77- *
78- * @throws \InvalidArgumentException If a locale contains invalid characters
79- *
80- * @api
8156 */
8257 public function setFallbackLocales (array $ locales )
8358 {
@@ -88,8 +63,6 @@ public function setFallbackLocales(array $locales)
8863 * Gets the fallback locales.
8964 *
9065 * @return array $locales The fallback locales
91- *
92- * @api
9366 */
9467 public function getFallbackLocales ()
9568 {
@@ -108,4 +81,33 @@ public function getIdentifier()
10881
10982 return sha1 ($ id );
11083 }
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+ }
111113}
0 commit comments