diff --git a/htroot/Translator_p.java b/htroot/Translator_p.java index ffbd14dc2..b6779cee6 100644 --- a/htroot/Translator_p.java +++ b/htroot/Translator_p.java @@ -48,11 +48,12 @@ public class Translator_p { prop.put("errmsg", 0); } - File lngfile = new File(sb.getAppPath("locale.source", "locales"), langcfg + ".lng"); + final File localesFolder = sb.getAppPath("locale.source", "locales"); + File lngfile = new File(localesFolder, langcfg + ".lng"); TranslationManager localTransMgr = new TranslationManager(/*new File ("locales","master.lng.xlf")*/); - File masterxlf = new File(sb.getAppPath("locale.source", "locales"), "master.lng.xlf"); - if (!masterxlf.exists()) localTransMgr.createMasterTranslationLists(masterxlf); + File masterxlf = new File(localesFolder, "master.lng.xlf"); + if (!masterxlf.exists()) localTransMgr.createMasterTranslationLists(localesFolder, masterxlf); Map> origTrans = localTransMgr.joinMasterTranslationLists(masterxlf, lngfile); final File locallngfile = localTransMgr.getScratchFile(lngfile); Map> localTrans = localTransMgr.loadTranslationsLists(locallngfile); // TODO: this will read file twice diff --git a/source/net/yacy/utils/translation/GenerateMasterXliff.java b/source/net/yacy/utils/translation/GenerateMasterXliff.java new file mode 100755 index 000000000..9cc1b691c --- /dev/null +++ b/source/net/yacy/utils/translation/GenerateMasterXliff.java @@ -0,0 +1,87 @@ +// GenerateMasterXliff.java +// --------------------------- +// Copyright 2018 by luccioman; https://github.com/luccioman +// +// This is a part of YaCy, a peer-to-peer based web search engine +// +// LICENSE +// +// This program 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. +// +// This program 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 this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +package net.yacy.utils.translation; + +import java.io.File; +import java.io.IOException; + +import net.yacy.cora.util.ConcurrentLog; + +/** + * Utility that can be used to generate a xliff file from a list of YaCy custom + * *.lng translation files. + * + * @author luccioman + * + */ +public class GenerateMasterXliff { + + /** + * Read all translation files in YaCy custom lng format from a given folder + * (locales/ as default), and convert them to a single master xliff file + * containing entries to translate. When the ouput master file already exists, + * it is updated with new entries from the lng files. + * + * @param args + * runtime optional arguments
+ * + * @throws IOException + * when a read/write error occurred + */ + public static void main(final String args[]) throws IOException { + try { + final File localesFolder; + if (args.length > 0 && args[0] != null) { + localesFolder = new File(args[0]); + } else { + localesFolder = new File("locales"); + } + if(!localesFolder.isDirectory()) { + System.err.println(localesFolder.getPath() + " is not a directory"); + return; + } + + + System.out.println("Using lng files from folder " + localesFolder.getAbsolutePath()); + + final File masterXlf; + if (args.length > 1 && args[1] != null) { + masterXlf = new File(args[1]); + } else { + masterXlf = new File("master.lng.xlf"); + } + if (masterXlf.exists()) { + System.out.println("Updating master xliff file at " + masterXlf.getAbsolutePath()); + } else { + System.out.println("Generating a new master xliff file at " + masterXlf.getAbsolutePath()); + } + new TranslationManager().createMasterTranslationLists(localesFolder, masterXlf); + } finally { + ConcurrentLog.shutdown(); + } + } + +} diff --git a/source/net/yacy/utils/translation/TranslationManager.java b/source/net/yacy/utils/translation/TranslationManager.java index 152ef1ed2..7b82acaac 100644 --- a/source/net/yacy/utils/translation/TranslationManager.java +++ b/source/net/yacy/utils/translation/TranslationManager.java @@ -165,20 +165,21 @@ public class TranslationManager extends TranslatorXliff { * Create a master translation list by reading all translation files * If a masterOutputFile exists, content is preserved (loaded first) * - * @param masterOutpuFile output file (xliff format) + * @param localesFolder folder containing *.lng translation files + * @param masterOutpuFile output file (xliff format). Must not be null. * @throws IOException */ - public void createMasterTranslationLists(File masterOutputFile) throws IOException { + public void createMasterTranslationLists(final File localesFolder, final File masterOutputFile) throws IOException { if (masterOutputFile.exists()) // if file exists, conserve existing master content (may be updated by external tool) mainTransLists = loadTranslationsListsFromXliff(masterOutputFile); else mainTransLists = new TreeMap>(); - List lngFiles = Translator.langFiles(new File("locales")); + List lngFiles = Translator.langFiles(localesFolder); for (String filename : lngFiles) { // load translation list ConcurrentLog.info("TRANSLATOR", "include translation file " + filename); - Map> origTrans = loadTranslationsLists(new File("locales", filename)); + Map> origTrans = loadTranslationsLists(new File(localesFolder, filename)); for (String transfilename : origTrans.keySet()) { // get translation filename File checkfile = new File("htroot", transfilename);