/*
* Copyright (C) 2016 Stichting Akvo (Akvo Foundation)
*
* This file is part of Akvo FLOW.
*
* Akvo FLOW is free software: you can redistribute it and modify it under the terms of
* the GNU Affero General Public License (AGPL) as published by the Free Software Foundation,
* either version 3 of the License or any later version.
*
* Akvo FLOW 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 Affero General Public License included below for more details.
*
* The full license text can also be seen at <http://www.gnu.org/licenses/agpl.html>.
*/
package org.akvo.flow.locale;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import org.json.JSONObject;
/**
* Class to load and return language specific strings
*/
public class UIStrings {
public static String getStrings(final InputStream uiStringsResource,
final InputStream localeStringsResource) throws IOException {
final Properties uiStrings = new Properties();
uiStrings.load(uiStringsResource);
if (localeStringsResource == null) { // return default EN strings
return new JSONObject(uiStrings).toString();
} else {
final Properties localeStrings = new Properties();
localeStrings.load(localeStringsResource);
return new JSONObject(translateKeys(uiStrings, localeStrings)).toString();
}
}
/**
* Translate keys for non-english langauges
*
* @param strings
* @param tr
* @return
*/
private static Map<String, String> translateKeys(Properties strings, Properties tr) {
final Map<String, String> result = new HashMap<String, String>();
Iterator<Object> keys = strings.keySet().iterator();
while (keys.hasNext()) {
String k = (String) keys.next();
String v = tr.getProperty(strings.getProperty(k));
if (v == null) {
// log.log(Level.WARNING, "Translation for term " + k
// + " not found, using English term");
result.put(k, strings.getProperty(k));
} else {
result.put(k, v);
}
}
return result;
}
}