/*
* $Id$
*
* Copyright (c) 2007 by Rodney Kinney, Brent Easton
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License (LGPL) as published by the Free Software Foundation.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, copies are available
* at http://www.opensource.org.
*/
package VASSAL.i18n;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Locale;
import java.util.Properties;
import VASSAL.tools.ReadErrorDialog;
import VASSAL.tools.io.IOUtils;
/**
* Utility class to allow translation of VASSAL using the Component
* Translation mechanism.
*
* @author Brent Easton
*/
public class VassalTranslation extends Translation {
protected String[] allKeys;
protected Properties baseValues = new Properties();
public VassalTranslation() {
setConfigureName("VASSAL");
final InputStream is = getClass().getResourceAsStream("VASSAL.properties");
try {
if (is != null) {
BufferedInputStream in = null;
try {
in = new BufferedInputStream(is);
baseValues.load(in);
in.close();
}
finally {
IOUtils.closeQuietly(in);
}
}
else {
throw new FileNotFoundException("VASSAL.properties not found");
}
}
catch (IOException e) {
ReadErrorDialog.error(e, "VASSAL.properties");
}
}
protected String getI18nPrefix() {
return "";
}
protected String getDescription() {
return "VASSAL";
}
public void clearProperties() {
localProperties = new Properties();
dirty = false;
allKeys = null;
}
public String getAttributeValueString(String key) {
return baseValues.getProperty(key);
}
public String[] getAttributeDescriptions() {
initkeys();
return allKeys;
}
public String[] getAttributeNames() {
initkeys();
return allKeys;
}
public Class<?>[] getAttributeTypes() {
initkeys();
final Class<?>[] types = new Class<?>[allKeys.length];
Arrays.fill(types, String.class);
return types;
}
protected void initkeys() {
if (allKeys == null) {
allKeys = Resources.getVassalKeys().toArray(new String[0]);
}
}
public void saveProperties(File file, Locale locale) throws IOException {
BufferedOutputStream out = null;
try {
out = new BufferedOutputStream(new FileOutputStream(file));
localProperties.store(out, locale.getDisplayName());
out.close();
dirty = false;
}
finally {
IOUtils.closeQuietly(out);
}
}
protected void loadProperties(InputStream in) throws IOException {
try {
localProperties.load(in);
dirty = false;
in.close();
}
finally {
IOUtils.closeQuietly(in);
}
}
}