r1843 - in trunk/maven-i18n-plugin/src: it/parsers/newProject it/parsers/newProject/src/main/java/org/nuiton/i18n/test it/parsers/withNewKeys it/parsers/withNewKeys/src/main/java/org/nuiton/i18n/test main/java/org/nuiton/i18n/plugin main/java/org/nuiton/i18n/plugin/parser/impl
Author: tchemit Date: 2011-01-19 21:29:56 +0100 (Wed, 19 Jan 2011) New Revision: 1843 Url: http://nuiton.org/repositories/revision/i18n/1843 Log: Evolution #1208: Be able to force locale for translation - change parser to detect the new keys from the l_(Locale,String,...) method - improve its - use now I18nFilter inside the ParserJavaMojo and no more the one from processor project Modified: trunk/maven-i18n-plugin/src/it/parsers/newProject/pom.xml trunk/maven-i18n-plugin/src/it/parsers/newProject/src/main/java/org/nuiton/i18n/test/MyBean.java trunk/maven-i18n-plugin/src/it/parsers/newProject/verify.groovy trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/pom.xml trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/src/main/java/org/nuiton/i18n/test/MyBean.java trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/verify.groovy trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateMojo.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GetterMojo.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/impl/ParserJavaMojo.java Modified: trunk/maven-i18n-plugin/src/it/parsers/newProject/pom.xml =================================================================== --- trunk/maven-i18n-plugin/src/it/parsers/newProject/pom.xml 2011-01-19 16:24:40 UTC (rev 1842) +++ trunk/maven-i18n-plugin/src/it/parsers/newProject/pom.xml 2011-01-19 20:29:56 UTC (rev 1843) @@ -55,6 +55,11 @@ </dependencies> + <properties> + <i18n.bundles>fr_FR,en_GB</i18n.bundles> + <i18n.verbose>true</i18n.verbose> + <i18n.keepGetters>true</i18n.keepGetters> + </properties> <build> <plugins> @@ -92,7 +97,16 @@ </configuration> </execution> <execution> - <!-- this execution is to test thread with no files --> + <id>gen</id> + <goals> + <goal>gen</goal> + </goals> + <!--<configuration>--> + <!--<keepGetters>true</keepGetters>--> + <!--</configuration>--> + </execution> + <!-- this execution is to test thread with no files --> + <!--execution> <id>second</id> <goals> <goal>parserJava</goal> @@ -101,7 +115,7 @@ <goal>parserGWTJava</goal> </goals> <phase>compile</phase> - </execution> + </execution--> </executions> </plugin> </plugins> Modified: trunk/maven-i18n-plugin/src/it/parsers/newProject/src/main/java/org/nuiton/i18n/test/MyBean.java =================================================================== --- trunk/maven-i18n-plugin/src/it/parsers/newProject/src/main/java/org/nuiton/i18n/test/MyBean.java 2011-01-19 16:24:40 UTC (rev 1842) +++ trunk/maven-i18n-plugin/src/it/parsers/newProject/src/main/java/org/nuiton/i18n/test/MyBean.java 2011-01-19 20:29:56 UTC (rev 1843) @@ -24,12 +24,19 @@ */ package org.nuiton.i18n.test; +import java.util.Locale; + import static org.nuiton.i18n.I18n._; import static org.nuiton.i18n.I18n.n_; +import static org.nuiton.i18n.I18n.l_; public class MyBean { protected String field1 = n_("javaGetter.key1"); protected String field2 = _("javaGetter.key2"); + + public void method() { + l_(Locale.FRENCH,"javaGetter.key3"); + } } Modified: trunk/maven-i18n-plugin/src/it/parsers/newProject/verify.groovy =================================================================== --- trunk/maven-i18n-plugin/src/it/parsers/newProject/verify.groovy 2011-01-19 16:24:40 UTC (rev 1842) +++ trunk/maven-i18n-plugin/src/it/parsers/newProject/verify.groovy 2011-01-19 20:29:56 UTC (rev 1843) @@ -23,40 +23,57 @@ * #L% */ -file = new File(basedir, 'target/generated-sources/i18n/java.getter'); -assert file.exists(); +def checkKeysInFile(path, keys) { -content = file.text; -assert content.contains( 'javaGetter.key1=' ); -assert content.contains( 'javaGetter.key2=' ); + file = new File(basedir, path); + if (!file.exists()) { + println("Could not find file [" + file + "]"); + return false; + } -file = new File(basedir, 'target/generated-sources/i18n/validation.getter'); -assert file.exists(); + content = file.text; -content = file.text; -assert content.contains( 'validationGetter.key1=' ); -assert content.contains( 'validationGetter.key2=' ); + for (key in keys) { + if (!content.contains(key)) { + println("Could not find " + key + " in file " + file); + return false; + } + } + return true; +} -file = new File(basedir, 'target/generated-sources/i18n/jsp.getter'); -assert file.exists(); +assert checkKeysInFile('target/generated-sources/i18n/java.getter', + ['javaGetter.key1=', 'javaGetter.key2=', 'javaGetter.key3=']) -content = file.text; -assert content.contains( 'jspGetter.key1=' ); -assert content.contains( 'jspGetter.key2=' ); +assert checkKeysInFile('target/generated-sources/i18n/validation.getter', + ['validationGetter.key1=', 'validationGetter.key2=']) -file = new File(basedir, 'target/generated-sources/i18n/tapestry.getter'); -assert file.exists(); +assert checkKeysInFile('target/generated-sources/i18n/jsp.getter', + ['jspGetter.key1=', 'jspGetter.key2=']) -content = file.text; -assert content.contains( 'tmlGetter.key1=' ); -assert content.contains( 'tmlGetter.key2=' ); +assert checkKeysInFile('target/generated-sources/i18n/tapestry.getter', + ['tmlGetter.key1=', 'tmlGetter.key2=']) -file = new File(basedir, 'target/generated-sources/i18n/gwt-java.getter'); -assert file.exists(); +assert checkKeysInFile('target/generated-sources/i18n/gwt-java.getter', + ['gwtJavaGetter.key1=', 'gwtJavaGetter.key2=', 'gwtJavaGetter.key3=']) -content = file.text; -assert content.contains( 'gwtJavaGetter.key1=' ); -assert content.contains( 'gwtJavaGetter.key2=' ); -assert content.contains( 'gwtJavaGetter.key3=' ); +assert checkKeysInFile('target/generated-sources/i18n/parsers-newProject_fr_FR.properties', + [ + 'javaGetter.key1=', 'javaGetter.key2=', 'javaGetter.key3=', + 'validationGetter.key1=', 'validationGetter.key2=', + 'jspGetter.key1=', 'jspGetter.key2=', + 'tmlGetter.key1=', 'tmlGetter.key2=', + 'gwtJavaGetter.key1=', 'gwtJavaGetter.key2=', 'gwtJavaGetter.key3=' + ]) +assert checkKeysInFile('target/generated-sources/i18n/parsers-newProject_en_GB.properties', + [ + 'javaGetter.key1=', 'javaGetter.key2=', 'javaGetter.key3=', + 'validationGetter.key1=', 'validationGetter.key2=', + 'jspGetter.key1=', 'jspGetter.key2=', + 'tmlGetter.key1=', 'tmlGetter.key2=', + 'gwtJavaGetter.key1=', 'gwtJavaGetter.key2=', 'gwtJavaGetter.key3=' + ]) + + return true; Modified: trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/pom.xml =================================================================== --- trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/pom.xml 2011-01-19 16:24:40 UTC (rev 1842) +++ trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/pom.xml 2011-01-19 20:29:56 UTC (rev 1843) @@ -65,6 +65,11 @@ </dependencies> + <properties> + <i18n.bundles>fr_FR,en_GB</i18n.bundles> + <i18n.verbose>true</i18n.verbose> + <i18n.keepGetters>true</i18n.keepGetters> + </properties> <build> <plugins> Modified: trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/src/main/java/org/nuiton/i18n/test/MyBean.java =================================================================== --- trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/src/main/java/org/nuiton/i18n/test/MyBean.java 2011-01-19 16:24:40 UTC (rev 1842) +++ trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/src/main/java/org/nuiton/i18n/test/MyBean.java 2011-01-19 20:29:56 UTC (rev 1843) @@ -24,12 +24,20 @@ */ package org.nuiton.i18n.test; +import java.util.Locale; + import static org.nuiton.i18n.I18n._; import static org.nuiton.i18n.I18n.n_; +import static org.nuiton.i18n.I18n.l_; public class MyBean { protected String field1 = n_("javaGetter.key1"); protected String field2 = _("javaGetter.key2"); + + + public void method() { + l_(Locale.FRENCH,"javaGetter.key3"); + } } Modified: trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/verify.groovy =================================================================== --- trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/verify.groovy 2011-01-19 16:24:40 UTC (rev 1842) +++ trunk/maven-i18n-plugin/src/it/parsers/withNewKeys/verify.groovy 2011-01-19 20:29:56 UTC (rev 1843) @@ -23,66 +23,122 @@ * #L% */ -file = new File(basedir, 'target/generated-sources/i18n/java.getter'); -assert file.exists(); -content = file.text; -//assert content.contains( 'javaGetter.old.key1=' ); -//assert content.contains( 'javaGetter.old.key2=' ); -assert content.contains( 'javaGetter.key1=' ); -assert content.contains( 'javaGetter.key2=' ); +def checkKeysInFile(path, keys) { -file = new File(basedir, 'target/generated-sources/i18n/validation.getter'); -assert file.exists(); + file = new File(basedir, path); + if (!file.exists()) { + println("Could not find file [" + file + "]"); + return false; + } -content = file.text; -assert content.contains( 'validationGetter.key1=' ); -assert content.contains( 'validationGetter.key2=' ); -assert content.contains( 'validationGetter.key3=' ); + content = file.text; -file = new File(basedir, 'target/generated-sources/i18n/jsp.getter'); -assert file.exists(); + for (key in keys) { + if (!content.contains(key)) { + println("Could not find " + key + " in file " + file); + return false; + } + } + return true; +} -content = file.text; -assert content.contains( 'jspGetter.key1=' ); -assert content.contains( 'jspGetter.key2=' ); +assert checkKeysInFile('target/generated-sources/i18n/java.getter', + ['javaGetter.key1=', 'javaGetter.key2=', 'javaGetter.key3=']) -file = new File(basedir, 'target/generated-sources/i18n/tapestry.getter'); -assert file.exists(); +assert checkKeysInFile('target/generated-sources/i18n/validation.getter', + ['validationGetter.key1=', 'validationGetter.key2=', 'validationGetter.key3=']) -content = file.text; -assert content.contains( 'tmlGetter.key1=' ); -assert content.contains( 'tmlGetter.key2=' ); +assert checkKeysInFile('target/generated-sources/i18n/jsp.getter', + ['jspGetter.key1=', 'jspGetter.key2=']) +assert checkKeysInFile('target/generated-sources/i18n/tapestry.getter', + ['tmlGetter.key1=', 'tmlGetter.key2=']) -file = new File(basedir, 'target/generated-sources/i18n/gwt-java.getter'); -assert file.exists(); +assert checkKeysInFile('target/generated-sources/i18n/gwt-java.getter', + ['gwtJavaGetter.key1=', 'gwtJavaGetter.key2=', 'gwtJavaGetter.key3=']) -content = file.text; -assert content.contains( 'gwtJavaGetter.key1=' ); -assert content.contains( 'gwtJavaGetter.key2=' ); -assert content.contains( 'gwtJavaGetter.key3=' ); +assert checkKeysInFile('target/generated-sources/i18n/parsers-withNewKeys_fr_FR.properties', + [ + 'javaGetter.key1=', 'javaGetter.key2=', 'javaGetter.key3=', + 'javaGetter.old.key1=', 'javaGetter.old.key2=', + 'validationGetter.key1=', 'validationGetter.key2=', 'validationGetter.key3=', + 'jspGetter.key1=', 'jspGetter.key2=', + 'tmlGetter.key1=', 'tmlGetter.key2=', + 'gwtJavaGetter.key1=', 'gwtJavaGetter.key2=', 'gwtJavaGetter.key3=' + ]) -file = new File(basedir, 'src/main/resources/i18n/parsers-withNewKeys_fr_FR.properties'); -assert file.exists(); +assert checkKeysInFile('target/generated-sources/i18n/parsers-withNewKeys_en_GB.properties', + [ + 'javaGetter.key1=', 'javaGetter.key2=', 'javaGetter.key3=', + 'validationGetter.key1=', 'validationGetter.key2=', + 'jspGetter.key1=', 'jspGetter.key2=', + 'tmlGetter.key1=', 'tmlGetter.key2=', + 'gwtJavaGetter.key1=', 'gwtJavaGetter.key2=', 'gwtJavaGetter.key3=' + ]) +// +//file = new File(basedir, 'target/generated-sources/i18n/java.getter'); +//assert file.exists(); +// +//content = file.text; +////assert content.contains( 'javaGetter.old.key1=' ); +////assert content.contains( 'javaGetter.old.key2=' ); +//assert content.contains( 'javaGetter.key1=' ); +//assert content.contains( 'javaGetter.key2=' ); +//assert content.contains( 'javaGetter.key3=' ); -content = file.text; -assert content.contains( 'javaGetter.old.key1=' ); -assert content.contains( 'javaGetter.old.key2=' ); -assert content.contains( 'javaGetter.key1=' ); -assert content.contains( 'javaGetter.key2=' ); -assert content.contains( 'validationGetter.key1=' ); -assert content.contains( 'validationGetter.key2=' ); -assert content.contains( 'validationGetter.key3=' ); -assert content.contains( 'jspGetter.key1=' ); -assert content.contains( 'jspGetter.key2=' ); +//file = new File(basedir, 'target/generated-sources/i18n/validation.getter'); +//assert file.exists(); +// +//content = file.text; +//assert content.contains( 'validationGetter.key1=' ); +//assert content.contains( 'validationGetter.key2=' ); +//assert content.contains( 'validationGetter.key3=' ); -assert content.contains( 'tmlGetter.key1=' ); -assert content.contains( 'tmlGetter.key2=' ); +//file = new File(basedir, 'target/generated-sources/i18n/jsp.getter'); +//assert file.exists(); +// +//content = file.text; +//assert content.contains( 'jspGetter.key1=' ); +//assert content.contains( 'jspGetter.key2=' ); +// +// +//file = new File(basedir, 'target/generated-sources/i18n/tapestry.getter'); +//assert file.exists(); +// +//content = file.text; +//assert content.contains( 'tmlGetter.key1=' ); +//assert content.contains( 'tmlGetter.key2=' ); -assert content.contains( 'gwtJavaGetter.key1=' ); -assert content.contains( 'gwtJavaGetter.key2=' ); -assert content.contains( 'gwtJavaGetter.key3=' ); +//file = new File(basedir, 'target/generated-sources/i18n/gwt-java.getter'); +//assert file.exists(); +// +//content = file.text; +//assert content.contains( 'gwtJavaGetter.key1=' ); +//assert content.contains( 'gwtJavaGetter.key2=' ); +//assert content.contains( 'gwtJavaGetter.key3=' ); +//file = new File(basedir, 'src/main/resources/i18n/parsers-withNewKeys_fr_FR.properties'); +//assert file.exists(); +// +//content = file.text; +//assert content.contains('javaGetter.old.key1='); +//assert content.contains('javaGetter.old.key2='); +//assert content.contains('javaGetter.key1='); +//assert content.contains('javaGetter.key2='); +//assert content.contains('javaGetter.key3='); +//assert content.contains('validationGetter.key1='); +//assert content.contains('validationGetter.key2='); +//assert content.contains('validationGetter.key3='); +//assert content.contains('jspGetter.key1='); +//assert content.contains('jspGetter.key2='); +// +//assert content.contains('tmlGetter.key1='); +//assert content.contains('tmlGetter.key2='); +// +//assert content.contains('gwtJavaGetter.key1='); +//assert content.contains('gwtJavaGetter.key2='); +//assert content.contains('gwtJavaGetter.key3='); + return true; Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateMojo.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateMojo.java 2011-01-19 16:24:40 UTC (rev 1842) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateMojo.java 2011-01-19 20:29:56 UTC (rev 1843) @@ -168,6 +168,9 @@ } if (!keepGetters) { + if (isVerbose()) { + getLog().info("Will delete getter " + bundleGetterOut); + } deleteFile(bundleGetterOut); } } Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GetterMojo.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GetterMojo.java 2011-01-19 16:24:40 UTC (rev 1842) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GetterMojo.java 2011-01-19 20:29:56 UTC (rev 1843) @@ -97,6 +97,9 @@ propertiesOut.putAll(propertiesIn); if (!keepGetters) { + if (isVerbose()) { + getLog().info("Will delete getter " + bundleGetter); + } deleteFile(bundleGetter); } if (!silent) { Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/impl/ParserJavaMojo.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/impl/ParserJavaMojo.java 2011-01-19 16:24:40 UTC (rev 1842) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/impl/ParserJavaMojo.java 2011-01-19 20:29:56 UTC (rev 1843) @@ -35,20 +35,22 @@ import org.nuiton.io.FileUpdater; import org.nuiton.io.FileUpdaterHelper; import org.nuiton.io.SortedProperties; -import org.nuiton.processor.filters.I18nFilter; +import org.nuiton.processor.filters.DefaultFilter; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * To parse java files to detect new i18n keys. - * + * <p/> * <b>Note: </b> this goal must always be invoked before the {@code process-resources} * phase, otherwise all files will be considered as uptodate. - * + * * @author jruchaud <ruchaud@codelutin.com> * @author tchemit <tchemit@codelutin.com> * @goal parserJava @@ -128,13 +130,14 @@ protected static class JavaFileParser extends AbstractFileParser { - protected final I18nFilter filter = new I18nFilter(); + protected final I18nFilter filter; public JavaFileParser(Log log, String encoding, SortedProperties oldParser, boolean showTouchedFiles) { super(log, encoding, oldParser, showTouchedFiles); + filter = new I18nFilter(log); } @Override @@ -180,4 +183,131 @@ } } } + + public static class I18nFilter extends DefaultFilter { + + /** Instance logger */ + private final Log log; + +// private String header = "_\\(\\s*\""; + private String header = "^_\\(\\s*\\\"|[^l]_\\(\\s*\\\"|l_\\([^,]+\\s*,\\s*\\\""; + + private String footer = "\"\\s*(\\)|,|\\+|$)"; + + private Pattern headerPattern = Pattern.compile(getHeader()); + + private Pattern footerPattern = Pattern.compile(getFooter()); + + private Matcher matcher; + + public I18nFilter(Log log) { + this.log = log; + } + + protected void setFooter(String footer) { + this.footer = footer; + } + + protected void setHeader(String header) { + this.header = header; + } + + @Override + protected String getHeader() { + return header; + } + + @Override + protected String getFooter() { + return footer; + } + + @Override + public int getMatchIndexFor(String input, String sequence) { + int index = NOT_FOUND; + + setMatcher(null); + if (sequence.equals(getHeader())) { + setMatcher(getHeaderPattern().matcher(input)); + } else if (sequence.equals(getFooter())) { + setMatcher(getFooterPattern().matcher(input)); + } + if (getMatcher() != null) { + try { + getMatcher().find(); + index = getMatcher().start(); + } catch (RuntimeException e) { + if (log.isDebugEnabled()) { + log.debug("Could not match with " + getMatcher() + " input " + input); + } + } + } + + return index; + } + + @Override + public int getMatchLengthFor(String sequence) { + int length = NOT_FOUND; + + try { + length = getMatcher().end() - getMatcher().start(); + } catch (RuntimeException e) { + if (log.isDebugEnabled()) { + log.debug("Could not match with " + getMatcher() + " input " + sequence); + } + } + + return length; + } + + /** + * methode appele lorsqu'on a la chaine entiere entre le header et le + * footer. + * + * @param ch la chaine trouve + * @return ce qu'il faut ecrire dans le fichier de sortie + */ + @Override + protected String performInFilter(String ch) { + return ch.replaceAll("\"\\s*\\+\\s*\"", "") + "="; + } + + @Override + public String performHeaderFooterFilter(String ch) { + return ch.substring(ch.indexOf('"') + 1, ch.lastIndexOf('"')); + } + + /** + * methode appele lorsqu'on a la chaine entiere a l'exterieur du + * header/footer + * + * @param ch la chaine trouve + * @return ce qu'il faut ecrire dans le fichier de sortie + */ + @Override + protected String performOutFilter(String ch) { + return EMPTY_STRING; + } + + /** @return Returns the footerPattern. */ + protected Pattern getFooterPattern() { + return footerPattern; + } + + /** @return Returns the headerPattern. */ + protected Pattern getHeaderPattern() { + return headerPattern; + } + + /** @return Returns the matcher. */ + protected Matcher getMatcher() { + return matcher; + } + + /** @param matcher The matcher to set. */ + protected void setMatcher(Matcher matcher) { + this.matcher = matcher; + } + } }
participants (1)
-
tchemit@users.nuiton.org