add support for array values

This commit is contained in:
marhali 2021-11-06 23:19:37 +01:00
parent cdd7188769
commit a01b817d3b
2 changed files with 41 additions and 10 deletions

View File

@ -0,0 +1,23 @@
package de.marhali.easyi18n.io.properties;
import de.marhali.easyi18n.io.ArrayMapper;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Map for 'properties' array values.
* @author marhali
*/
public class PropertiesArrayMapper extends ArrayMapper {
public static String read(String[] list) {
return read(Arrays.stream(list).iterator(), Object::toString);
}
public static String[] write(String concat) {
List<String> list = new ArrayList<>();
write(concat, list::add);
return (String[]) list.toArray();
}
}

View File

@ -2,9 +2,10 @@ package de.marhali.easyi18n.io.properties;
import de.marhali.easyi18n.model.Translation; import de.marhali.easyi18n.model.Translation;
import de.marhali.easyi18n.model.TranslationData; import de.marhali.easyi18n.model.TranslationData;
import de.marhali.easyi18n.model.TranslationNode;
import de.marhali.easyi18n.util.StringUtil; import de.marhali.easyi18n.util.StringUtil;
import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.math.NumberUtils;
import java.util.Map; import java.util.Map;
@ -14,20 +15,20 @@ import java.util.Map;
*/ */
public class PropertiesMapper { public class PropertiesMapper {
// TODO: support array values
public static void read(String locale, SortableProperties properties, TranslationData data) { public static void read(String locale, SortableProperties properties, TranslationData data) {
for(Map.Entry<Object, Object> entry : properties.entrySet()) { for(Map.Entry<Object, Object> entry : properties.entrySet()) {
String key = String.valueOf(entry.getKey()); String key = String.valueOf(entry.getKey());
String content = StringUtil.escapeControls(String.valueOf(entry.getValue()), true); Object value = entry.getValue();
Translation translation = data.getTranslation(key); TranslationNode childNode = data.getRootNode().getOrCreateChildren(key);
Translation translation = childNode.getValue();
if(translation == null) { String content = value instanceof String[]
translation = new Translation(); ? PropertiesArrayMapper.read((String[]) value)
} : StringUtil.escapeControls(String.valueOf(value), true);
translation.put(locale, content); translation.put(locale, content);
childNode.setValue(translation);
} }
} }
@ -36,9 +37,16 @@ public class PropertiesMapper {
Translation translation = data.getTranslation(key); Translation translation = data.getTranslation(key);
if(translation != null && translation.containsKey(locale)) { if(translation != null && translation.containsKey(locale)) {
String content = StringEscapeUtils.unescapeJava(translation.get(locale)); String content = translation.get(locale);
if(PropertiesArrayMapper.isArray(content)) {
properties.put(key, PropertiesArrayMapper.write(content));
} else if(NumberUtils.isNumber(content)) {
properties.put(key, NumberUtils.createNumber(content));
} else {
properties.put(key, content); properties.put(key, content);
} }
} }
} }
}
} }