<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>deps/lib/cobertura/jakarta-oro-license.txt</filename>
    </added>
    <added>
      <filename>deps/lib/cobertura/log4j-license.txt</filename>
    </added>
    <added>
      <filename>deps/lib/junit/junit-4.7-src.jar</filename>
    </added>
    <added>
      <filename>deps/lib/junit/junit-4.7.jar</filename>
    </added>
    <added>
      <filename>deps/lib/junit/junit-dep-4.7.jar</filename>
    </added>
    <added>
      <filename>dist/domderrien-0.8.5-javadoc.jar</filename>
    </added>
    <added>
      <filename>dist/domderrien-0.8.5-src.jar</filename>
    </added>
    <added>
      <filename>dist/domderrien-0.8.5.ear</filename>
    </added>
    <added>
      <filename>dist/domderrien-0.8.5.jar</filename>
    </added>
    <added>
      <filename>dist/domderrien-0.8.5.war</filename>
    </added>
    <added>
      <filename>src/Java/domderrien/i18n/ResourceNameDefinitions.java</filename>
    </added>
    <added>
      <filename>test/Java/domderrien/i18n/TestDateUtils.java</filename>
    </added>
    <added>
      <filename>test/Java/domderrien/i18n/TestLabelExtractor.java</filename>
    </added>
    <added>
      <filename>test/Java/domderrien/i18n/TestLocaleController.java</filename>
    </added>
    <added>
      <filename>test/Java/domderrien/i18n/TestResourceNameDefinitions.java</filename>
    </added>
    <added>
      <filename>test/Java/domderrien/jsontools/TestGenericJsonArray.java</filename>
    </added>
    <added>
      <filename>test/Java/domderrien/jsontools/TestGenericJsonObject.java</filename>
    </added>
    <added>
      <filename>test/Java/domderrien/jsontools/TestJsonDelimiters.java</filename>
    </added>
    <added>
      <filename>test/Java/domderrien/jsontools/TestJsonException.java</filename>
    </added>
    <added>
      <filename>test/Java/domderrien/jsontools/TestJsonParser.java</filename>
    </added>
    <added>
      <filename>test/Java/domderrien/jsontools/TestJsonSerializer.java</filename>
    </added>
    <added>
      <filename>test/Java/domderrien/jsontools/TestJsonUtils.java</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -6,7 +6,7 @@
 	&lt;classpathentry kind=&quot;lib&quot; path=&quot;deps/lib/xml/xalan-2.7.0.jar&quot;/&gt;
 	&lt;classpathentry kind=&quot;lib&quot; path=&quot;deps/lib/xml/xercesImpl-2.4.0.jar&quot;/&gt;
 	&lt;classpathentry kind=&quot;lib&quot; path=&quot;deps/lib/xml/xml-apis-1.3.02.jar&quot;/&gt;
-	&lt;classpathentry kind=&quot;lib&quot; path=&quot;deps/lib/junit/junit-4.5.jar&quot;/&gt;
+	&lt;classpathentry kind=&quot;lib&quot; path=&quot;deps/lib/junit/junit-4.7.jar&quot; sourcepath=&quot;deps/lib/junit/junit-4.7-src.jar&quot;/&gt;
 	&lt;classpathentry kind=&quot;lib&quot; path=&quot;deps/lib/j2ee/servlet-api.jar&quot;/&gt;
 	&lt;classpathentry kind=&quot;output&quot; path=&quot;bin/classes&quot;/&gt;
 &lt;/classpath&gt;</diff>
      <filename>.classpath</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@
 		description=&quot;Temporary directory location. To reduce effects Eclipse automatic parsing, should be located outside the project structure.&quot;
 		value=&quot;${basedir}${file.separator}bin${file.separator}temp&quot; /&gt;
 
-	&lt;property name=&quot;dd2tu.release&quot; description=&quot;Planned release of this build&quot; value=&quot;0.8.2&quot; /&gt;
+	&lt;property name=&quot;dd2tu.release&quot; description=&quot;Planned release of this build&quot; value=&quot;0.8.5&quot; /&gt;
 
 	&lt;property name=&quot;dd2tu.languageListFilename&quot; value=&quot;domderrien-languages&quot; /&gt;
 
@@ -146,7 +146,6 @@
 	--&gt;
 
 	&lt;path id=&quot;tmxconverter.classpath&quot;&gt;
-		&lt;pathelement path=&quot;bin/classes&quot; /&gt;
 		&lt;!-- For the TMXConverter code --&gt;
 		&lt;pathelement path=&quot;bin/classes&quot; /&gt;
 		&lt;!-- For the existing ${dd2tu.languageListFilename}.properties file --&gt;
@@ -168,34 +167,29 @@
 
 	&lt;path id=&quot;java.compile.classpath&quot;&gt;
 		&lt;fileset refid=&quot;runtime.deps&quot; /&gt;
-		&lt;filelist dir=&quot;deps/lib/xml&quot;&gt;
-			&lt;file name=&quot;xalan-2.7.0.jar&quot; /&gt;
-			&lt;file name=&quot;xercesImpl-2.4.0.jar&quot; /&gt;
-			&lt;file name=&quot;xml-apis-1.3.02.jar&quot; /&gt;
-		&lt;/filelist&gt;
-		&lt;filelist dir=&quot;deps/lib/junit&quot;&gt;
-			&lt;file name=&quot;junit-4.5.jar&quot; /&gt;
-		&lt;/filelist&gt;
-		&lt;filelist dir=&quot;deps/lib/j2ee&quot;&gt;
-			&lt;file name=&quot;servlet-api.jar&quot; /&gt;
+		&lt;filelist dir=&quot;deps/lib&quot;&gt;
+			&lt;file name=&quot;xml/xalan-2.7.0.jar&quot; /&gt;
+			&lt;file name=&quot;xml/xercesImpl-2.4.0.jar&quot; /&gt;
+			&lt;file name=&quot;xml/xml-apis-1.3.02.jar&quot; /&gt;
+			&lt;file name=&quot;junit/junit-4.7.jar&quot; /&gt;
+			&lt;file name=&quot;junit/junit-dep-4.7.jar&quot; /&gt;
+			&lt;file name=&quot;j2ee/servlet-api.jar&quot; /&gt;
 		&lt;/filelist&gt;
 	&lt;/path&gt;
 
 	&lt;path id=&quot;cobertura.classpath&quot;&gt;
