freecol/src/net/sf/freecol/tools/InstallerTranslations.java

227 lines
7.7 KiB
Java

/**
* Copyright (C) 2002-2011 The FreeCol Team
*
* This file is part of FreeCol.
*
* FreeCol is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* FreeCol is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with FreeCol. If not, see <http://www.gnu.org/licenses/>.
*/
package net.sf.freecol.tools;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.util.HashMap;
import java.util.Map;
public class InstallerTranslations {
private static final File SOURCE_DIRECTORY =
new File("data/strings");
private static final File MAIN_FILE =
new File(SOURCE_DIRECTORY, "FreeColMessages.properties");
private static final File DESTINATION_DIRECTORY =
new File("build/installer");
private static final File LANGUAGE_CODES =
new File(DESTINATION_DIRECTORY, "iso-639-2.txt");
// it seems IzPack doesn't use ISO codes at all
public static final String[][] IZPACK_CODES = new String[][] {
{ "ca", "cat", "Catalunyan" },
{ "zh", "chn", "Chinese" },
{ "cs", "cze", "Czech" },
{ "da", "dan", "Danish" },
{ "de", "deu", "German" },
{ "en", "eng", "English" },
{ "eu", "eus", "Basque" },
{ "fi", "fin", "Finnish" },
{ "fr", "fra", "French" },
{ "gl", "glg", "Galician" },
{ "hu", "hun", "Hungarian" },
{ "it", "ita", "Italian" },
{ "ja", "jpn", "Japanese" },
{ "ms", "mys", "Malaysian" },
{ "nl", "ned", "Nederlands" },
{ "nn", "nor", "Norwegian" },
{ "pl", "pol", "Polish" },
{ "pt_BR", "por", "Portuguese (Brazilian)" },
{ "pt_PT", "prt", "Portuguese (European)" },
{ "ro", "rom", "Romanian" },
{ "ru", "rus", "Russian" },
{ "sr", "scg", "Serbian" },
{ "es", "spa", "Spanish" },
{ "sk", "svk", "Slovakian" },
{ "sv", "swe", "Swedish" },
{ "uk", "ukr", "Ukrainian" }
};
private static final String[] KEYS = {
"FreeCol",
"FreeCol.description",
"GameManual",
"GameManual.description",
"SourceCode",
"SourceCode.description",
"Music",
"Music.description",
"SoundEffects",
"SoundEffects.description",
"MovieClips",
"MovieClips.description",
"MovieClips.description2",
"Location.Web",
"FreeColLanguage",
"FreeColLanguage.autodetect",
"FreeColLanguage.description",
"UserFiles",
"UserFiles.home",
"UserFiles.freecol",
"UserFiles.other"
};
public static void main(String[] args) throws Exception {
/*
if (!LANGUAGE_CODES.exists()) {
System.out.println("Language codes not found.");
System.exit(1);
}
*/
if (!MAIN_FILE.exists()) {
System.out.println("Main input file not found.");
System.exit(1);
}
if (!DESTINATION_DIRECTORY.exists()) {
DESTINATION_DIRECTORY.mkdirs();
}
//Map<String, String> languageMappings = readLanguageMappings(LANGUAGE_CODES);
Map<String, String> languageMappings = new HashMap<String, String>();
for (String[] mapping : IZPACK_CODES) {
languageMappings.put(mapping[0], mapping[1]);
}
Map<String, String> mainProperties = readFile(MAIN_FILE);
//Set<String> languages = new HashSet<String>();
String[] sourceFiles = SOURCE_DIRECTORY.list(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.matches("FreeColMessages_.*\\.properties");
}
});
for (String name : sourceFiles) {
String languageCode = null;
int index = name.indexOf('.', 16);
if (index < 0) {
continue;
} else {
languageCode = languageMappings.get(name.substring(16, index));
if (languageCode == null) {
index = name.indexOf('_', 16);
if (index < 0) {
continue;
} else {
languageCode = languageMappings.get(name.substring(16, index));
}
}
}
if (languageCode == null) {
System.out.println("Skipping source file: " + name);
continue;
}
System.out.println("Processing source file: " + name);
File sourceFile = new File(SOURCE_DIRECTORY, name);
Map<String, String> sourceProperties = readFile(sourceFile);
StringBuilder output = new StringBuilder();
output.append("<?xml version = '1.0' encoding = 'UTF-8' standalone = 'yes'?>\n");
output.append("<!-- ATTENTION: Do not modify this file directly,\n");
output.append(" modify the source file\n ");
output.append(sourceFile.getPath());
output.append("\n instead. -->\n");
output.append("<langpack>\n");
for (String key : KEYS) {
String longKey = "installer." + key;
String value = sourceProperties.get(longKey);
if (value == null) {
value = mainProperties.get(longKey);
}
output.append(" <str id=\"");
output.append(key);
output.append("\" txt=\"");
output.append(value);
output.append("\" />\n");
}
output.append("</langpack>\n");
File destinationFile = new File(DESTINATION_DIRECTORY, "lang.xml_" + languageCode);
FileWriter out = new FileWriter(destinationFile);
out.write(output.toString());
out.close();
}
}
private static Map<String, String> readFile(File file) {
Map<String, String> result = new HashMap<String, String>();
try {
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = bufferedReader.readLine();
while (line != null) {
int index = line.indexOf('=');
if (index >= 0) {
result.put(line.substring(0, index), line.substring(index + 1));
}
line = bufferedReader.readLine();
}
} catch(Exception e) {
// forget it
}
return result;
}
/*
private static Map<String, String> readLanguageMappings(File file) {
Map<String, String> result = new HashMap<String, String>();
try {
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = bufferedReader.readLine();
String[] fields;
while (line != null) {
fields = line.split(":");
if (fields[1].length() > 0) {
result.put(fields[1], fields[0].substring(0, 3));
}
line = bufferedReader.readLine();
}
} catch(Exception e) {
// forget it
}
return result;
}
*/
}