X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=util%2Forg%2Fcacert%2Fgigi%2Futil%2FFetchLocales.java;h=f3097af1ba36f3ecb321b0ea2253fa8f12f3faec;hp=aed8973f41dbf91225823bd785153883e41d48ce;hb=0159a0dbdacddcb470b1eeb9c3e1fba73fec03a7;hpb=ea300a1fa6da8b84be1b94398ca61708d05d428d diff --git a/util/org/cacert/gigi/util/FetchLocales.java b/util/org/cacert/gigi/util/FetchLocales.java index aed8973f..f3097af1 100644 --- a/util/org/cacert/gigi/util/FetchLocales.java +++ b/util/org/cacert/gigi/util/FetchLocales.java @@ -1,9 +1,11 @@ package org.cacert.gigi.util; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLConnection; import java.util.Scanner; @@ -13,8 +15,10 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; @@ -24,15 +28,18 @@ import org.w3c.dom.Node; public class FetchLocales { - public static final String DOWNLOAD_SERVER = "translations.cacert.org"; + public static final String DOWNLOAD_SERVER = "pootle.cacert1.dogcraft.de"; - public static final String PO_URL_TEMPLATE = "http://" + DOWNLOAD_SERVER + "/export/cacert/%/messages.po"; + public static String PO_URL_TEMPLATE = "https://" + DOWNLOAD_SERVER + "/%/gigi/messages.po"; public static final String[] AUTO_LANGS = new String[] { - "en", "de", "nl", "pt_BR", "fr", "sv", "it", "es", "hu", "fi", "ja", "bg", "pt", "da", "pl", "zh_CN", "ru", "lv", "cs", "zh_TW", "el", "tr", "ar" + "de" }; public static void main(String[] args) throws IOException, ParserConfigurationException, TransformerException { + if (args.length != 0) { + PO_URL_TEMPLATE = args[0]; + } System.out.println("downloading locales ..."); File locale = new File("locale"); if ( !locale.isDirectory() && !locale.mkdir()) { @@ -44,47 +51,65 @@ public class FetchLocales { for (String lang : AUTO_LANGS) { Document doc = db.newDocument(); doc.appendChild(doc.createElement("translations")); - URL fetch = new URL(PO_URL_TEMPLATE.replace("%", lang)); - URLConnection uc = fetch.openConnection(); - Scanner sc = new Scanner(new InputStreamReader(uc.getInputStream(), "UTF-8")); - String s = readLine(sc); - StringBuffer contents = new StringBuffer(); - String id = ""; - while (s != null) { - if (s.startsWith("msgid")) { - contents.delete(0, contents.length()); - s = readString(s, sc, contents); - id = contents.toString(); - continue; - } else if (s.startsWith("msgstr")) { - contents.delete(0, contents.length()); - // System.out.println("msgstr"); - s = readString(s, sc, contents); - String msg = contents.toString().replace("\\\"", "\"").replace("\\n", "\n"); - insertTranslation(doc, id, msg); - } else if (s.startsWith("#")) { - // System.out.println(s); - } else if (s.equals("") || s.equals("\r")) { - - } else { - System.out.println("unknown line: " + s); - } - s = readLine(sc); - } - TransformerFactory tFactory = TransformerFactory.newInstance(); - Transformer transformer = tFactory.newTransformer(); - - DOMSource source = new DOMSource(doc); - FileOutputStream fos = new FileOutputStream(new File(locale, lang + ".xml")); - StreamResult result = new StreamResult(fos); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); - transformer.transform(source, result); - fos.close(); + + int count = addTranslationsFromPo(doc, new URL(PO_URL_TEMPLATE.replace("%", lang))); + + System.out.println("Strings for language " + lang + ": " + count); + + writeTranslationToFile(doc, new File(locale, lang + ".xml")); } + Document doc = db.newDocument(); + doc.appendChild(doc.createElement("translations")); + System.out.println("Creating empty en.xml"); + writeTranslationToFile(doc, new File(locale, "en.xml")); System.out.println("Done."); } + private static void writeTranslationToFile(Document doc, File file) throws TransformerFactoryConfigurationError, TransformerConfigurationException, FileNotFoundException, TransformerException, IOException { + TransformerFactory tFactory = TransformerFactory.newInstance(); + Transformer transformer = tFactory.newTransformer(); + + DOMSource source = new DOMSource(doc); + FileOutputStream fos = new FileOutputStream(file); + StreamResult result = new StreamResult(fos); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); + transformer.transform(source, result); + fos.close(); + } + + private static int addTranslationsFromPo(Document doc, URL fetch) throws IOException, UnsupportedEncodingException { + URLConnection uc = fetch.openConnection(); + Scanner sc = new Scanner(new InputStreamReader(uc.getInputStream(), "UTF-8")); + String s = readLine(sc); + StringBuffer contents = new StringBuffer(); + String id = ""; + int count = 0; + while (s != null) { + if (s.startsWith("msgid")) { + count++; + contents.delete(0, contents.length()); + s = readString(s, sc, contents); + id = contents.toString(); + continue; + } else if (s.startsWith("msgstr")) { + contents.delete(0, contents.length()); + // System.out.println("msgstr"); + s = readString(s, sc, contents); + String msg = contents.toString().replace("\\\"", "\"").replace("\\n", "\n"); + insertTranslation(doc, id, msg); + } else if (s.startsWith("#")) { + // System.out.println(s); + } else if (s.equals("") || s.equals("\r")) { + + } else { + System.out.println("unknown line: " + s); + } + s = readLine(sc); + } + return count; + } + private static String readLine(Scanner sc) { String line = sc.findWithinHorizon("[^\n]*\n", 0); if (line == null) {