package com.limegroup.gnutella.i18n;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Converts all translation bundles by replacing their keys with the values of
* the English translation.
*
* Shortcoming: msginit does not set the charset correctly, so do a manual replace
* afterwards
*
* perl -p -i -e 's/ASCII/UTF-8/g' *.po
*/
public class TranslationBundleKeyConverter {
/**
* Call this in lib/messagebundles.
*/
public static void main(String[] args) throws Exception {
File dir = new File(".");
LanguageLoader loader = new LanguageLoader(dir);
Map<String, LanguageInfo> languages = loader.loadLanguages();
for (LanguageInfo info : languages.values()) {
createPoFile(info, loader.getEnglishLines());
}
}
private static void createPoFile(LanguageInfo info, List<Line> englishLines) throws Exception {
if (info.getCode().length() == 0) {
return;
}
// TODO generate correct header using 'msginit' so we get the right plural forms
System.out.println("Generating file for: " + info.getCode() + ".UTF-8");
System.out.println(Runtime.getRuntime().exec(new String[] { "msginit", "-l", info.getCode() + ".UTF-8" ,
"--no-translator", "-i", "keys.pot" }).waitFor());
File file = new File(System.getProperty("user.dir"), info.getCode() + ".po");
System.out.println(file.getAbsolutePath());
PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file, true), "UTF-8"));
// skip until translation header comes:
Iterator<Line> lines = englishLines.iterator();
for (;lines.hasNext() && !LanguageUpdater.MARKER.equals(lines.next().getLine()););
while (lines.hasNext()) {
Line line = lines.next();
if (line.isComment()) {
continue;
}
String msgid = line.getValue();
String msgstr = info.getProperties().getProperty(line.getKey(), "");
if (msgid.length() > 0 && msgstr.length() > 0) {
writer.print("msgid \"");
writer.print(escapeQuotes(msgid));
writer.println("\"");
writer.print("msgstr \"");
writer.print(escapeQuotes(msgstr));
writer.println("\"");
writer.println();
}
}
writer.flush();
writer.close();
}
private static String escapeQuotes(String str) {
return str.replace("\"", "\\\"").replace("\n", "\\n");
}
}