diff --git a/javase/src/com/google/zxing/HtmlAssetTranslator.java b/javase/src/com/google/zxing/HtmlAssetTranslator.java index f4d1737f9..72ee6ec50 100644 --- a/javase/src/com/google/zxing/HtmlAssetTranslator.java +++ b/javase/src/com/google/zxing/HtmlAssetTranslator.java @@ -37,6 +37,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.LinkedList; +import java.util.List; import java.util.Queue; import java.util.regex.Pattern; @@ -44,15 +45,17 @@ import java.util.regex.Pattern; *

A utility which auto-translates the English-language text in a directory of HTML documents using * Google Translate.

* - *

Pass the Android client assets/ directory as first argument, and the language to translate to second. - * Specify "all" for language to try to translate for all existing translations. - * Optionally, you can specify the files to translate individually. - * Usage: {@code HtmlAssetTranslator android/assets/ es [file1.html file2.html ...]}

+ *

Pass the Android client assets/ directory as first argument, and the language to translate to second + * as a comma-separated list. Specify "all" for language to try to translate for all existing translations. + * Each argument after this is the name of a file to translate; if the first one is "all", all files will + * be translated.

+ * + *

Usage: {@code HtmlAssetTranslator android/assets/ (all|lang1[,lang2 ...]) (all|file1.html[ file2.html ...])}

* - *

This will translate .html files in subdirectory html-en to directory html-es, for example. - * Note that only text nodes in the HTML document are translated. Any text that is a child of a node - * with {@code class="notranslate"} will not be translated. It will also add a note at the end of - * the translated page that indicates it was automatically translated.

+ *

{@code android/assets/ es all} will translate .html files in subdirectory html-en to + * directory html-es, for example. Note that only text nodes in the HTML document are translated. + * Any text that is a child of a node with {@code class="notranslate"} will not be translated. It will + * also add a note at the end of the translated page that indicates it was automatically translated.

* * @author Sean Owen */ @@ -63,16 +66,21 @@ public final class HtmlAssetTranslator { private HtmlAssetTranslator() {} public static void main(String[] args) throws IOException { + if (args.length < 3) { + System.err.println("Usage: HtmlAssetTranslator android/assets/ " + + "(all|lang1[,lang2 ...]) (all|file1.html[ file2.html ...])"); + return; + } File assetsDir = new File(args[0]); Collection languagesToTranslate = parseLanguagesToTranslate(assetsDir, args[1]); - Collection filesToTranslate = parseFilesToTranslate(args); + List restOfArgs = Arrays.asList(args).subList(2, args.length); + Collection fileNamesToTranslate = parseFileNamesToTranslate(assetsDir, restOfArgs); for (String language : languagesToTranslate) { - translateOneLanguage(assetsDir, language, filesToTranslate); + translateOneLanguage(assetsDir, language, fileNamesToTranslate); } } - private static Collection parseLanguagesToTranslate(File assetsDir, - CharSequence languageArg) { + private static Collection parseLanguagesToTranslate(File assetsDir, CharSequence languageArg) { Collection languages = new ArrayList(); if ("all".equals(languageArg)) { FileFilter fileFilter = new FileFilter() { @@ -90,10 +98,23 @@ public final class HtmlAssetTranslator { return languages; } - private static Collection parseFilesToTranslate(String[] args) { + private static Collection parseFileNamesToTranslate(File assetsDir, List restOfArgs) { Collection fileNamesToTranslate = new ArrayList(); - for (int i = 2; i < args.length; i++) { - fileNamesToTranslate.add(args[i]); + if ("all".equals(restOfArgs.get(0))) { + File htmlEnAssetDir = new File(assetsDir, "html-en"); + FileFilter fileFilter = new FileFilter() { + @Override + public boolean accept(File file) { + return file.isFile() && file.getName().endsWith(".html"); + } + }; + for (File file : htmlEnAssetDir.listFiles(fileFilter)) { + fileNamesToTranslate.add(file.getName()); + } + } else { + for (String fileName : restOfArgs) { + fileNamesToTranslate.add(fileName); + } } return fileNamesToTranslate; } @@ -154,7 +175,7 @@ public final class HtmlAssetTranslator { } if (node.getNodeType() == Node.TEXT_NODE) { String text = node.getTextContent(); - if (text.trim().length() > 0) { + if (!text.trim().isEmpty()) { text = StringsResourceTranslator.translateString(text, language); node.setTextContent(' ' + text + ' '); } diff --git a/javase/src/com/google/zxing/StringsResourceTranslator.java b/javase/src/com/google/zxing/StringsResourceTranslator.java index 11cde0886..ea02ed3a0 100644 --- a/javase/src/com/google/zxing/StringsResourceTranslator.java +++ b/javase/src/com/google/zxing/StringsResourceTranslator.java @@ -17,6 +17,7 @@ package com.google.zxing; import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.Closeable; import java.io.File; import java.io.FileFilter; @@ -62,7 +63,7 @@ public final class StringsResourceTranslator { private static final String APACHE_2_LICENSE = "