--- /dev/null
+<?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>
+ <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"/>
+
+ <for list="${file1.list}" param="file1.property">
+ <sequential>
+ <if>
+ <not>
+ <matches pattern=",@{file1.property}," string=",${file2.list}," />
+ </not>
+ <then>
+ <if>
+ <not>
+ <isset property="some_missing"/>
+ </not>
+ <then>
+ <echo message=" "/>
+ <echo>**** Missing in ${file2}: ****</echo>
+ </then>
+ </if>
+ <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>
+</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>