-		&lt;filelist dir=&quot;deps/lib/junit&quot;&gt;
-			&lt;file name=&quot;junit-4.5.jar&quot; /&gt;
-		&lt;/filelist&gt;
-		&lt;filelist dir=&quot;deps/lib/cobertura&quot;&gt;
-			&lt;file name=&quot;cobertura.jar&quot; /&gt;
-			&lt;file name=&quot;asm-3.0.jar&quot; /&gt;
-			&lt;file name=&quot;asm-tree-3.0.jar&quot; /&gt;
-			&lt;file name=&quot;jakarta-oro-2.0.8.jar&quot; /&gt;
-			&lt;file name=&quot;log4j-1.2.9.jar&quot; /&gt;
-		&lt;/filelist&gt;
-		&lt;filelist dir=&quot;deps/lib/xml&quot;&gt;
-			&lt;file name=&quot;xalan-2.7.0.jar&quot; /&gt;
-			&lt;file name=&quot;xercesImpl-2.4.0.jar&quot; /&gt;
-			&lt;file name=&quot;xml-apis-1.3.02.jar&quot; /&gt;
+		&lt;filelist dir=&quot;deps/lib&quot;&gt;
+			&lt;file name=&quot;junit/junit-4.7.jar&quot; /&gt;
+			&lt;file name=&quot;junit/junit-dep-4.7.jar&quot; /&gt;
+			&lt;file name=&quot;xml/xalan-2.7.0.jar&quot; /&gt;
+			&lt;file name=&quot;xml/xercesImpl-2.4.0.jar&quot; /&gt;
+			&lt;file name=&quot;xml/xml-apis-1.3.02.jar&quot; /&gt;
+			&lt;file name=&quot;j2ee/servlet-api.jar&quot; /&gt;
+			&lt;file name=&quot;cobertura/cobertura.jar&quot; /&gt;
+			&lt;file name=&quot;cobertura/asm-3.0.jar&quot; /&gt;
+			&lt;file name=&quot;cobertura/asm-tree-3.0.jar&quot; /&gt;
+			&lt;file name=&quot;cobertura/jakarta-oro-2.0.8.jar&quot; /&gt;
+			&lt;file name=&quot;cobertura/log4j-1.2.9.jar&quot; /&gt;
 		&lt;/filelist&gt;
 	&lt;/path&gt;
 
@@ -360,18 +354,39 @@
 	&lt;target name=&quot;step-compile&quot;&gt;
 		&lt;delete dir=&quot;bin/classes&quot; /&gt;
 		&lt;mkdir dir=&quot;bin/classes&quot; /&gt;
-		&lt;javac destdir=&quot;bin/classes&quot; deprecation=&quot;true&quot; debug=&quot;true&quot; optimize=&quot;false&quot; excludes=&quot;&quot; source=&quot;1.5&quot; target=&quot;jsr14&quot; srcdir=&quot;src/Java&quot;&gt;
+		&lt;!--
+		Use following arguments to compile Java 1.5 code for JVM 1.4
+			source=&quot;1.5&quot;
+			target=&quot;jsr14&quot;
+		--&gt;
+		&lt;javac
+			destdir=&quot;bin/classes&quot;
+			deprecation=&quot;false&quot;
+			debug=&quot;true&quot;
+			optimize=&quot;false&quot;
+			excludes=&quot;&quot;
+			srcdir=&quot;src/java&quot;
+		&gt;
 			&lt;classpath refid=&quot;java.compile.classpath&quot; /&gt;
 		&lt;/javac&gt;
-		&lt;javac destdir=&quot;bin/classes&quot; deprecation=&quot;false&quot; debug=&quot;true&quot; optimize=&quot;false&quot; excludes=&quot;&quot; source=&quot;1.5&quot; target=&quot;jsr14&quot; srcdir=&quot;test/Java&quot;&gt;
+		&lt;javac
+			destdir=&quot;bin/classes&quot;
+			deprecation=&quot;false&quot;
+			debug=&quot;true&quot;
+			optimize=&quot;false&quot;
+			excludes=&quot;&quot;
+			srcdir=&quot;test/java&quot;
+		&gt;
 			&lt;classpath refid=&quot;java.compile.classpath&quot; /&gt;
 		&lt;/javac&gt;
 	&lt;/target&gt;
 
 	&lt;target name=&quot;step-tmx-convert&quot;&gt;
+		&lt;mkdir dir=&quot;${temp.dir}/resources&quot; /&gt;
 		&lt;mkdir dir=&quot;src/WebContent/js/domderrien/i18n/nls&quot; /&gt;
 		&lt;java classname=&quot;domderrien.build.TMXConverter&quot; fork=&quot;true&quot;&gt;
 			&lt;classpath refid=&quot;tmxconverter.classpath&quot; /&gt;
+			&lt;classpath location=&quot;${temp.dir}/resources&quot; /&gt;
 			&lt;jvmarg value=&quot;-Dfile.encoding=UTF-8&quot; /&gt;
 			&lt;arg value=&quot;-tmxFilenameBase&quot; /&gt;
 			&lt;arg value=&quot;${dd2tu.localizedLabelBaseFilename}&quot; /&gt;
@@ -380,14 +395,14 @@
 			&lt;arg value=&quot;-jsDestPath&quot; /&gt;
 			&lt;arg value=&quot;${basedir}\src\WebContent\js\domderrien\i18n\nls&quot; /&gt;
 			&lt;arg value=&quot;-javaDestPath&quot; /&gt;
-			&lt;arg value=&quot;${temp.dir}&quot; /&gt;
+			&lt;arg value=&quot;${temp.dir}/resources&quot; /&gt;
 			&lt;arg value=&quot;-languageFilenameBase&quot; /&gt;
 			&lt;arg value=&quot;${dd2tu.languageListFilename}&quot; /&gt;
 			&lt;arg value=&quot;-buildStamp&quot; /&gt;
 			&lt;arg value=&quot;${dd2tu.stageId}&quot; /&gt;
 		&lt;/java&gt;
