Skip to content

Commit 209549a

Browse files
authored
Merge pull request #1445 from Haehnchen/feature/translatopn-compiled-domain
support usage of translation domain adding "resource_files" compiled debug container
2 parents 2c940a8 + 143f497 commit 209549a

File tree

3 files changed

+104
-20
lines changed

3 files changed

+104
-20
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/translation/parser/DomainMappings.java

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.w3c.dom.NodeList;
77

88
import java.io.InputStream;
9+
import java.util.Collection;
910
import java.util.Collections;
1011
import java.util.List;
1112
import java.util.concurrent.CopyOnWriteArrayList;
@@ -19,7 +20,9 @@ public class DomainMappings extends AbstractServiceParser {
1920

2021
@Override
2122
public String getXPathFilter() {
22-
return "/container/services/service[@class=\"Symfony\\Bundle\\FrameworkBundle\\Translation\\Translator\"]//call[@method=\"addResource\"]";
23+
return
24+
"/container/services/service[@class=\"Symfony\\Bundle\\FrameworkBundle\\Translation\\Translator\"]//call[@method=\"addResource\"]" // Symfony < 4
25+
+ " | /container/services/service[@class=\"Symfony\\Bundle\\FrameworkBundle\\Translation\\Translator\"]//argument[@key=\"resource_files\"]/argument/argument";
2326
}
2427

2528
public void parser(InputStream file) {
@@ -32,17 +35,37 @@ public void parser(InputStream file) {
3235

3336
for (int i = 0; i < nodeList.getLength(); i++) {
3437
Element node = (Element) nodeList.item(i);
35-
NodeList arguments = node.getElementsByTagName("argument");
38+
String tagName = node.getTagName();
3639

37-
if(arguments.getLength() == 4) {
38-
this.domainFileMaps.add(new DomainFileMap(arguments.item(0).getTextContent(), arguments.item(1).getTextContent(), arguments.item(2).getTextContent(), arguments.item(3).getTextContent()));
40+
if ("call".equals(tagName)) {
41+
// Symfony < 4: via addResource
42+
NodeList arguments = node.getElementsByTagName("argument");
43+
44+
if(arguments.getLength() == 4) {
45+
this.domainFileMaps.add(new DomainFileMap(arguments.item(0).getTextContent(), arguments.item(1).getTextContent(), arguments.item(2).getTextContent(), arguments.item(3).getTextContent()));
46+
}
47+
} else if("argument".equals(tagName)) {
48+
// Symfony 5: arguments in constructor
49+
50+
// normalize path name
51+
String path = node.getTextContent().replace("\\", "/");
52+
53+
// get file name
54+
int filenameStart = path.lastIndexOf("/");
55+
if (filenameStart > 0) {
56+
String filename = path.substring(filenameStart + 1);
57+
58+
// split by filename: validators.af.xlf
59+
String[] split = filename.split("\\.");
60+
if (split.length == 3) {
61+
this.domainFileMaps.add(new DomainFileMap(split[2], path, split[1], split[0]));
62+
}
63+
}
3964
}
4065
}
41-
4266
}
4367

44-
public List<DomainFileMap> getDomainFileMaps() {
68+
public Collection<DomainFileMap> getDomainFileMaps() {
4569
return Collections.synchronizedList(domainFileMaps);
4670
}
47-
4871
}

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/translation/parser/DomainMappingsTest.java

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,37 @@
88
import java.io.File;
99
import java.io.FileInputStream;
1010
import java.io.FileNotFoundException;
11-
import java.util.List;
12-
11+
import java.util.Collection;
1312

13+
/**
14+
* @author Daniel Espendiller <daniel@espendiller.net>
15+
*/
1416
public class DomainMappingsTest extends Assert {
15-
1617
@Test
1718
public void testParser() throws FileNotFoundException {
1819
File testFile = new File("src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/translation/parser/appDevDebugProjectContainer.xml");
1920

20-
DomainMappings bla = new DomainMappings();
21-
bla.parser(new FileInputStream(testFile));
22-
List<DomainFileMap> map = bla.getDomainFileMaps();
21+
DomainMappings domainMappings = new DomainMappings();
22+
domainMappings.parser(new FileInputStream(testFile));
23+
Collection<DomainFileMap> domainFileMaps = domainMappings.getDomainFileMaps();
2324

24-
assertEquals(10, map.size());
25+
assertEquals(14, domainFileMaps.size());
2526

26-
DomainFileMap firstDomain = map.iterator().next();
27+
DomainFileMap craueFormFlowBundle = domainFileMaps.stream().filter(domainFileMap -> domainFileMap.getDomain().equals("CraueFormFlowBundle")).findFirst().get();
2728

28-
assertEquals("CraueFormFlowBundle", firstDomain.getDomain());
29-
assertEquals("de", firstDomain.getLanguageKey());
30-
assertEquals("yml", firstDomain.getLoader());
31-
assertTrue(firstDomain.getPath().endsWith("CraueFormFlowBundle.de.yml"));
29+
assertEquals("CraueFormFlowBundle", craueFormFlowBundle.getDomain());
30+
assertEquals("de", craueFormFlowBundle.getLanguageKey());
31+
assertEquals("yml", craueFormFlowBundle.getLoader());
32+
assertTrue(craueFormFlowBundle.getPath().endsWith("CraueFormFlowBundle.de.yml"));
3233

33-
}
34+
DomainFileMap foobarDomain1 = domainFileMaps.stream().filter(domainFileMap -> domainFileMap.getDomain().equals("foobar_domain1")).findFirst().get();
35+
assertEquals("foobar_domain1", foobarDomain1.getDomain());
36+
assertEquals("af", foobarDomain1.getLanguageKey());
37+
assertEquals("xlf", foobarDomain1.getLoader());
38+
assertTrue(foobarDomain1.getPath().endsWith("foobar_domain1.af.xlf"));
3439

40+
assertNotNull(domainFileMaps.stream().filter(domainFileMap -> domainFileMap.getDomain().equals("foobar_domain2")).findFirst().get());
41+
assertNotNull(domainFileMaps.stream().filter(domainFileMap -> domainFileMap.getDomain().equals("foobar_domain3")).findFirst().get());
42+
assertNotNull(domainFileMaps.stream().filter(domainFileMap -> domainFileMap.getDomain().equals("foobar_domain4")).findFirst().get());
43+
}
3544
}

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/translation/parser/appDevDebugProjectContainer.xml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,57 @@
8080
</call>
8181
</service>
8282

83+
<service id="translator.default" class="Symfony\Bundle\FrameworkBundle\Translation\Translator" public="false">
84+
<tag name="kernel.locale_aware"/>
85+
<argument type="service" id=".service_locator.V.o0zE7"/>
86+
<argument type="service" id="translator.formatter.default"/>
87+
<argument>en-GB</argument>
88+
<argument type="collection">
89+
<argument key="translation.loader.php" type="collection">
90+
<argument>php</argument>
91+
</argument>
92+
<argument key="translation.loader.yml" type="collection">
93+
<argument>yaml</argument>
94+
<argument>yml</argument>
95+
</argument>
96+
<argument key="translation.loader.xliff" type="collection">
97+
<argument>xlf</argument>
98+
<argument>xliff</argument>
99+
</argument>
100+
</argument>
101+
<argument type="collection">
102+
<argument key="cache_dir">/app/var/cache/dev/translations</argument>
103+
<argument key="debug">true</argument>
104+
<argument key="resource_files" type="collection">
105+
<argument key="af" type="collection">
106+
<argument>/app/vendor/symfony/validator/Resources/translations/foobar_domain1.af.xlf</argument>
107+
</argument>
108+
<argument key="ar" type="collection">
109+
<argument>/app/vendor/symfony/validator/Resources/translations/foobar_domain2.ar.xlf</argument>
110+
<argument>/app/vendor/symfony/security-core/Resources/translations/foobar_domain3.ar.xlf</argument>
111+
</argument>
112+
<argument key="pt_PT" type="collection">
113+
<argument>/home/daniel/projects/symfony5/vendor/symfony/security-core/Resources/translations/foobar_domain4.pt_PT.xlf</argument>
114+
</argument>
115+
</argument>
116+
<argument key="scanned_directories" type="collection">
117+
<argument>/app/vendor/symfony/validator/Resources/translations</argument>
118+
</argument>
119+
<argument key="cache_vary" type="collection">
120+
<argument key="scanned_directories" type="collection">
121+
<argument>vendor/symfony/validator/Resources/translations</argument>
122+
</argument>
123+
</argument>
124+
</argument>
125+
<call method="setConfigCacheFactory">
126+
<argument type="service" id="config_cache_factory"/>
127+
</call>
128+
<call method="setFallbackLocales">
129+
<argument type="collection">
130+
<argument>en_GB</argument>
131+
<argument>en</argument>
132+
</argument>
133+
</call>
134+
</service>
83135
</services>
84136
</container>

0 commit comments

Comments
 (0)