diff --git a/src/globalization/TranslationXmlStreamReader.java b/src/globalization/TranslationXmlStreamReader.java
index 903bad0e..50cc86e0 100644
--- a/src/globalization/TranslationXmlStreamReader.java
+++ b/src/globalization/TranslationXmlStreamReader.java
@@ -179,7 +179,7 @@ public class TranslationXmlStreamReader {
String value = attribute.getValue();
switch(name.toString()) {
case TRANSLATION_KEY_ATTRIBUTE_NAME:
- assureIsValidPathExtension(value);
+ assureIsValidKey(value);
path = combinePaths(state.path, value);
break;
case TRANSLATION_TEMPLATE_ATTRIBUTE_NAME:
@@ -218,8 +218,13 @@ public class TranslationXmlStreamReader {
}
}
+ private void assureIsValidKey(String value) throws XMLStreamException {
+ if(value.contains("/"))
+ throw new javax.xml.stream.XMLStreamException("Key must not contain /");
+ }
+
private String combinePaths(String left, String right) {
- return Paths.get(left, right).toString();
+ return Paths.get(left, right).normalize().toString();
}
private void assureStartElement(XMLEvent event, String name) throws XMLStreamException {
diff --git a/src/test/GlobalizationTests.java b/src/test/GlobalizationTests.java
index 119a9d7e..e38e290d 100644
--- a/src/test/GlobalizationTests.java
+++ b/src/test/GlobalizationTests.java
@@ -59,9 +59,9 @@ public class GlobalizationTests {
"\n" +
"\n" +
" \n" +
- " \n" +
- " \n" +
- " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
" \n" +
" \n" +
" \n" +
@@ -69,7 +69,7 @@ public class GlobalizationTests {
"\n";
List expected = new ArrayList();
- expected.add(new TranslationEntry(Locale.forLanguageTag("en-GB"), "/path1/path2/path3/key1", "1"));
+ expected.add(new TranslationEntry(Locale.forLanguageTag("en-GB"), "/path1/key1", "1"));
expected.add(new TranslationEntry(Locale.forLanguageTag("en-GB"), "/path1/path2/path3/key2", "2"));
InputStream is = new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8")));