-		&lt;native2ascii src=&quot;${temp.dir}&quot; dest=&quot;bin/classes&quot; encoding=&quot;UTF8&quot; includes=&quot;*.properties-utf8&quot; ext=&quot;.properties&quot; /&gt;
-		&lt;copy file=&quot;bin/classes/${dd2tu.localizedLabelBaseFilename}.properties&quot; tofile=&quot;bin/classes/${dd2tu.localizedLabelBaseFilename}_en.properties&quot; /&gt;
+		&lt;native2ascii src=&quot;${temp.dir}/resources&quot; dest=&quot;${temp.dir}/resources&quot; encoding=&quot;UTF8&quot; includes=&quot;*.properties-utf8&quot; ext=&quot;.properties&quot; /&gt;
+		&lt;!--copy file=&quot;bin/classes/${dd2tu.localizedLabelBaseFilename}.properties&quot; tofile=&quot;${temp.dir}/resources/${dd2tu.localizedLabelBaseFilename}_en.properties&quot; /--&gt;
 		&lt;mkdir dir=&quot;src/WebContent/js/domderrien/i18n/nls/en&quot; /&gt;
 		&lt;copy file=&quot;src/WebContent/js/domderrien/i18n/nls/${dd2tu.localizedLabelBaseFilename}.js&quot; todir=&quot;src/WebContent/js/domderrien/i18n/nls/en&quot; /&gt;
 	&lt;/target&gt;
@@ -551,7 +566,13 @@
 
 	&lt;target name=&quot;step-cobertura-instrument&quot;&gt;
 		&lt;!-- Remove the coverage data file.--&gt;
+		&lt;delete file=&quot;cobertura.ser&quot;/&gt;
 		&lt;delete dir=&quot;bin/instrumented&quot; /&gt;
+		&lt;delete verbose=&quot;true&quot; failonerror=&quot;false&quot;&gt;
+			&lt;fileset dir=&quot;bin/classes&quot;&gt;
+				&lt;include name=&quot;*.properties&quot; /&gt;
+			&lt;/fileset&gt;
+		&lt;/delete&gt;
 
 		&lt;!--Instrument the application classes	--&gt;
 		&lt;cobertura-instrument todir=&quot;bin/instrumented&quot;&gt;
@@ -571,12 +592,21 @@
 		&lt;mkdir dir=&quot;docs/test-reports&quot; /&gt;
 		&lt;mkdir dir=&quot;docs/test-reports/junit-xml&quot; /&gt;
 		&lt;mkdir dir=&quot;docs/test-reports/junit-html&quot; /&gt;
-		&lt;junit dir=&quot;${basedir}&quot; failureProperty=&quot;junit.test.failed&quot; fork=&quot;yes&quot; printSummary=&quot;yes&quot; haltonerror=&quot;true&quot; haltonfailure=&quot;true&quot; timeout=&quot;10000&quot; maxmemory=&quot;512M&quot;&gt;
+		&lt;junit
+			dir=&quot;${basedir}&quot;
+			failureProperty=&quot;junit.test.failed&quot;
+			fork=&quot;yes&quot;
+			printSummary=&quot;yes&quot;
+			haltonerror=&quot;true&quot;
+			haltonfailure=&quot;true&quot;
+			timeout=&quot;10000&quot;
+			maxmemory=&quot;512M&quot;
+		&gt;
 			&lt;classpath location=&quot;bin/instrumented&quot; /&gt;
-			&lt;!-- Important: instrumented classes are before the original (uninstrumented) classes. --&gt;
 			&lt;classpath location=&quot;bin/classes&quot; /&gt;
+			&lt;!-- Important: instrumented classes are before the original (uninstrumented) classes. --&gt;
 			&lt;classpath refid=&quot;cobertura.classpath&quot; /&gt;
