Currently showing src/net/jtank/protocol/MultiLingual.java
package net.jtank.protocol;
import net.jtank.io.FileUtil;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File;
import java.util.List;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.util.HashMap;
import java.awt.*;
import javax.swing.*;
/**
* Translates pre-determined English phrases into their equivalents in other languages.
*
*@version 2.0, shipped with juk 2.4
*/
public class MultiLingual {
private ProgramLanPack currentProgram;
private String currentLanguageCode;
private List registeredComponents = new LinkedList ();
public MultiLingual (String program, String baseLan, String directory) {
loadProgramPack(program, baseLan, directory);
}
public void setCurrentLanguageCode (String newLanguageCode) {
currentLanguageCode = newLanguageCode;
for (int i = 0; i < registeredComponents.size(); i++) {
LingualComponent current = (LingualComponent) registeredComponents.get(i);
current.setText(translateWord(current.getDefaultText()));
}
}
public String getCurrentLanguageCode () {
return currentLanguageCode;
}
public String translateWord (String englishWord) {
return translateWord (englishWord, currentLanguageCode);
}
public String translateWord (String englishWord, String languageCode) {
return currentProgram.translateWord(englishWord, languageCode);
}
private void loadProgramPack (String program, String baseLan, String directory) {
currentProgram = new ProgramLanPack( program, baseLan, directory);
}
public JMenu constructMenu () {
return currentProgram.constructMenu();
}
public void register(JComponent c) {
registeredComponents.add(new LingualComponent(c));
}
public void dumpRegisteredComponents() {
System.out.println("Dumping registered components...");
for (int i = 0; i < registeredComponents.size(); i++) {
LingualComponent current = (LingualComponent) registeredComponents.get(i);
System.out.println(current.getDefaultText());
}
System.out.println("... dump finished.");
}
}
class ProgramLanPack {
private String program;
private LanPack baseLan;
private HashMap lanPacks;
private List langPacksList;
public ProgramLanPack (String program, String baseLan, List langPacksList) {
this.program = program;
this.langPacksList = langPacksList;
this.baseLan = getLanPack(baseLan);
lanPacks = new HashMap();
for (int i = 0; i < langPacksList.size(); i++) {
LanPack current = (LanPack) langPacksList.get(i);
lanPacks.put(current.getName(), current);
}
}
public ProgramLanPack (String program, String baseLan, String directory) {
this.program = program;
File dir = new File (directory);
File [] files = dir.listFiles();
System.out.println(directory);
String [] validFiles = new String [files.length];
for (int i = 0; i < validFiles.length; i++) {
validFiles[i] = files[i].getName();
}
lanPacks = new HashMap ();
langPacksList = new LinkedList();
for (int i = 0; i < validFiles.length; i++) {
try {
StringTokenizer st = new StringTokenizer (validFiles[i], "-");
String fprogram = st.nextToken();
StringTokenizer st2 = new StringTokenizer (st.nextToken(), ".");
String lan = st2.nextToken();
String ext = st2.nextToken();
if (program.equals(fprogram) && ext.equals("lpak")) {
LanPack lp = new LanPack(directory + validFiles[i], lan, fprogram);
lanPacks.put(lan, lp);
langPacksList.add(lp);
}
} catch (Exception e) {
}
}
this.baseLan = getLanPack(baseLan);
}
public String translateWord(String word, String lan) {
if (baseLan == null)
return word;
int index = baseLan.indexWord(word);
if (index == -1)
return word;
if (getLanPack(lan) == null)
return word;
String translation = getLanPack(lan).getWord(index);
if (translation == null)
return word;
if (translation.equals(""))
return word;
return translation;
}
public LanPack getLanPack (String name) {
return (LanPack) lanPacks.get(name);
}
public JMenu constructMenu () {
if (baseLan == null)
return null;
JMenu menuLanguages = new JMenu ("Language");
menuLanguages.setIcon(new ImageIcon ("data/images/language.png"));
JRadioButtonMenuItem currentMenuItem = new JRadioButtonMenuItem(baseLan.getName(), true);
menuLanguages.add(currentMenuItem);
currentMenuItem.setIcon(new ImageIcon ("data/images/flags/" + baseLan.getName().toLowerCase() + ".gif"));
for (int i = 0; i < langPacksList.size(); i++) {
LanPack current = (LanPack) langPacksList.get(i);
if (current != baseLan) {
currentMenuItem = new JRadioButtonMenuItem(current.getName(), false);
menuLanguages.add(currentMenuItem);
currentMenuItem.setIcon(new ImageIcon ("data/images/flags/" + current.getName().toLowerCase() + ".gif"));
}
}
if (menuLanguages.getItemCount() == 0)
return null;
return menuLanguages;
}
public String getProgram () { return program; }
}
class LanPack {
private String name;
private String [] words;
private String program;
public LanPack (String file, String name, String program) throws IOException {
this.program = program;
this.name = name;
BufferedReader br = FileUtil.getFileSpecificBufferedReader(file);
String line = br.readLine();
while (!line.equals("---"))
line = br.readLine();
List wordsL = new LinkedList ();
line = br.readLine();
while (line != null) {
wordsL.add(line);
line = br.readLine();
}
words = new String [wordsL.size()];
for (int i = 0; i < wordsL.size(); i++) {
words[i] = (String) wordsL.get(i);
}
}
public int indexWord (String word) {
for (int i = 0; i < words.length; i++) {
if (words[i].equals(word))
return i;
}
return -1;
}
public String getName () { return name; }
public String getWord (int index) {
try {
return words[index];
} catch (ArrayIndexOutOfBoundsException e) {
return null;
}
}
}
class LingualComponent {
private JComponent component;
private String defaultText;
public LingualComponent (JComponent component) {
this.component = component;
defaultText = getText();
}
public String getDefaultText () {
return defaultText;
}
public String getText () {
if (component instanceof JLabel) {
return ((JLabel) component).getText();
} else if (component instanceof JButton) {
return ((JButton) component).getText();
} else if (component instanceof JMenuItem) {
return ((JMenuItem) component).getText();
} else if (component instanceof JMenu) {
return ((JMenu) component).getText();
}
return null;
}
public void setText(String newText) {
if (component instanceof JLabel) {
((JLabel) component).setText(newText);
} else if (component instanceof JButton) {
((JButton) component).setText(newText);
} else if (component instanceof JMenuItem) {
((JMenuItem) component).setText(newText);
} else if (component instanceof JMenu) {
((JMenu) component).setText(newText);
}
}
}
Total 295 Lines of Code.
|
Source code formatted using showsrc by William Denniss
|