play.i18n.MessagesPlugin Maven / Gradle / Ivy
package play.i18n;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import play.Logger;
import play.Play;
import play.PlayPlugin;
import play.exceptions.UnexpectedException;
import play.libs.IO;
import play.vfs.VirtualFile;
/**
* Messages plugin
*/
public class MessagesPlugin extends PlayPlugin {
static Long lastLoading = 0L;
private static List includeMessageFilenames = new ArrayList();
@Override
public void onApplicationStart() {
includeMessageFilenames.clear();
Messages.defaults = new Properties();
try {
File message = new File(Play.frameworkPath, "resources/messages");
Messages.defaults.putAll(read(message));
} catch (Exception e) {
Logger.warn("Defaults messsages file missing");
}
for (VirtualFile module : Play.modules.values()) {
VirtualFile messages = module.child("conf/messages");
if (messages != null && messages.exists()
&& !messages.isDirectory()) {
Messages.defaults.putAll(read(messages));
}
}
VirtualFile appDM = Play.getVirtualFile("conf/messages");
if (appDM != null && appDM.exists() && !appDM.isDirectory()) {
Messages.defaults.putAll(read(appDM));
}
for (String locale : Play.langs) {
Properties properties = new Properties();
for (VirtualFile module : Play.modules.values()) {
VirtualFile messages = module.child("conf/messages." + locale);
if (messages != null && messages.exists()
&& !messages.isDirectory()) {
properties.putAll(read(messages));
}
}
VirtualFile appM = Play.getVirtualFile("conf/messages." + locale);
if (appM != null && appM.exists() && !appM.isDirectory()) {
properties.putAll(read(appM));
} else {
Logger.warn("Messages file missing for locale %s", locale);
}
Messages.locales.put(locale, properties);
}
lastLoading = System.currentTimeMillis();
}
static Properties read(VirtualFile vf) {
if (vf != null) {
return read(vf.getRealFile());
}
return null;
}
static Properties read(File file) {
Properties propsFromFile = null;
if (file != null && !file.isDirectory()) {
InputStream inStream = null;
try {
inStream = new FileInputStream(file);
} catch (Exception e) {
throw new UnexpectedException(e);
}
propsFromFile = IO.readUtf8Properties(inStream);
// Include
Map