@@ -0,0 +1,2430 @@
+/*%0A* Licensed to the Apache Software Foundation (ASF) under one or more%0A* contributor license agreements.  See the NOTICE file distributed with%0A* this work for additional information regarding copyright ownership.%0A* The ASF licenses this file to You under the Apache License, Version 2.0%0A* (the %22License%22); you may not use this file except in compliance with%0A* the License.  You may obtain a copy of the License at%0A*%0A*     http://www.apache.org/licenses/LICENSE-2.0%0A*%0A* Unless required by applicable law or agreed to in writing, software%0A* distributed under the License is distributed on an %22AS IS%22 BASIS,%0A* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A* See the License for the specific language governing permissions and%0A* limitations under the License.%0A*/%0Apackage org.apache.tomcat.buildutil.translate;%0A%0Aimport java.io.IOException;%0Aimport java.util.Properties;%0A%0A/**%0A * Generates a set of translated property files to back-port updates to a%0A * previous version. If the source and target use the same value for the English%0A * key then any translated value for that key is copied from the source to the%0A * target.%0A */%0Apublic class BackportTranslations extends BackportBase %7B%0A%0A    public static void main(String... args) throws IOException %7B%0A        BackportTranslations backport = new BackportTranslations(args);%0A        backport.execute();%0A    %7D%0A%0A    protected BackportTranslations(String%5B%5D args) throws IOException %7B%0A        super(args);%0A    %7D%0A%0A%0A    @Override%0A    protected void execute() throws IOException %7B%0A        for (String langauge : targetTranslations.keySet()) %7B%0A            // Skip source%0A            if (langauge.length() == 0) %7B%0A                continue;%0A            %7D%0A%0A            Properties sourceTranslated = sourceTranslations.get(langauge);%0A            Properties targetTranslated = targetTranslations.get(langauge);%0A            if (targetTranslated == null) %7B%0A                targetTranslated = new Properties();%0A                targetTranslations.put(langauge, targetTranslated);%0A            %7D%0A%0A            for (Object key : targetEnglish.keySet()) %7B%0A                if (sourceTranslated.containsKey(key) &&%0A                        targetEnglish.get(key).equals(sourceEnglish.get(key))) %7B%0A%0A                    targetTranslated.put(key, sourceTranslated.get(key));%0A                %7D%0A            %7D%0A%0A            Utils.export(langauge, targetTranslated, storageDir);%0A        %7D%0A    %7D%0A%7D%0A

Add utility to back-port translation updates