-			&lt;classpath location=&quot;src/resources&quot; /&gt;
+			&lt;classpath location=&quot;${temp.dir}/resources&quot; /&gt;
 
 			&lt;formatter type=&quot;xml&quot; /&gt;
 			&lt;formatter usefile=&quot;false&quot; type=&quot;plain&quot; /&gt;</diff>
      <filename>build/build.xml</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>deps/lib/cobertura/cobertura.jar</filename>
    </modified>
    <modified>
      <diff>@@ -9,8 +9,15 @@ public class LabelExtractor
 {
     static public final String ERROR_MESSAGE_PREFIX = &quot;errMsg_&quot;;
 
+    public enum ResourceFileId {
+        master,
+        second,
+        third,
+        fourth
+    }
+
     /**
-     * Return the message associated to the given error code.
+     * Return the message associated to the given error code, extracted from the master resource file.
      *
      * @param errorCode Error code
      * @param locale    Optional locale instance, use to determine in which
@@ -21,7 +28,23 @@ public class LabelExtractor
      *         association is found, the message identifier is returned.
      */
     public static String get(int errorCode, Locale locale) {
-        return get(errorCode, null, locale);
+        return get(ResourceFileId.master, errorCode, locale);
+    }
+
+    /**
+     * Return the message associated to the given error code, extracted from the identifier resource file.
+     *
+     * @param errorCode Error code
+     * @param resId     Identifier of the resource file where the localized data should be extracted from
+     * @param locale    Optional locale instance, use to determine in which
+     *                  resource files the label should be found. If the
+     *                  reference is &lt;code&gt;null&lt;/code&gt;, the root resource
+     *                  bundle is used (written in English).
+     * @return A localized label associated to the given error code. If no
+     *         association is found, the message identifier is returned.
+     */
+    public static String get(ResourceFileId resId, int errorCode, Locale locale) {
+        return get(ResourceFileId.master, errorCode, null, locale);
     }
 
     /**
@@ -38,8 +61,26 @@ public class LabelExtractor
      *         association is found, the message identifier is returned.
      */
     public static String get(int errorCode, Object[] parameters,  Locale locale) {
+        return get(ResourceFileId.master, errorCode, parameters, locale);
+    }
+
+    /**
+     * Return the message associated to the given error code.
+     *
+     * @param errorCode Error code
+     * @param resId     Identifier of the resource file where the localized data should be extracted from
+     * @param parameters Array of parameters, each one used to replace a
+     *                   pattern made of a number between curly braces.
+     * @param locale    Optional locale instance, use to determine in which
+     *                  resource files the label should be found. If the
+     *                  reference is &lt;code&gt;null&lt;/code&gt;, the root resource
+     *                  bundle is used (written in English).
+     * @return A localized label associated to the given error code. If no
+     *         association is found, the message identifier is returned.
+     */
+    public static String get(ResourceFileId resId, int errorCode, Object[] parameters,  Locale locale) {
         String prefix = ERROR_MESSAGE_PREFIX;
-        String label = get(prefix + errorCode, parameters, locale);
+        String label = get(resId, prefix + errorCode, parameters, locale);
         if (label.startsWith(prefix)) {
             return String.valueOf(errorCode);
         }
@@ -58,7 +99,23 @@ public class LabelExtractor
      *         association is found, the message identifier is returned.
      */
     public static String get(String messageId, Locale locale) {
-        return get(messageId, null, locale);
+        return get(ResourceFileId.master, messageId, locale);
+    }
+
+    /**
+     * Return the message associated to the given identifier.
+     *
+     * @param messageId Identifier used to retrieve the localized label.
+     * @param resId     Identifier of the resource file where the localized data should be extracted from
+     * @param locale    Optional locale instance, use to determine in which
+     *                  resource files the label should be found. If the
+     *                  reference is &lt;code&gt;null&lt;/code&gt;, the root resource
+     *                  bundle is used (written in English).
+     * @return A localized label associated to the given error code. If no
+     *         association is found, the message identifier is returned.
+     */
+    public static String get(ResourceFileId resId, String messageId, Locale locale) {
+        return get(resId, messageId, null, locale);
     }
 
     /**
@@ -75,10 +132,28 @@ public class LabelExtractor
      *         association is found, the message identifier is returned.
      */
     public static String get(String messageId, Object[] parameters, Locale locale) {
+        return get(ResourceFileId.master, messageId, parameters, locale);
+    }
+
+    /**
+     * Return the message associated to the given identifier.
+     *
+     * @param messageId  Identifier used to retrieve the localized label.
+     * @param resId     Identifier of the resource file where the localized data should be extracted from
+     * @param parameters Array of parameters, each one used to replace a
+     *                   pattern made of a number between curly braces.
+     * @param locale     Optional locale instance, use to determine in which
+     *                   resource files the label should be found. If the
+     *                   reference is &lt;code&gt;null&lt;/code&gt;, the root resource
+     *                   bundle is used (written in English).
+     * @return A localized label associated to the given error code. If no
+     *         association is found, the message identifier is returned.
+     */
+    public static String get(ResourceFileId resId, String messageId, Object[] parameters, Locale locale) {
         String label = messageId;
         if (messageId != null &amp;&amp; 0 &lt; messageId.length()) {
             try {
-                ResourceBundle labels = getResourceBundle(locale);
+                ResourceBundle labels = getResourceBundle(resId, locale);
                 label = labels.getString(messageId);
             }
             catch (MissingResourceException ex) {
@@ -114,13 +189,17 @@ public class LabelExtractor
     /*------------------------------------------------------------------*/
     /*------------------------------------------------------------------*/
 
-    protected static HashMap&lt;String, ResourceBundle&gt; resourceBundles = new HashMap&lt;String, ResourceBundle&gt;();
+    protected static HashMap&lt;String, ResourceBundle&gt; masterResourceBundleSet = new HashMap&lt;String, ResourceBundle&gt;();
+    protected static HashMap&lt;String, ResourceBundle&gt; secondResourceBundleSet = new HashMap&lt;String, ResourceBundle&gt;();
+    protected static HashMap&lt;String, ResourceBundle&gt; thirdResourceBundleSet = new HashMap&lt;String, ResourceBundle&gt;();
+    protected static HashMap&lt;String, ResourceBundle&gt; fourthResourceBundleSet = new HashMap&lt;String, ResourceBundle&gt;();
 
     /**
      * Provides a reset mechanism for the unit test suite
+     * @param resId Identifier of the resource file set to manipulate
      */
-    protected static void resetResourceBundleList() {
-        resourceBundles.clear();
+    protected static void resetResourceBundleList(ResourceFileId resId) {
+        masterResourceBundleSet.clear();
     }
 
     /**
@@ -138,13 +217,15 @@ public class LabelExtractor
 
     /**
      * Protected setter made available for the unit testing
+     *
+     * @param resId Identifier of the resource file set to manipulate
      * @param rb Mock resource bundle
      * @param locale Locale associated to the mock resource bundle
      */
-    protected static ResourceBundle setResourceBundle(ResourceBundle rb, Locale locale) {
+    protected static ResourceBundle setResourceBundle(ResourceFileId resId, ResourceBundle rb, Locale locale) {
         String rbId = getResourceBundleId(locale);
-        ResourceBundle previousRB = resourceBundles.get(rbId);
-        resourceBundles.put(rbId, rb);
+        ResourceBundle previousRB = masterResourceBundleSet.get(rbId);
+        masterResourceBundleSet.put(rbId, rb);
         return previousRB;
     }
 
@@ -152,18 +233,27 @@ public class LabelExtractor
      * Retrieve the application resource bundle with the list of supported languages.
      * Specified protected only to ease the unit testing (IOP).
      *
+     * @param resId Identifier of the resource file where the localized data should be extracted from
      * @param locale locale to use when getting the resource bundle
+     *
      * @return The already resolved/set resource bundle or the one expected at runtime
      * @throws MissingResourceException
      */
-    protected static ResourceBundle getResourceBundle(Locale locale) throws MissingResourceException {
+    protected static ResourceBundle getResourceBundle(ResourceFileId resId, Locale locale) throws MissingResourceException {
         String rbId = getResourceBundleId(locale);
-        ResourceBundle rb = (ResourceBundle) resourceBundles.get(rbId);
+        ResourceBundle rb = (ResourceBundle) masterResourceBundleSet.get(rbId);
+        if (ResourceFileId.second.equals(resId)) { rb = (ResourceBundle) secondResourceBundleSet.get(rbId); }
+        else if (ResourceFileId.third.equals(resId)) { rb = (ResourceBundle) thirdResourceBundleSet.get(rbId); }
+        else if (ResourceFileId.fourth.equals(resId)) { rb = (ResourceBundle) fourthResourceBundleSet.get(rbId); }
         if (rb == null) {
             // Get the resource bundle filename from the application settings and return the identified file
-            ResourceBundle applicationSettings = ResourceBundle.getBundle(&quot;domderrien-i18n&quot;, locale); //$NON-NLS-1$
-            rb = ResourceBundle.getBundle(applicationSettings.getString(&quot;localizedLabelFilename&quot;), locale);
-            resourceBundles.put(rbId, rb);
+            ResourceBundle applicationSettings = ResourceBundle.getBundle(ResourceNameDefinitions.CONFIG_PROPERTIES_FILENAME, locale);
+            String keyForLookup = ResourceNameDefinitions.MASTER_TMX_FILENAME_KEY;
+            if (ResourceFileId.second.equals(resId)) { keyForLookup = ResourceNameDefinitions.SECOND_TMX_FILENAME_KEY; }
+            else if (ResourceFileId.third.equals(resId)) { keyForLookup = ResourceNameDefinitions.THIRD_TMX_FILENAME_KEY; }
+            else if (ResourceFileId.fourth.equals(resId)) { keyForLookup = ResourceNameDefinitions.FOURTH_TMX_FILENAME_KEY; }
+            rb = ResourceBundle.getBundle(applicationSettings.getString(keyForLookup), locale);
+            masterResourceBundleSet.put(rbId, rb);
         }
         return rb;
     }</diff>
      <filename>src/Java/domderrien/i18n/LabelExtractor.java</filename>
    </modified>
    <modified>
      <diff>@@ -50,8 +50,8 @@ public class LocaleController
             return languageListRB;
         }
         // Get the resource bundle filename from the application settings and return the identified file
-        ResourceBundle applicationSettings = ResourceBundle.getBundle(&quot;domderrien-i18n&quot;, DEFAULT_LOCALE); //$NON-NLS-1$
-        return ResourceBundle.getBundle(applicationSettings.getString(&quot;languageListFilename&quot;), DEFAULT_LOCALE); //$NON-NLS-1$
+        ResourceBundle applicationSettings = ResourceBundle.getBundle(ResourceNameDefinitions.CONFIG_PROPERTIES_FILENAME, DEFAULT_LOCALE);
+        return ResourceBundle.getBundle(applicationSettings.getString(ResourceNameDefinitions.LANGUAGE_LIST_FILENAME_KEY), DEFAULT_LOCALE);
 
     }
 </diff>
      <filename>src/Java/domderrien/i18n/LocaleController.java</filename>
    </modified>
    <modified>
      <diff>@@ -76,10 +76,16 @@ public class JsonException extends Exception implements JsonObject {
         put(&quot;exceptionMessage&quot;, super.getMessage());
     }
 
+    /** Accessor to ease the behavior injection for the unit tests
+     * @throws IOException If the buffer creation fails*/
+    protected OutputStream getOutputStream() throws IOException {
+        return new ByteArrayOutputStream();
+    }
+
     @Override
     public String toString() {
         try {
-            OutputStream fakeOutput = new ByteArrayOutputStream();
+            OutputStream fakeOutput = getOutputStream();
             toStream(fakeOutput, true);
             return fakeOutput.toString();
         }</diff>
      <filename>src/Java/domderrien/jsontools/JsonException.java</filename>
    </modified>
    <modified>
      <diff>@@ -235,8 +235,11 @@ public class JsonParser {
     protected Object parseValue() throws JsonException {
         Object obj = null;
         switch(stream.peek(true)) {
-            case JsonDelimiters.QUOTE:
-            case JsonDelimiters.DOUBLE_QUOTES:
+            case JsonDelimiters.QUOTE: // Same as JsonDelimiters.DOUBLE_QUOTES:
+                obj = parseString();
+                s_logger.finest(&quot;String extracted: &quot; + obj);
+                break;
+            case JsonDelimiters.DOUBLE_QUOTES: // same as JsonDelimiters.QUOTE:
                 obj = parseString();
                 s_logger.finest(&quot;String extracted: &quot; + obj);
                 break;
@@ -248,8 +251,11 @@ public class JsonParser {
                 obj = parseJsonArray();
                 s_logger.finest(&quot;&lt;GenericJsonArray&gt; extracted&quot;);
                 break;
-            case JsonDelimiters.TRUE_LABEL_FIRST_CHAR:
-            case JsonDelimiters.FALSE_LABEL_FIRST_CHAR:
+            case JsonDelimiters.TRUE_LABEL_FIRST_CHAR: // Same as FALSE_LABEL_FIRST_CHAR
+                obj = parseBoolean();
+                s_logger.finest(&quot;Boolean extracted: &quot; + obj);
+                break;
+            case JsonDelimiters.FALSE_LABEL_FIRST_CHAR: // Same as TRUE_LABEL_FIRST_CHAR
                 obj = parseBoolean();
                 s_logger.finest(&quot;Boolean extracted: &quot; + obj);
                 break;
@@ -268,6 +274,7 @@ public class JsonParser {
             default: // assume it's a number
                 obj = parseNumber();
                 s_logger.finest(&quot;Number extracted: &quot; + obj);
+                break;
         }
         return obj;
     }
@@ -280,7 +287,7 @@ public class JsonParser {
             char c = stream.get(false);
             if(c==JsonDelimiters.BACK_SLASH) {
                 char next = stream.get(false);
-                char unescaped;
+                char unescaped = JsonDelimiters.SPACE;
                 switch(next) {
                     case JsonDelimiters.QUOTE:              unescaped=JsonDelimiters.QUOTE; break;
                     case JsonDelimiters.DOUBLE_QUOTES:      unescaped=JsonDelimiters.DOUBLE_QUOTES; break;
@@ -293,9 +300,11 @@ public class JsonParser {
                     case JsonDelimiters.TABULATION_ID:      unescaped=JsonDelimiters.TABULATION; break;
                     case JsonDelimiters.UNICODE_ID:   //TODO
                         // (for now, fall through to an error)
+                        reportError(&quot;Unescaping unicode sequence not yet supported.&quot;);
+                        // break; Not needed because reportError() throws an exception
                     default:
-                        unescaped = JsonDelimiters.END_OF_STRING; //makes javac happy
                         reportError(&quot;After &quot; + JsonDelimiters.BACK_SLASH + &quot;, unexpected character &quot; + next + &quot;(&quot; + ((int) next) + &quot;)&quot;);
+                        // break; Not needed because reportError() throws an exception
                 }
                 str.append(unescaped);
             } else {</diff>
      <filename>src/Java/domderrien/jsontools/JsonParser.java</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,7 @@ public class MockOutputStream extends OutputStream {
     private StringBuilder stream = new StringBuilder();
 
     public MockOutputStream() {
-        this(0);
+        this(-1); // Default: no limit
     }
 
     private int limit;
@@ -38,7 +38,7 @@ public class MockOutputStream extends OutputStream {
 
     @Override
     public void write(int b) throws IOException {
-        if (index &lt; limit) {
+        if (limit == -1 || index &lt; limit) {
             stream.append((char) b);
             ++ index;
         }</diff>
      <filename>src/Java/domderrien/mocks/MockOutputStream.java</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,3 @@
 ({bundle_language:&quot;English&quot;,
 unit_test_sample:&quot;N/A&quot;,
-x_timeStamp:&quot;20090923.1435&quot;})
\ No newline at end of file
+x_timeStamp:&quot;20090926.1005&quot;})</diff>
      <filename>src/WebContent/js/domderrien/i18n/nls/domderrien-labels.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,3 @@
 ({bundle_language:&quot;English&quot;,
 unit_test_sample:&quot;N/A&quot;,
-x_timeStamp:&quot;20090923.1435&quot;})
\ No newline at end of file
+x_timeStamp:&quot;20090926.1005&quot;})</diff>
      <filename>src/WebContent/js/domderrien/i18n/nls/en/domderrien-labels.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,3 @@
 ({bundle_language:&quot;Fran&#231;ais Canadien&quot;,
 unit_test_sample:&quot;N/A&quot;,
-x_timeStamp:&quot;20090923.1435&quot;})
\ No newline at end of file
+x_timeStamp:&quot;20090928.1216&quot;})
\ No newline at end of file</diff>
      <filename>src/WebContent/js/domderrien/i18n/nls/fr-ca/domderrien-labels.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,3 @@
 ({bundle_language:&quot;Fran&#231;ais&quot;,
 unit_test_sample:&quot;N/A&quot;,
-x_timeStamp:&quot;20090923.1435&quot;})
\ No newline at end of file
+x_timeStamp:&quot;20090926.1005&quot;})</diff>
      <filename>src/WebContent/js/domderrien/i18n/nls/fr/domderrien-labels.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,21 @@
 # Settings related to the localized resource bundles
-languageListFilename=@dd2tu.languageListFilename@
-localizedLabelBaseFilename=@dd2tu.localizedLabelBaseFilename@
\ No newline at end of file
+
+# Name of the Java Properties file containing the list of supported languages
+# - This file contains one entry per supported language
+# - The keys are ISO language codes (like 'en', 'fr_CA', etc.)
+# - The values are the localized language names (like 'English', 'Fran&#231;ais canadien', etc.)
+#
+language-list-filename=@dd2tu.languageListFilename@
+
+# Name of the default resource filename base
+# - Can be 'ui-catalog' used to access 'ui-catalog_fr_CA.properties' and 'fr-ca/ui-catalog.js'
+# - This base is used to generically to access translated resource accross different programming languages
+# - Used specifically by the LabelExtractor classes (Java, JavaScript, and Python) as the default name for the localized resources
+#
+master-tmx-filename=@dd2tu.localizedLabelBaseFilename@
+
+2nd-tmx-filename=@dd2tu.localizedLabelBaseFilename@
+
+3rd-tmx-filename=@dd2tu.localizedLabelBaseFilename@
+
+4th-tmx-filename=@dd2tu.localizedLabelBaseFilename@</diff>
      <filename>src/resources/domderrien-i18n.properties</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,7 @@
 package domderrien.build;
 
+import static org.junit.Assert.*;
+
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -18,15 +20,15 @@ import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
-import junit.framework.TestCase;
-
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.SAXException;
 
-public class TestTMXConverter extends TestCase {
+public class TestTMXConverter {
 
     class MockOutputStream extends OutputStream {
         StringBuffer stream = new StringBuffer();
@@ -42,6 +44,14 @@ public class TestTMXConverter extends TestCase {
         }
     }
 
+    @Before
+    public void setUp() throws Exception {
+    }
+
+    @After
+    public void tearDown() throws Exception {
+    }
+
     @Test
     public void testMain() {
         // Cannot be unit tested because it will
@@ -52,7 +62,7 @@ public class TestTMXConverter extends TestCase {
     @Test
     public void testStopProcess() {
         // Just verify the correct call
-        // Note that the entire method paths can't be coverted
+        // Note that the entire method paths can't be converted
         // because of the call to &quot;System.exit(1)&quot;
         TMXConverter converter = new TMXConverter(false);
         converter.stopProcess();
@@ -78,16 +88,12 @@ public class TestTMXConverter extends TestCase {
         converter.displayUsage();
     }
 
-    @Test
+    @Test(expected = NullPointerException.class)
     public void testSetContextI() {
-        try
-        {
-            // Exception expected because the &lt;code&gt;null&lt;/code&gt; value is not checked
-            TMXConverter converter = new TMXConverter(false);
-            converter.setContext(null);
-            fail(&quot;NullPointerException should have been thrown&quot;);
-        }
-        catch (NullPointerException ex) { } // Expected exception
+        // Exception expected because the &lt;code&gt;null&lt;/code&gt; value is not checked
+        TMXConverter converter = new TMXConverter(false);
+        converter.setContext(null);
+        fail(&quot;NullPointerException should have been thrown&quot;);
     }
 
     @Test
@@ -358,19 +364,22 @@ public class TestTMXConverter extends TestCase {
         assertFalse(converter.getProcessStopped());
     }
 
-    @Test
-    public void testGetDocumentedLanguages()
+    @Test(expected = MissingResourceException.class)
+    public void testGetDocumentedLanguagesI()
     {
         TMXConverter converter = new TMXConverter(false);
         converter.setLanguageFilenameBase(&quot;nop&quot;);
-        try
-        {
-            converter.getDocumentedLanguages();
-            fail(&quot;Exception expected&quot;);
-        }
-        catch(MissingResourceException ex) {
-            // Expected exception
-        }
+        converter.getDocumentedLanguages();
+        fail(&quot;Exception expected&quot;);
+    }
+
+    @Test
+    public void testGetDocumentedLanguagesII()
+    {
+        TMXConverter converter = new TMXConverter(false);
+        converter.setLanguageFilenameBase(&quot;domderrien-languages&quot;);
+        ResourceBundle rb = converter.getDocumentedLanguages();
+        assertEquals(rb, converter.getDocumentedLanguages());
     }
 
     @Test
@@ -860,41 +869,27 @@ public class TestTMXConverter extends TestCase {
         assertTrue(converter.getProcessStopped());
     }
 
-    @Test
-    public void testGetInputStream()
+    @Test(expected = FileNotFoundException.class)
+    public void testGetInputStream() throws FileNotFoundException
     {
         TMXConverter converter = new TMXConverter(false);
-        try
-        {
-            // Delete the file to force the exception throwing
-            (new File(System.getProperty(&quot;user.dir&quot;) + File.separator + &quot;nop&quot;)).delete();
-            converter.getInputStream(System.getProperty(&quot;user.dir&quot;) + File.separator + &quot;nop&quot;);
-            fail(&quot;FileNotFoundException expected&quot;);
-        }
-        catch (FileNotFoundException e)
-        {
-            // Expected exception
-        }
+        // Delete the file to force the exception throwing
+        (new File(System.getProperty(&quot;user.dir&quot;) + File.separator + &quot;nop&quot;)).delete();
+        converter.getInputStream(System.getProperty(&quot;user.dir&quot;) + File.separator + &quot;nop&quot;);
+        fail(&quot;FileNotFoundException expected&quot;);
     }
 
     @Test
-    public void testGetOutputStream()
+    public void testGetOutputStream() throws FileNotFoundException
     {
         TMXConverter converter = new TMXConverter(false);
-        try
-        {
-            // Delete the file after creation
-            converter.getOutputStream(System.getProperty(&quot;user.dir&quot;) + File.separator + &quot;nop&quot;);
-            (new File(System.getProperty(&quot;user.dir&quot;) + File.separator + &quot;nop&quot;)).delete();
-        }
-        catch (FileNotFoundException e)
-        {
-            fail(&quot;FileNotFoundException expected&quot;);
-        }
+        // Delete the file after creation
+        converter.getOutputStream(System.getProperty(&quot;user.dir&quot;) + File.separator + &quot;nop&quot;);
+        (new File(System.getProperty(&quot;user.dir&quot;) + File.separator + &quot;nop&quot;)).delete();
     }
 
     @Test
-    public void testConvertI()
+    public void testConvertI() throws IOException
     {
         // Verify the process of the base file
         TMXConverter converter = new TMXConverter(false) {
@@ -933,19 +928,11 @@ public class TestTMXConverter extends TestCase {
         };
 
         converter.setTMXFilenameBase(&quot;nop&quot;);
-
-        try
-        {
-            converter.convert(&quot;nop&quot;);
-        }
-        catch(IOException ex)
-        {
-            fail(&quot;No exception expected in this test case&quot;);
-        }
+        converter.convert(&quot;nop&quot;);
     }
 
     @Test
-    public void testConvertII()
+    public void testConvertII() throws IOException
     {
         // Verify the process of a correctly localized file
         TMXConverter converter = new TMXConverter(false) {
@@ -999,19 +986,11 @@ public class TestTMXConverter extends TestCase {
         };
 
         converter.setTMXFilenameBase(&quot;nop&quot;);
-
-        try
-        {
-            converter.convert(&quot;nop_fr&quot;);
-        }
-        catch(IOException ex)
-        {
-            fail(&quot;No exception expected in this test case&quot;);
-        }
+        converter.convert(&quot;nop_fr&quot;);
     }
 
-    @Test
-    public void testConvertIII()
+    @Test(expected = IOException.class)
+    public void testConvertIII() throws IOException
     {
         // Verify the exception handling when a subfolder related to a new locale cannot be created
         TMXConverter converter = new TMXConverter(false) {
@@ -1065,20 +1044,11 @@ public class TestTMXConverter extends TestCase {
         };
 
         converter.setTMXFilenameBase(&quot;nop&quot;);
-
-        try
-        {
-            converter.convert(&quot;nop_fr&quot;);
-            fail(&quot;No exception expected in this test case&quot;);
-        }
-        catch(IOException ex)
-        {
-            // Expected exception because the nested folder cannot be created
-        }
+        converter.convert(&quot;nop_fr&quot;);
     }
 
     @Test
-    public void testConvertIV()
+    public void testConvertIV() throws IOException
     {
         // Verify the process of a correctly localized file
         TMXConverter converter = new TMXConverter(false) {
@@ -1128,19 +1098,11 @@ public class TestTMXConverter extends TestCase {
         };
 
         converter.setTMXFilenameBase(&quot;nop&quot;);
-
-        try
-        {
-            converter.convert(&quot;nop_fr&quot;);
-        }
-        catch(IOException ex)
-        {
-            fail(&quot;No exception expected in this test case&quot;);
-        }
+        converter.convert(&quot;nop_fr&quot;);
     }
 
     @Test
-    public void testConvertV()
+    public void testConvertV() throws IOException
     {
         // Verify the process of a incorrectly localized file
         TMXConverter converter = new TMXConverter(false) {
@@ -1194,36 +1156,16 @@ public class TestTMXConverter extends TestCase {
         };
 
         converter.setTMXFilenameBase(&quot;nop&quot;);
-
-        try
-        {
-            converter.convert(&quot;nopfr&quot;);
-        }
-        catch(IOException ex)
-        {
-            fail(&quot;No exception expected in this test case&quot;);
-        }
+        converter.convert(&quot;nopfr&quot;);
     }
 
     @Test
-    public void testGetEntityResolver()
+    public void testGetEntityResolver() throws SAXException, IOException
     {
         // Normal call
         TMXConverter converter = new TMXConverter(false);
         EntityResolver resolver = converter.getEntityResolver();
-        try
-        {
-            resolver.resolveEntity(&quot;nop&quot;, &quot;nop&quot;);
-        }
-        catch (SAXException e)
-        {
-            fail(&quot;No expected exception&quot;);
-        }
-        catch (IOException e)
-        {
-            fail(&quot;No expected exception&quot;);
-        }
-
+        resolver.resolveEntity(&quot;nop&quot;, &quot;nop&quot;);
         assertFalse(converter.getProcessStopped());
     }
 
@@ -1560,6 +1502,7 @@ public class TestTMXConverter extends TestCase {
             &quot;&lt;/tu&gt;&quot; +
             &quot;&lt;tu tuid='2'&gt;&quot; +
                 &quot;&lt;prop type='x-tier'&gt;&quot; + TMXConverter.DOJO_TK + &quot;&lt;/prop&gt;&quot; +
+                &quot;&lt;prop type='x-tier'&gt;&quot; + TMXConverter.DOJO_TK + &quot;&lt;/prop&gt;&quot; +
                 &quot;&lt;tuv&gt;&quot; +
                     &quot;&lt;seg&gt;two&lt;/seg&gt;&quot; +
                 &quot;&lt;/tuv&gt;&quot; +
@@ -1608,11 +1551,12 @@ public class TestTMXConverter extends TestCase {
             &quot;&lt;/tu&gt;&quot; +
             &quot;&lt;tu tuid='2'&gt;&quot; +
                 &quot;&lt;prop type='x-tier'&gt;&quot; + TMXConverter.JAVA_RB + &quot;&lt;/prop&gt;&quot; +
+                &quot;&lt;prop type='x-tier'&gt;&quot; + TMXConverter.JAVA_RB + &quot;&lt;/prop&gt;&quot; +
                 &quot;&lt;tuv&gt;&quot; +
                     &quot;&lt;seg&gt;two&lt;/seg&gt;&quot; +
                 &quot;&lt;/tuv&gt;&quot; +
             &quot;&lt;/tu&gt;&quot; +
-        &quot;&lt;/body&gt;&lt;/tmx&gt;&quot;;
+            &quot;&lt;/body&gt;&lt;/tmx&gt;&quot;;
         InputStream tmxIS = new InputStream() {
             int idx = 0;
             @Override
@@ -1889,7 +1833,7 @@ public class TestTMXConverter extends TestCase {
     }
 
     @Test
-    public void testSaveSupportedLanguagesI()
+    public void testSaveSupportedLanguagesI() throws IOException
     {
         // Verify the process of the output stream
         TMXConverter converter = new TMXConverter(false) {
@@ -1913,14 +1857,7 @@ public class TestTMXConverter extends TestCase {
             }
         };
 
-        try
-        {
-            converter.saveSupportedLanguages();
-        }
-        catch(IOException ex)
-        {
-            fail(&quot;No exception expected in this test case&quot;);
-        }
+        converter.saveSupportedLanguages();
     }
 
     @Test
@@ -1998,13 +1935,25 @@ public class TestTMXConverter extends TestCase {
         assertTrue(stream.getStream().indexOf(&quot;en=English&quot;) != -1);
         assertTrue(stream.getStream().indexOf(&quot;pl=Polski&quot;) != -1);
     }
-    /*
-    public void testSaveSupportedLanguages() {
-        fail(&quot;Not yet implemented&quot;);
-    }
 
-    public void testSaveSupportedLanguagesOutputStream() {
-        fail(&quot;Not yet implemented&quot;);
+    @Test
+    public void testSaveSupportedLanguagesIV() throws IOException
+    {
+        // Verify the saving of the existing language definitions
+        Map&lt;String, String&gt; foundLanguages = new HashMap&lt;String, String&gt;();
+        foundLanguages.put(&quot;de&quot;, &quot;Deutsch&quot;);
+
+        TMXConverter converter = new TMXConverter(false) {
+            @Override
+            protected ResourceBundle getDocumentedLanguages() {
+                throw new MissingResourceException(&quot;Done in purpose&quot;, null, null);
+            }
+        };
+        converter.setLanguageMap(foundLanguages);
+        MockOutputStream stream = new MockOutputStream();
+
+        converter.saveSupportedLanguages(stream);
+        System.out.println(&quot;stream: &quot; + stream.getStream());
+        assertTrue(stream.getStream().indexOf(&quot;de=Deutsch&quot;) != -1);
     }
-    */
 }</diff>
      <filename>test/Java/domderrien/build/TestTMXConverter.java</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>deps/lib/junit/junit-4.5.jar</filename>
    </removed>
    <removed>
      <filename>test/Java/domderrien/i18n/TTestDateUtils.java</filename>
    </removed>
    <removed>
      <filename>test/Java/domderrien/i18n/TTestLabelExtractor.java</filename>
    </removed>
    <removed>
      <filename>test/Java/domderrien/i18n/TTestLocaleController.java</filename>
    </removed>
    <removed>
      <filename>test/Java/domderrien/jsontools/TTestGenericJsonArray.java</filename>
    </removed>
    <removed>
      <filename>test/Java/domderrien/jsontools/TTestGenericJsonObject.java</filename>
    </removed>
    <removed>
      <filename>test/Java/domderrien/jsontools/TTestJsonDelimiters.java</filename>
    </removed>
    <removed>
      <filename>test/Java/domderrien/jsontools/TTestJsonException.java</filename>
    </removed>
    <removed>
      <filename>test/Java/domderrien/jsontools/TTestJsonParser.java</filename>
    </removed>
    <removed>
      <filename>test/Java/domderrien/jsontools/TTestJsonSerializer.java</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>c571029ffa93056b6f256198af83dd15b34999d8</id>
    </parent>
  </parents>
  <author>
    <name>Dom Derrien</name>
    <email>dominique.derrien@gmail.com</email>
  </author>
  <url>http://github.com/DomDerrien/two-tiers-utils/commit/14a8ec9a7a736941e3bc03ba8ef422073a5d085a</url>
  <id>14a8ec9a7a736941e3bc03ba8ef422073a5d085a</id>
  <committed-date>2009-09-28T09:18:41-07:00</committed-date>
  <authored-date>2009-09-28T09:18:41-07:00</authored-date>
  <message>Provide support for loading localized data from many TMX derived files</message>
  <tree>8500ec31db9fd2866343eb0aa545495c8af8419a</tree>
  <committer>
    <name>Dom Derrien</name>
    <email>dominique.derrien@gmail.com</email>
  </committer>
</commit>
