X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=util%2Forg%2Fcacert%2Fgigi%2Futil%2FFetchLocales.java;h=0b61dcca65763b1196678a7fa4b74daa83e10cb8;hp=3839e8bb5998d840777a8d8b787c6452bfaf3654;hb=d23d7a6fa9dc38c6193fea70017e0bff11257be5;hpb=f92f284f3a80e1f8fd87d2cc63288e1f1bbfeb9d diff --git a/util/org/cacert/gigi/util/FetchLocales.java b/util/org/cacert/gigi/util/FetchLocales.java index 3839e8bb..0b61dcca 100644 --- a/util/org/cacert/gigi/util/FetchLocales.java +++ b/util/org/cacert/gigi/util/FetchLocales.java @@ -1,8 +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; @@ -12,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; @@ -22,95 +27,121 @@ import org.w3c.dom.Element; import org.w3c.dom.Node; public class FetchLocales { - public static final String DOWNLOAD_SERVER = "translations.cacert.org"; - public static final String PO_URL_TEMPLATE = "http://" + DOWNLOAD_SERVER - + "/export/cacert/%/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"}; - public static void main(String[] args) throws IOException, - ParserConfigurationException, TransformerException { - File locale = new File("locale"); - locale.mkdir(); - - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db = dbf.newDocumentBuilder(); - 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(uc.getInputStream()); - 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(); - } - } - private static String readLine(Scanner sc) { - String line = sc.findWithinHorizon("[^\n]*\n", 0); - if (line == null) { - return null; - } - return line.substring(0, line.length() - 1); - } - private static void insertTranslation(Document doc, String id, String msg) { - Node idN = doc.createTextNode(id); - Node textN = doc.createTextNode(msg); - Element tr = doc.createElement("translation"); - Element e = doc.createElement("id"); - e.appendChild(idN); - tr.appendChild(e); - e = doc.createElement("msg"); - e.appendChild(textN); - tr.appendChild(e); - doc.getDocumentElement().appendChild(tr); - } - private static String readString(String head, Scanner sc, - StringBuffer contents) throws IOException { - head = head.split(" ", 2)[1]; - contents.append(head.substring(1, head.length() - 1)); - String s; - while ((s = readLine(sc)) != null) { - if (!s.startsWith("\"")) { - break; - } - contents.append(s.substring(1, s.length() - 1)); - } - return s; - } + + public static final String DOWNLOAD_SERVER = "pootle.cacert1.dogcraft.de"; + + public static String PO_URL_TEMPLATE = "https://" + DOWNLOAD_SERVER + "/%/gigi/messages.po"; + + public static final String[] AUTO_LANGS = new String[] { + "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()) { + throw new IOException("Could not create locales directory."); + } + + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + for (String lang : AUTO_LANGS) { + Document doc = db.newDocument(); + doc.appendChild(doc.createElement("translations")); + + 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) { + return null; + } + return line.substring(0, line.length() - 1); + } + + private static void insertTranslation(Document doc, String id, String msg) { + Node idN = doc.createTextNode(id); + Node textN = doc.createTextNode(msg); + Element tr = doc.createElement("translation"); + Element e = doc.createElement("id"); + e.appendChild(idN); + tr.appendChild(e); + e = doc.createElement("msg"); + e.appendChild(textN); + tr.appendChild(e); + doc.getDocumentElement().appendChild(tr); + } + + private static String readString(String head, Scanner sc, StringBuffer contents) throws IOException { + head = head.split(" ", 2)[1]; + contents.append(head.substring(1, head.length() - 1)); + String s; + while ((s = readLine(sc)) != null) { + if ( !s.startsWith("\"")) { + break; + } + contents.append(s.substring(1, s.length() - 1)); + } + return s; + } }