Blo*_*ops 1 spring yaml gradle spring-boot
Spring 唯一支持的 i18n 格式是 .properties 和 .xml,但这并不是真正的最佳选择。我想要的是有一个复杂的 Yaml 文件(messages.yml 和 messages_xx.yml),在 Gradle 任务中转换为 .properties,这样我就可以在 Build 任务之前将其排队。
例如,messages.yml 如下所示:
group1:
group2:
group3:
message1: hello
message2: how are you?
group4:
message3: good
group5:
group6:
message4: let's party
Run Code Online (Sandbox Code Playgroud)
输出 .properties 将是:
group1.group2.group3.message1: hello
group1.group2.group3.message2: how are you?
group1.group2.group4.message3: good
group1.group5.group6.message4: let's party
Run Code Online (Sandbox Code Playgroud)
有办法实现这一点吗?我没有找到现有的转换器。
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Map;
import java.util.TreeMap;
import org.yaml.snakeyaml.Yaml;
public class YamlBackToProperties {
public static void main(String[] args) throws IOException {
Yaml yaml = new Yaml();
try (InputStream in = Files.newInputStream(Paths.get("test.yml"))) {
TreeMap<String, Map<String, Object>> config = yaml.loadAs(in, TreeMap.class);
System.out.println(String.format("%s%n\nConverts to Properties:%n%n%s", config.toString(), toProperties(config)));
}
}
private static String toProperties(TreeMap<String, Map<String, Object>> config) {
StringBuilder sb = new StringBuilder();
for (String key : config.keySet()) {
sb.append(toString(key, config.get(key)));
}
return sb.toString();
}
private static String toString(String key, Map<String, Object> map) {
StringBuilder sb = new StringBuilder();
for (String mapKey : map.keySet()) {
if (map.get(mapKey) instanceof Map) {
sb.append(toString(String.format("%s.%s", key, mapKey), (Map<String, Object>) map.get(mapKey)));
} else {
sb.append(String.format("%s.%s=%s%n", key, mapKey, map.get(mapKey).toString()));
}
}
return sb.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12256 次 |
| 最近记录: |