Merge branch 'develop' into features/JAL-653_JAL-1766_htslib_refseqsupport
[jalview.git] / utils / i18nAnt.xml
diff --git a/utils/i18nAnt.xml b/utils/i18nAnt.xml
new file mode 100755 (executable)
index 0000000..47c404e
--- /dev/null
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<!--
+  Ant utilities to help with internationalisation of Jalview.
+  Require the additional antcontrib targets (jar file).
+-->
+<project name="jalviewLang" default="checkLang" basedir="..">
+
+<taskdef resource="net/sf/antcontrib/antcontrib.properties">
+  <classpath>
+    <pathelement location="${basedir}/utils/ant-contrib-0.3.jar"/>
+  </classpath>
+</taskdef>
+<taskdef resource="net/sf/antcontrib/antlib.xml"/>
+<target name="checkLang" description="Reports missing entries in language bundles compared to Message.properties">
+       <!-- adapted from http://stackoverflow.com/questions/14381660/ant-task-to-compare-two-properties-files -->
+       <!-- reduce logging level so 'reportMissingProperty' does not clutter up the output -->
+       <script language="javascript">
+        var logger = project.getBuildListeners( ).firstElement( );
+        logger.setMessageOutputLevel( 1 );
+    </script>
+       <echo message="Missing message labels compared to Messages.properties"/>
+       <foreach target="compareProperties" param="file2">
+               <path>
+                       <fileset dir="${basedir}/resources/lang">
+                               <exclude name="Messages.properties" />
+                       </fileset>
+               </path>
+       </foreach>
+</target>
+
+<target name="compareProperties" description="reports missing entries in one message bundle">
+    <loadproperties srcFile="resources/lang/Messages.properties" prefix="prefixfile1"/>
+    <loadproperties srcFile="${file2}" prefix="prefixfile2"/>
+
+    <propertyselector property="file1.list" delimiter="," match="prefixfile1\.(.+)" select="\1"/>
+    <propertyselector property="file2.list" delimiter="," match="prefixfile2\.(.+)" select="\1"/>
+       
+       <echo message=" "/>
+       <echo message="*** ${file2}:" />
+    <for list="${file1.list}" param="file1.property">
+        <sequential>
+            <if>
+                <not>
+                    <matches pattern=",@{file1.property}," string=",${file2.list}," />
+                </not>
+                <then>
+                    <property name="some_missing" value="true"/>
+                       <antcall target="reportMissingProperty">
+                               <param name="textLabel" value="@{file1.property}"/>
+                               <param name="prefixedPropertyName" value="prefixfile1.@{file1.property}" />
+                       </antcall>
+                </then>
+            </if>
+        </sequential>
+    </for>
+    <if>
+        <not>
+            <isset property="some_missing"/>
+        </not>
+        <then>
+               <echo>No labels missing :-)</echo>
+        </then>
+    </if>
+</target>
+
+<target name="reportMissingProperty" description="double dereference 'prefixedPropertyName' and report missing language property">
+       <propertycopy name="textValue" from="${prefixedPropertyName}"/>
+       <!-- output the property name (message label) and value (English text) -->
+    <echo message="${textLabel}=${textValue}"/>
+</target>
+
+</project>