Initial Commit
commit
271cecff5b
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/bootstrapper"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
|
@ -0,0 +1,56 @@
|
|||
.metadata
|
||||
bin/
|
||||
tmp/
|
||||
*.tmp
|
||||
*.bak
|
||||
*.swp
|
||||
*~.nib
|
||||
local.properties
|
||||
.settings/
|
||||
.loadpath
|
||||
.recommenders
|
||||
|
||||
# External tool builders
|
||||
.externalToolBuilders/
|
||||
|
||||
# Locally stored "Eclipse launch configurations"
|
||||
*.launch
|
||||
|
||||
# PyDev specific (Python IDE for Eclipse)
|
||||
*.pydevproject
|
||||
|
||||
# CDT-specific (C/C++ Development Tooling)
|
||||
.cproject
|
||||
|
||||
# CDT- autotools
|
||||
.autotools
|
||||
|
||||
# Java annotation processor (APT)
|
||||
.factorypath
|
||||
|
||||
# PDT-specific (PHP Development Tools)
|
||||
.buildpath
|
||||
|
||||
# sbteclipse plugin
|
||||
.target
|
||||
|
||||
# Tern plugin
|
||||
.tern-project
|
||||
|
||||
# TeXlipse plugin
|
||||
.texlipse
|
||||
|
||||
# STS (Spring Tool Suite)
|
||||
.springBeans
|
||||
|
||||
# Code Recommenders
|
||||
.recommenders/
|
||||
|
||||
# Scala IDE specific (Scala & Java development for Eclipse)
|
||||
.cache-main
|
||||
.scala_dependencies
|
||||
.worksheet
|
||||
|
||||
RemoteSystemsTempFiles
|
||||
|
||||
.DS_Store
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>org.hwo.i18n</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -0,0 +1,3 @@
|
|||
Manifest-Version: 1.0
|
||||
Sealed: true
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<jardesc>
|
||||
<jar path="bootstrapper/lib/org.hwo.i18n.jar"/>
|
||||
<options buildIfNeeded="true" compress="true" descriptionLocation="/org.hwo.i18n/org.hwo.i18n.jardesc" exportErrors="false" exportWarnings="true" includeDirectoryEntries="false" overwrite="true" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
|
||||
<storedRefactorings deprecationInfo="true" structuralOnly="false"/>
|
||||
<selectedProjects/>
|
||||
<manifest generateManifest="false" manifestLocation="/org.hwo.i18n/MANIFEST.MF" manifestVersion="1.0" reuseManifest="true" saveManifest="true" usesManifest="true">
|
||||
<sealing sealJar="true">
|
||||
<packagesToSeal/>
|
||||
<packagesToUnSeal/>
|
||||
</sealing>
|
||||
</manifest>
|
||||
<selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
|
||||
<javaElement handleIdentifier="=org.hwo.i18n/src"/>
|
||||
</selectedElements>
|
||||
</jardesc>
|
|
@ -0,0 +1,256 @@
|
|||
package org.hwo.i18n;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.Properties;
|
||||
import java.util.PropertyResourceBundle;
|
||||
import java.util.ResourceBundle;
|
||||
import static bootstrapper.logging.LogLevel.*;
|
||||
import static bootstrapper.logging.Logging.*;
|
||||
|
||||
|
||||
|
||||
public class Messages {
|
||||
|
||||
protected static Messages pInstance;
|
||||
protected static List<Messages> instanceList;
|
||||
protected static Locale activeLocale;
|
||||
|
||||
protected static List<ResourceBundle>
|
||||
resourceBundles;
|
||||
protected static List<Properties>
|
||||
properties;
|
||||
|
||||
protected String
|
||||
BUNDLE_NAME = "org.hwo.i18n.messages";
|
||||
protected Class<?>
|
||||
BUNDLE_CLASS = null;
|
||||
|
||||
|
||||
private ResourceBundle defaultResourceBundle;
|
||||
private ResourceBundle localeResourceBundle;
|
||||
private Properties missingKeys;
|
||||
private String missingKeysFileName;
|
||||
|
||||
protected Messages() {
|
||||
BUNDLE_NAME = String.format("%s", getClass().getCanonicalName());
|
||||
initialize();
|
||||
}
|
||||
|
||||
protected Messages(String bundleName)
|
||||
{
|
||||
BUNDLE_NAME = bundleName;
|
||||
initialize();
|
||||
}
|
||||
|
||||
public void saveMissingStrings() {
|
||||
|
||||
if (missingKeys != null)
|
||||
{
|
||||
FileOutputStream fos;
|
||||
try {
|
||||
fos = new FileOutputStream(missingKeysFileName);
|
||||
log("Writing missing strings to %s",missingKeysFileName);
|
||||
|
||||
missingKeys.storeToXML(fos, "missing translations");
|
||||
fos.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void initialize()
|
||||
{
|
||||
log(DEBUG,this.getClass().getName() + ": Using Locale:" + activeLocale.getCountry() + " / " + activeLocale.getLanguage());
|
||||
|
||||
defaultResourceBundle = ResourceBundle.getBundle(BUNDLE_NAME);
|
||||
localeResourceBundle = ResourceBundle.getBundle(BUNDLE_NAME,activeLocale);
|
||||
|
||||
instanceList.add(this);
|
||||
}
|
||||
|
||||
public String getMissingKeysFileName()
|
||||
{
|
||||
return missingKeysFileName;
|
||||
}
|
||||
public void setMissingKeysFileName(String fileName)
|
||||
{
|
||||
if (missingKeys == null){
|
||||
enableMissingKeys();
|
||||
}
|
||||
|
||||
missingKeysFileName = fileName;
|
||||
try {
|
||||
missingKeys.loadFromXML(new FileInputStream(fileName));
|
||||
} catch (Exception e){
|
||||
log(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void enableMissingKeys()
|
||||
{
|
||||
if (missingKeys == null)
|
||||
missingKeys = new Properties();
|
||||
}
|
||||
|
||||
public static String getString(String key) {
|
||||
|
||||
for (ResourceBundle bundle: resourceBundles){
|
||||
if (bundle.containsKey(key))
|
||||
return bundle.getString(key);
|
||||
}
|
||||
|
||||
for (Messages messages: instanceList)
|
||||
{
|
||||
if (messages.hasKey(key))
|
||||
return messages.getInstanceString(key);
|
||||
}
|
||||
|
||||
for (Properties p: properties){
|
||||
if (p.containsKey(key))
|
||||
return p.getProperty(key);
|
||||
}
|
||||
|
||||
if (getInstance().missingKeys != null)
|
||||
{
|
||||
if (getInstance().missingKeys.containsKey(key))
|
||||
return getInstance().missingKeys.getProperty(key);
|
||||
|
||||
getInstance().missingKeys.setProperty(key, key);
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
public boolean hasKey(String key)
|
||||
{
|
||||
return localeResourceBundle.containsKey(key) | defaultResourceBundle.containsKey(key);
|
||||
}
|
||||
|
||||
protected String getInstanceString(String key) throws MissingResourceException
|
||||
{
|
||||
if (localeResourceBundle.containsKey(key))
|
||||
return localeResourceBundle.getString(key);
|
||||
if (defaultResourceBundle.containsKey(key))
|
||||
return defaultResourceBundle.getString(key);
|
||||
throw new MissingResourceException(BUNDLE_NAME, key, "");
|
||||
}
|
||||
|
||||
public static Messages getInstance()
|
||||
{
|
||||
return pInstance;
|
||||
}
|
||||
|
||||
|
||||
private static String[] generateFileNamesForBase(Class<?> clazz,Locale locale){
|
||||
|
||||
if (locale == null)
|
||||
locale = activeLocale;
|
||||
|
||||
return new String[]{
|
||||
String.format("%s.msg_%s_%s", clazz.getCanonicalName(), locale.getLanguage(), locale.getCountry()),
|
||||
String.format("%s.msg_%s_%s", clazz.getSimpleName(), locale.getLanguage(), locale.getCountry()),
|
||||
String.format("%s.msg_%s", clazz.getCanonicalName(), locale.getLanguage()),
|
||||
String.format("%s.msg_%s", clazz.getSimpleName(), locale.getLanguage()),
|
||||
String.format("%s.msg", clazz.getCanonicalName()),
|
||||
String.format("%s.msg", clazz.getSimpleName())
|
||||
};
|
||||
}
|
||||
|
||||
private static File[] possibleFilesFor(Class<?> clazz){
|
||||
LinkedList<File> files = new LinkedList<>();
|
||||
|
||||
for (String fn: generateFileNamesForBase(clazz, null)){
|
||||
File f = new File(fn);
|
||||
if (f.exists())
|
||||
files.add(f);
|
||||
}
|
||||
|
||||
return files.toArray(new File[0]);
|
||||
}
|
||||
|
||||
|
||||
private static ResourceBundle tryLoad(InputStream is){
|
||||
try {
|
||||
return new PropertyResourceBundle(is);
|
||||
} catch (Exception e){
|
||||
log(e);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean loadMessages(Class<?> clazz){
|
||||
// boolean leastOne = false;
|
||||
// String[] fileNames = generateFileNamesForBase(clazz, null);
|
||||
|
||||
try {
|
||||
ResourceBundle bundle = ResourceBundle.getBundle(clazz.getCanonicalName(),activeLocale);
|
||||
if (bundle != null) {
|
||||
resourceBundles.add(bundle);
|
||||
log(DEBUG,"ResourceBundle found for %s",clazz.getCanonicalName());
|
||||
return true;
|
||||
}
|
||||
} catch (RuntimeException ex) {
|
||||
log(ex);
|
||||
}
|
||||
return false;
|
||||
|
||||
// for (String fn: fileNames){
|
||||
// InputStream is = clazz.getClassLoader().getResourceAsStream(fn);
|
||||
// if (is == null){
|
||||
// if (new File(fn).exists())
|
||||
// try {
|
||||
// is = new FileInputStream(fn);
|
||||
// } catch (FileNotFoundException e) {
|
||||
// log(e);
|
||||
// }
|
||||
// }
|
||||
// if (is != null){
|
||||
// ResourceBundle rb = tryLoad(is);
|
||||
// if (rb != null){
|
||||
// log(INFO,"I18N: loaded %s",fn);
|
||||
// resourceBundles.add(rb);
|
||||
// continue;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// Properties prop = new Properties();
|
||||
// try {
|
||||
// String xfn = String.format("%s.xml", fn);
|
||||
// prop.loadFromXML(new FileInputStream(xfn));
|
||||
// properties.add(prop);
|
||||
// log(INFO,"I18N: loaded %s",xfn);
|
||||
// continue;
|
||||
// } catch (Exception e) {
|
||||
// }
|
||||
//
|
||||
// log(INFO,"I18N: does not exist: %s",fn);
|
||||
// }
|
||||
//
|
||||
// return leastOne;
|
||||
}
|
||||
|
||||
static {
|
||||
resourceBundles = new ArrayList<>();
|
||||
properties = new ArrayList<>();
|
||||
|
||||
if (activeLocale == null)
|
||||
activeLocale = Locale.getDefault();
|
||||
|
||||
if (instanceList == null)
|
||||
instanceList = new LinkedList<Messages>();
|
||||
|
||||
if (pInstance == null)
|
||||
pInstance = new Messages();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
org.hwo=HWOs Java Framework
|
||||
interface=Schnittstelle
|
||||
ok=OK
|
||||
cancel=abbrechen
|
||||
SerialPortChooser.0=Schnittstelle w\u00E4hlen
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
org.hwo=HWOs Java Framework
|
||||
interface=Interface
|
||||
ok=OK
|
||||
cancel=Cancel
|
||||
SerialPortChooser.0=Select Interface
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
org.hwo=HWOs Java Framework
|
||||
interface=Gränssnitt
|
||||
ok=OK
|
||||
cancel=avbryta
|
||||
SerialPortChooser.0=Välj granssnitt:
|
||||
|
Loading…
Reference in New Issue