You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2018/11/09 10:16:18 UTC
svn commit: r1846226 - in
/tomcat/trunk/java/org/apache/tomcat/buildutil/translate: ./ Constants.java
Export.java
Author: markt
Date: Fri Nov 9 10:16:18 2018
New Revision: 1846226
URL: http://svn.apache.org/viewvc?rev=1846226&view=rev
Log:
Add the code I've been using to export translations to a single file per language. Plenty of scope for improvement.
Added:
tomcat/trunk/java/org/apache/tomcat/buildutil/translate/
tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Constants.java (with props)
tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Export.java (with props)
Added: tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Constants.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Constants.java?rev=1846226&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Constants.java (added)
+++ tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Constants.java Fri Nov 9 10:16:18 2018
@@ -0,0 +1,27 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tomcat.buildutil.translate;
+
+public class Constants {
+
+ public static final String L10N_PREFIX = "LocalStrings";
+ public static final String L10N_SUFFIX = ".properties";
+
+ public static final String[] SEARCH_DIRS = new String[] { "java", "webapps" };
+
+ public static final String END_PACKAGE_MARKER = ".zzz.";
+}
Propchange: tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Constants.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Export.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Export.java?rev=1846226&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Export.java (added)
+++ tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Export.java Fri Nov 9 10:16:18 2018
@@ -0,0 +1,162 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tomcat.buildutil.translate;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.regex.Pattern;
+
+/**
+ * Generates a single properties file per language for import into a translation
+ * tool.
+ */
+public class Export {
+
+ private static final Map<String,Properties> translations = new HashMap<>();
+ private static final Pattern ADD_CONTINUATION = Pattern.compile("\\n", Pattern.MULTILINE);
+ private static final Pattern ESCAPE_LEADING_SPACE = Pattern.compile("^(\\s)", Pattern.MULTILINE);
+
+ public static void main(String... args) {
+ for (String dir : Constants.SEARCH_DIRS) {
+ processRoot(dir);
+ }
+
+ outputTranslations();
+ }
+
+
+ private static void processRoot(String dir) {
+ // Run from within IDE so working dir is root of project.
+ File root = new File(dir);
+
+ // Assumes no l18n files directly in roots
+ for (File f : root.listFiles()) {
+ if (f.isDirectory()) {
+ processDirectory(f);
+ }
+ }
+ }
+
+
+ private static void processDirectory(File dir) {
+ for (File f : dir.listFiles()) {
+ if (f.isDirectory()) {
+ processDirectory(f);
+ } else if (f.isFile()) {
+ processFile(f);
+ }
+ }
+ }
+
+
+ private static void processFile(File f) {
+ String name = f.getName();
+
+ // non-l10n files
+ if (!name.startsWith(Constants.L10N_PREFIX)) {
+ return;
+ }
+
+ // Determine language
+ String language = name.substring(Constants.L10N_PREFIX.length(), name.length() - Constants.L10N_SUFFIX.length());
+ if (language.length() == 0) {
+ // Default
+ } else if (language.length() == 3) {
+ language = language.substring(1);
+ }
+
+ String keyPrefix = getKeyPrefix(f);
+
+ Properties props = new Properties();
+
+ try (FileInputStream fis = new FileInputStream(f);
+ Reader r = new InputStreamReader(fis, StandardCharsets.UTF_8)) {
+ props.load(r);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ // Create a Map for the language if one does not exist.
+ Properties translation = translations.get(language);
+ if (translation == null) {
+ translation = new Properties();
+ translations.put(language, translation);
+ }
+
+ // Add the properties from this file to the combined file, prefixing the
+ // key with the package name to ensure uniqueness.
+ for (Object obj : props.keySet()) {
+ String key = (String) obj;
+ String value = props.getProperty(key);
+
+ translation.put(keyPrefix + key, value);
+ }
+ }
+
+
+ private static String getKeyPrefix(File f) {
+ File wd = new File(".");
+ String prefix = f.getParentFile().getAbsolutePath();
+ prefix = prefix.substring(wd.getAbsolutePath().length() - 1);
+ prefix = prefix.replace(File.separatorChar, '.');
+ prefix = prefix + Constants.END_PACKAGE_MARKER;
+ return prefix;
+ }
+
+
+ private static void outputTranslations() {
+ for (Map.Entry<String,Properties> translationEntry : translations.entrySet()) {
+ Properties translation = translationEntry.getValue();
+
+ String language = translationEntry.getKey();
+ if (language.length() > 0) {
+ language = "_" + language;
+ }
+
+ File out = new File(Constants.L10N_PREFIX + language + Constants.L10N_SUFFIX);
+ try (FileOutputStream fos = new FileOutputStream(out);
+ Writer w = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
+ for (Object key : translation.keySet()) {
+ w.write(key + "=" + formatValue(translation.getProperty((String) key)) + "\n");
+ }
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ }
+ }
+ }
+
+
+ private static String formatValue(String in) {
+ String result = ADD_CONTINUATION.matcher(in).replaceAll("\\\\n\\\\\n");
+ if (result.endsWith("\\\n")) {
+ result = result.substring(0, result.length() - 2);
+ }
+ result = ESCAPE_LEADING_SPACE.matcher(result).replaceAll("\\\\$1");
+ return result;
+ }
+}
+
Propchange: tomcat/trunk/java/org/apache/tomcat/buildutil/translate/Export.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org