Controlling the translation

MULTILIZER's translator component makes ther actual translation job for you. It provides three ways to translate the user interface. They are the build-in translating, translate events, and derived translator module.

The easiest way it to use build-in translation technology of the translator component. This means that you just tell translator what kind of properties you want to translate. The translator takes care about rest. All the AWT components, most Swing, and most 3rd party components can be translated this way.

Translating the AWT components

Use any translator components. The following tables describes the targets needed to translate the AWT components.

Component Properties Targets Notes
Button label *.label or Button.label  
Checkbox label *.label or Checkbox.label  
CheckboxMenuItem label *.label or CheckboxMenuItem.label  
Choice item[] *.items or Choise.items  
Frame title *.title or Frame.title  
Label text *.text or Label.text  
List item[] *.items or List.items  
Menu item[] *.label  
MenuBar menu[] *.label  
MenuItem label *.label or MenuItem.label  
PopupMenu menu[] *.label  
TextField text *.text or TextField.text The translateTextComponents property must be true.

The following line of code sets the targets property to cover all AWT components.

translator.setTargets("*.text;*.label;*.title;*.items");

or

translator.addDefaultTargets();

Translating the AWT and Swing components

Use the Translator component and add the SwingModule to the main frame.

The following tables describes how to translate the Swing components.

Component Properties Targets Notes
JComponent toolTipText *.toolTipText
JAbstractButton text
toolTipText
*.text
*.toolTipText
JToggleButton text
toolTipText
*.text
*.toolTipText
JButton text
toolTipText
*.text or JButton.text
*.toolTipText or JButton.toolTipText
JRadioButton text
toolTipText
*.text or JRadioButton.text
*.toolTipText or JRadioButton.toolTipText
JCheckBox text
toolTipText
*.text or JCheckBox.text
*.toolTipText or JCheckBox.toolTipText
JLabel text
toolTipText
*.text or JLabel.text
*.toolTipText or JLabel.toolTipText
JTextComponent text
toolTipText
*.text
*.toolTipText
The translateTextComponents property must be true
JTextField text
toolTipText
*.text or JTextField.text
*.toolTipText or JTextField.toolTipText
The translateTextComponents property must be true
JComboBox item[] *.items or JComboBox.items The MComboBoxModel or DefaultComboBoxModel must be used to enable the automatic translation.
JList item[] *.items or JList.items The DefaultListModel (Swing) or MListModel must be used to enable the automatic translation.
JPanel title *.title or JPanel.title
JTabbedPane label[] *.label or JTabbedPane.label
JMenuBar menu[] *.label
JPopupMenu menu[] *.label
JMenu items[] *.label
JMenuItem label *.label or JMenuItem.label
JCheckBoxMenuItem label *.label or JCheckBoxMenuItem.label
JTable headers *.items or JTable.items The MTableModel must be used to enable the automatic translation.
JTree nodes *.items or JTree.items The DefaultMutableTreeNode (Swing) nodes must be used to enable the automatic translation.
JOptionPane whole user interface not used Use MOptionPane instead of JOptionPane.
JFileChooser whole user interface not used Use FileChooser instead of JFileChooser.
JColorChooser N/A N/A MULTILIZER does not yet support this component.

The following line of code sets the targets property to cover all AWT and Swing components.

translator.setTargets("*.text;*.label;*.title;*.items;*.toolTipText");

or

translator.addDefaultTargets();

or

leave the targets property empty.

Translating your own or third party components

The Translator component can translate any String, String[], or Object[] typed property or any component. If you use 3rd party components add the target(s) that they require to the translator.

For example, if you have MyWidget component that has the titleText (setTitleText) and shortName (setShortName) properties, you can make them translate by adding *.titleText and *.shortName targets to the targets property of translator.

Using the translateObject event

Sometimes your 3rd party components are so complex that setting just the String or String[] typed properties is not enough to translate the component. In such case you can write a translateObject event handler that translates the component.

The following example demonstates this. First you add a translate object listener. Then you write the code that translates your tabbed pane.

public class Frame1 extends JFrame
{
  ...
  
  swingTranslator1.addTranslateObjectListener(new multilizer.TranslateObjectListener()
  {
    public void translateObject(ObjectEventObject e)
    {
      swingTranslator1_translateObject(e);
    }
  });
  
  ...
  
  void swingTranslator1_translateObject(ObjectEventObject e)
  {
    if (e.getObject() instanceof MyTabbedPane)
    {
      MyTabbedPane pane = (MyTabbedPane)e.getObject();
      
      for (int i = 0; i < pane.getTabCount(); i++)
      {
        pane.setTitleAt(i, doTranslateString(object, "label", pane.getTitleAt(i)));
      }
    }
  }
}

Deriving a new translator module

If you have several 3rd party components that require writing translateObject events it might be a good idea to derive your own translator module and write the translation code inside the module. This way you do not have to write the event every time that you use the component.