Author: bombe
Date: 2007-10-05 17:08:00 +0000 (Fri, 05 Oct 2007)
New Revision: 15431

Added:
   trunk/apps/jSite/src/de/todesbaum/jsite/i18n/I18nContainer.java
Modified:
   trunk/apps/jSite/src/de/todesbaum/jsite/gui/NodeManagerPage.java
   trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectFilesPage.java
   trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectInsertPage.java
   trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectPage.java
   trunk/apps/jSite/src/de/todesbaum/jsite/i18n/I18n.java
   trunk/apps/jSite/src/de/todesbaum/jsite/i18n/jSite_fr.properties
   trunk/apps/jSite/src/de/todesbaum/jsite/main/Main.java
   trunk/apps/jSite/src/de/todesbaum/jsite/main/Version.java
   trunk/apps/jSite/src/de/todesbaum/util/swing/TWizardPage.java
Log:
version 0.4.9.3:
change language on-the-fly
add missing french translations

Modified: trunk/apps/jSite/src/de/todesbaum/jsite/gui/NodeManagerPage.java
===================================================================
--- trunk/apps/jSite/src/de/todesbaum/jsite/gui/NodeManagerPage.java    
2007-10-04 23:54:31 UTC (rev 15430)
+++ trunk/apps/jSite/src/de/todesbaum/jsite/gui/NodeManagerPage.java    
2007-10-05 17:08:00 UTC (rev 15431)
@@ -55,6 +55,7 @@

 import de.todesbaum.jsite.application.Node;
 import de.todesbaum.jsite.i18n.I18n;
+import de.todesbaum.jsite.i18n.I18nContainer;
 import de.todesbaum.util.swing.TLabel;
 import de.todesbaum.util.swing.TWizard;
 import de.todesbaum.util.swing.TWizardPage;
@@ -66,21 +67,27 @@
 public class NodeManagerPage extends TWizardPage implements 
ListSelectionListener, DocumentListener, ChangeListener {

        private List<NodeManagerListener> nodeManagerListeners = new 
ArrayList<NodeManagerListener>();
-       private TWizard wizard;

-       private Action addNodeAction;
-       private Action deleteNodeAction;
+       protected Action addNodeAction;
+       protected Action deleteNodeAction;
        private DefaultListModel nodeListModel;
        private JList nodeList;
        private JTextField nodeNameTextField;
        private JTextField nodeHostnameTextField;
        private JSpinner nodePortSpinner;

-       public NodeManagerPage() {
-               super();
+       public NodeManagerPage(final TWizard wizard) {
+               super(wizard);
                pageInit();
                setHeading(I18n.getMessage("jsite.node-manager.heading"));
                
setDescription(I18n.getMessage("jsite.node-manager.description"));
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               
setHeading(I18n.getMessage("jsite.node-manager.heading"));
+                               
setDescription(I18n.getMessage("jsite.node-manager.description"));
+                       }
+               });
        }

        public void addNodeManagerListener(NodeManagerListener 
nodeManagerListener) {
@@ -112,6 +119,14 @@
                        }
                };
                deleteNodeAction.setEnabled(false);
+
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               addNodeAction.putValue(Action.NAME, 
I18n.getMessage("jsite.node-manager.add-node"));
+                               deleteNodeAction.putValue(Action.NAME, 
I18n.getMessage("jsite.node-manager.delete-node"));
+                       }
+               });
        }

        private void pageInit() {
@@ -147,17 +162,31 @@
                JPanel nodeInformationPanel = new JPanel(new GridBagLayout());
                centerPanel.add(nodeInformationPanel, BorderLayout.PAGE_START);
                nodeInformationPanel.add(buttonPanel, new GridBagConstraints(0, 
0, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
-               nodeInformationPanel.add(new JLabel("<html><b>" + 
I18n.getMessage("jsite.node-manager.node-information") + "</b></html>"), new 
GridBagConstraints(0, 1, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 0, 0, 0), 0, 0));
-               nodeInformationPanel.add(new 
TLabel(I18n.getMessage("jsite.node-manager.name"), KeyEvent.VK_N, 
nodeNameTextField), new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, 
GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 
0), 0, 0));
+               final JLabel nodeInformationLabel = new JLabel("<html><b>" + 
I18n.getMessage("jsite.node-manager.node-information") + "</b></html>");
+               nodeInformationPanel.add(nodeInformationLabel, new 
GridBagConstraints(0, 1, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 0, 0, 0), 0, 0));
+               final TLabel nodeNameLabel = new 
TLabel(I18n.getMessage("jsite.node-manager.name") + ":", KeyEvent.VK_N, 
nodeNameTextField);
+               nodeInformationPanel.add(nodeNameLabel, new 
GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
                nodeInformationPanel.add(nodeNameTextField, new 
GridBagConstraints(1, 2, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
-               nodeInformationPanel.add(new 
TLabel(I18n.getMessage("jsite.node-manager.hostname"), KeyEvent.VK_H, 
nodeHostnameTextField), new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, 
GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 
0), 0, 0));
+               final TLabel nodeHostnameLabel = new 
TLabel(I18n.getMessage("jsite.node-manager.hostname") + ":", KeyEvent.VK_H, 
nodeHostnameTextField);
+               nodeInformationPanel.add(nodeHostnameLabel, new 
GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
                nodeInformationPanel.add(nodeHostnameTextField, new 
GridBagConstraints(1, 3, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
-               nodeInformationPanel.add(new 
TLabel(I18n.getMessage("jsite.node-manager.port"), KeyEvent.VK_P, 
nodePortSpinner), new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0, 
GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 
0), 0, 0));
+               final TLabel nodePortLabel = new 
TLabel(I18n.getMessage("jsite.node-manager.port") + ":", KeyEvent.VK_P, 
nodePortSpinner);
+               nodeInformationPanel.add(nodePortLabel, new 
GridBagConstraints(0, 4, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
                nodeInformationPanel.add(nodePortSpinner, new 
GridBagConstraints(1, 4, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 6, 0, 0), 0, 0));

                setLayout(new BorderLayout(12, 12));
                add(new JScrollPane(nodeList), BorderLayout.LINE_START);
                add(centerPanel, BorderLayout.CENTER);
+
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               nodeInformationLabel.setText("<html><b>" + 
I18n.getMessage("jsite.node-manager.node-information") + "</b></html>");
+                               
nodeNameLabel.setText(I18n.getMessage("jsite.node-manager.name") + ":");
+                               
nodeHostnameLabel.setText(I18n.getMessage("jsite.node-manager.hostname") + ":");
+                               
nodePortLabel.setText(I18n.getMessage("jsite.node-manager.port") + ":");
+                       }
+               });
        }

        /**
@@ -165,8 +194,10 @@
         */
        @Override
        public void pageAdded(TWizard wizard) {
-               this.wizard = wizard;
-               wizard.setNextEnabled(nodeListModel.getSize() > 0);
+               this.wizard.setNextEnabled(nodeListModel.getSize() > 0);
+               
this.wizard.setPreviousName(I18n.getMessage("jsite.wizard.previous"));
+               this.wizard.setNextName(I18n.getMessage("jsite.wizard.next"));
+               this.wizard.setQuitName(I18n.getMessage("jsite.wizard.quit"));
        }

        public void setNodes(Node[] nodes) {

Modified: trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectFilesPage.java
===================================================================
--- trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectFilesPage.java   
2007-10-04 23:54:31 UTC (rev 15430)
+++ trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectFilesPage.java   
2007-10-05 17:08:00 UTC (rev 15431)
@@ -64,6 +64,7 @@
 import de.todesbaum.jsite.application.FileOption;
 import de.todesbaum.jsite.application.Project;
 import de.todesbaum.jsite.i18n.I18n;
+import de.todesbaum.jsite.i18n.I18nContainer;
 import de.todesbaum.util.mime.DefaultMIMETypes;
 import de.todesbaum.util.swing.TLabel;
 import de.todesbaum.util.swing.TWizard;
@@ -75,14 +76,12 @@
  */
 public class ProjectFilesPage extends TWizardPage implements ActionListener, 
ListSelectionListener, DocumentListener, FileScannerListener, ChangeListener {

-       protected TWizard wizard;
-
        protected Project project;

-       private Action scanAction;
-       private Action editContainerAction;
-       private Action addContainerAction;
-       private Action deleteContainerAction;
+       protected Action scanAction;
+       protected Action editContainerAction;
+       protected Action addContainerAction;
+       protected Action deleteContainerAction;

        protected JList projectFileList;
        private JCheckBox defaultFileCheckBox;
@@ -94,8 +93,8 @@
        private JSpinner replaceEditionRangeSpinner;
        private JCheckBox replacementCheckBox;

-       public ProjectFilesPage() {
-               super();
+       public ProjectFilesPage(final TWizard wizard) {
+               super(wizard);
                pageInit();
        }

@@ -141,12 +140,28 @@
                };
                deleteContainerAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project-files.action.delete-container.tooltip"));
                deleteContainerAction.setEnabled(false);
+
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               scanAction.putValue(Action.NAME, 
I18n.getMessage("jsite.project-files.action.rescan"));
+                               scanAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project-files.action.rescan.tooltip"));
+                               addContainerAction.putValue(Action.NAME, 
I18n.getMessage("jsite.project-files.action.add-container"));
+                               
addContainerAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project-files.action.add-container.tooltip"));
+                               editContainerAction.putValue(Action.NAME, 
I18n.getMessage("jsite.project-files.action.edit-container"));
+                               
editContainerAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project-files.action.edit-container.tooltip"));
+                               deleteContainerAction.putValue(Action.NAME, 
I18n.getMessage("jsite.project-files.action.delete-container"));
+                               
deleteContainerAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project-files.action.delete-container.tooltip"));
+                       }
+               });
        }

        @Override
        public void pageAdded(TWizard wizard) {
-               this.wizard = wizard;
                actionScan();
+               
this.wizard.setPreviousName(I18n.getMessage("jsite.wizard.previous"));
+               
this.wizard.setNextName(I18n.getMessage("jsite.project-files.insert-now"));
+               this.wizard.setQuitName(I18n.getMessage("jsite.wizard.quit"));
        }

        private JComponent createProjectFilesPanel() {
@@ -166,7 +181,8 @@

                fileOptionsPanel.add(new JButton(scanAction), new 
GridBagConstraints(0, 0, 5, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));

-               fileOptionsPanel.add(new JLabel("<html><b>" + 
I18n.getMessage("jsite.project-files.file-options") + "</b></html>"), new 
GridBagConstraints(0, 1, 5, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 0, 0, 0), 0, 0));
+               final JLabel fileOptionsLabel = new JLabel("<html><b>" + 
I18n.getMessage("jsite.project-files.file-options") + "</b></html>");
+               fileOptionsPanel.add(fileOptionsLabel, new 
GridBagConstraints(0, 1, 5, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 0, 0, 0), 0, 0));

                defaultFileCheckBox = new 
JCheckBox(I18n.getMessage("jsite.project-files.default"));
                
defaultFileCheckBox.setToolTipText(I18n.getMessage("jsite.project-files.default.tooltip"));
@@ -190,7 +206,8 @@
                fileOptionsCustomKeyTextField.setEnabled(false);
                
fileOptionsCustomKeyTextField.getDocument().addDocumentListener(this);

-               fileOptionsPanel.add(new 
TLabel(I18n.getMessage("jsite.project-files.custom-key"), KeyEvent.VK_K, 
fileOptionsCustomKeyTextField), new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0, 
GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 
0), 0, 0));
+               final TLabel customKeyLabel = new 
TLabel(I18n.getMessage("jsite.project-files.custom-key") + ":", KeyEvent.VK_K, 
fileOptionsCustomKeyTextField);
+               fileOptionsPanel.add(customKeyLabel, new GridBagConstraints(0, 
4, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new 
Insets(6, 18, 0, 0), 0, 0));
                fileOptionsPanel.add(fileOptionsCustomKeyTextField, new 
GridBagConstraints(1, 4, 4, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));

                fileOptionsMIMETypeComboBox = new 
JComboBox(DefaultMIMETypes.getAllMIMETypes());
@@ -199,7 +216,8 @@
                fileOptionsMIMETypeComboBox.addActionListener(this);
                fileOptionsMIMETypeComboBox.setEnabled(false);

-               fileOptionsPanel.add(new 
TLabel(I18n.getMessage("jsite.project-files.mime-type"), KeyEvent.VK_M, 
fileOptionsMIMETypeComboBox), new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0, 
GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 
0), 0, 0));
+               final TLabel mimeTypeLabel = new 
TLabel(I18n.getMessage("jsite.project-files.mime-type") + ":", KeyEvent.VK_M, 
fileOptionsMIMETypeComboBox);
+               fileOptionsPanel.add(mimeTypeLabel, new GridBagConstraints(0, 
5, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new 
Insets(6, 18, 0, 0), 0, 0));
                fileOptionsPanel.add(fileOptionsMIMETypeComboBox, new 
GridBagConstraints(1, 5, 4, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));

                containerComboBoxModel = new DefaultComboBoxModel();
@@ -209,7 +227,8 @@
                fileOptionsContainerComboBox.addActionListener(this);
                fileOptionsContainerComboBox.setEnabled(false);

-               fileOptionsPanel.add(new 
TLabel(I18n.getMessage("jsite.project-files.container"), KeyEvent.VK_C, 
fileOptionsContainerComboBox), new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0, 
GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 
0), 0, 0));
+               final TLabel containerLabel = new 
TLabel(I18n.getMessage("jsite.project-files.container") + ":", KeyEvent.VK_C, 
fileOptionsContainerComboBox);
+               fileOptionsPanel.add(containerLabel, new GridBagConstraints(0, 
6, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new 
Insets(6, 18, 0, 0), 0, 0));
                fileOptionsPanel.add(fileOptionsContainerComboBox, new 
GridBagConstraints(1, 6, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
                fileOptionsPanel.add(new JButton(addContainerAction), new 
GridBagConstraints(2, 6, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
                fileOptionsPanel.add(new JButton(editContainerAction), new 
GridBagConstraints(3, 6, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
@@ -230,18 +249,47 @@
                
replaceEditionRangeSpinner.setToolTipText(I18n.getMessage("jsite.project-files.replacement.edition-range.tooltip"));
                replaceEditionRangeSpinner.addChangeListener(this);
                replaceEditionRangeSpinner.setEnabled(false);
-               fileOptionsReplacementPanel.add(new 
JLabel(I18n.getMessage("jsite.project-files.replacement.edition-range")));
+               final JLabel editionRangeLabel = new 
JLabel(I18n.getMessage("jsite.project-files.replacement.edition-range"));
+               fileOptionsReplacementPanel.add(editionRangeLabel);
                fileOptionsReplacementPanel.add(replaceEditionRangeSpinner);

                fileOptionsPanel.add(fileOptionsReplacementPanel, new 
GridBagConstraints(0, 7, 5, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 18, 0, 0), 0, 0));

+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               fileOptionsLabel.setText("<html><b>" + 
I18n.getMessage("jsite.project-files.file-options") + "</b></html>");
+                               
defaultFileCheckBox.setText(I18n.getMessage("jsite.project-files.default"));
+                               
defaultFileCheckBox.setToolTipText(I18n.getMessage("jsite.project-files.default.tooltip"));
+                               
fileOptionsInsertCheckBox.setText(I18n.getMessage("jsite.project-files.insert"));
+                               
fileOptionsInsertCheckBox.setToolTipText(I18n.getMessage("jsite.project-files.insert.tooltip"));
+                               
fileOptionsCustomKeyTextField.setToolTipText(I18n.getMessage("jsite.project-files.custom-key.tooltip"));
+                               
customKeyLabel.setText(I18n.getMessage("jsite.project-files.custom-key") + ":");
+                               
fileOptionsMIMETypeComboBox.setToolTipText(I18n.getMessage("jsite.project-files.mime-type.tooltip"));
+                               
mimeTypeLabel.setText(I18n.getMessage("jsite.project-files.mime-type") + ":");
+                               
fileOptionsContainerComboBox.setToolTipText(I18n.getMessage("jsite.project-files.container.tooltip"));
+                               
containerLabel.setText(I18n.getMessage("jsite.project-files.container") + ":");
+                               
replacementCheckBox.setText(I18n.getMessage("jsite.project-files.replacement"));
+                               
replacementCheckBox.setToolTipText(I18n.getMessage("jsite.project-files.replacement.tooltip"));
+                               
replaceEditionRangeSpinner.setToolTipText(I18n.getMessage("jsite.project-files.replacement.edition-range.tooltip"));
+                               
editionRangeLabel.setText(I18n.getMessage("jsite.project-files.replacement.edition-range"));
+                       }
+               });
+
                return projectFilesPanel;
        }

-       public void setProject(Project project) {
+       public void setProject(final Project project) {
                this.project = project;
                
setHeading(MessageFormat.format(I18n.getMessage("jsite.project-files.heading"), 
project.getName()));
                
setDescription(I18n.getMessage("jsite.project-files.description"));
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               
setHeading(MessageFormat.format(I18n.getMessage("jsite.project-files.heading"), 
project.getName()));
+                               
setDescription(I18n.getMessage("jsite.project-files.description"));
+                       }
+               });
        }

        private List<String> getProjectFiles() {

Modified: trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectInsertPage.java
===================================================================
--- trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectInsertPage.java  
2007-10-04 23:54:31 UTC (rev 15430)
+++ trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectInsertPage.java  
2007-10-05 17:08:00 UTC (rev 15431)
@@ -51,6 +51,7 @@
 import de.todesbaum.jsite.application.Project;
 import de.todesbaum.jsite.application.ProjectInserter;
 import de.todesbaum.jsite.i18n.I18n;
+import de.todesbaum.jsite.i18n.I18nContainer;
 import de.todesbaum.util.swing.TWizard;
 import de.todesbaum.util.swing.TWizardPage;

@@ -60,21 +61,27 @@
  */
 public class ProjectInsertPage extends TWizardPage implements InsertListener, 
ClipboardOwner {

-       protected TWizard wizard;
        protected ProjectInserter projectInserter;

        protected Action copyURIAction;
        protected JTextField requestURITextField;
        protected JLabel startTimeLabel;
        protected JProgressBar progressBar;
-       protected long startTime;
+       protected long startTime = 0;

-       public ProjectInsertPage() {
-               super();
+       public ProjectInsertPage(final TWizard wizard) {
+               super(wizard);
                createActions();
                pageInit();
                setHeading(I18n.getMessage("jsite.insert.heading"));
                setDescription(I18n.getMessage("jsite.insert.description"));
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               
setHeading(I18n.getMessage("jsite.insert.heading"));
+                               
setDescription(I18n.getMessage("jsite.insert.description"));
+                       }
+               });
                projectInserter = new ProjectInserter();
                projectInserter.addInsertListener(this);
        }
@@ -88,6 +95,14 @@
                copyURIAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project.action.copy-uri.tooltip"));
                copyURIAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_U);
                copyURIAction.setEnabled(false);
+
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               copyURIAction.putValue(Action.NAME, 
I18n.getMessage("jsite.project.action.copy-uri"));
+                               
copyURIAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project.action.copy-uri.tooltip"));
+                       }
+               });
        }

        private void pageInit() {
@@ -107,15 +122,34 @@
                progressBar.setStringPainted(true);
                progressBar.setValue(0);

-               projectInsertPanel.add(new JLabel("<html><b>" + 
I18n.getMessage("jsite.insert.project-information") + "</b></html>"), new 
GridBagConstraints(0, 0, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
-               projectInsertPanel.add(new 
JLabel(I18n.getMessage("jsite.insert.request-uri") + ":"), new 
GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 18, 0, 0), 0, 0));
+               final JLabel projectInformationLabel = new JLabel("<html><b>" + 
I18n.getMessage("jsite.insert.project-information") + "</b></html>");
+               projectInsertPanel.add(projectInformationLabel, new 
GridBagConstraints(0, 0, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
+               final JLabel requestURILabel = new 
JLabel(I18n.getMessage("jsite.insert.request-uri") + ":");
+               projectInsertPanel.add(requestURILabel, new 
GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 18, 0, 0), 0, 0));
                projectInsertPanel.add(requestURITextField, new 
GridBagConstraints(1, 1, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
-               projectInsertPanel.add(new 
JLabel(I18n.getMessage("jsite.insert.start-time") + ":"), new 
GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 18, 0, 0), 0, 0));
+               final JLabel startTimeLeftLabel = new 
JLabel(I18n.getMessage("jsite.insert.start-time") + ":");
+               projectInsertPanel.add(startTimeLeftLabel, new 
GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 18, 0, 0), 0, 0));
                projectInsertPanel.add(startTimeLabel, new 
GridBagConstraints(1, 2, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
-               projectInsertPanel.add(new 
JLabel(I18n.getMessage("jsite.insert.progress") + ":"), new 
GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 18, 0, 0), 0, 0));
+               final JLabel progressLabel = new 
JLabel(I18n.getMessage("jsite.insert.progress") + ":");
+               projectInsertPanel.add(progressLabel, new GridBagConstraints(0, 
3, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 18, 0, 0), 0, 0));
                projectInsertPanel.add(progressBar, new GridBagConstraints(1, 
3, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
                projectInsertPanel.add(new JButton(copyURIAction), new 
GridBagConstraints(0, 4, 2, 1, 0.0, 0.0, GridBagConstraints.LINE_END, 
GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));

+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               projectInformationLabel.setText("<html><b>" + 
I18n.getMessage("jsite.insert.project-information") + "</b></html>");
+                               
requestURILabel.setText(I18n.getMessage("jsite.insert.request-uri") + ":");
+                               
startTimeLeftLabel.setText(I18n.getMessage("jsite.insert.start-time") + ":");
+                               if (startTime != 0) {
+                                       
startTimeLabel.setText(DateFormat.getDateTimeInstance().format(new 
Date(startTime)));
+                               } else {
+                                       startTimeLabel.setText("");
+                               }
+                               
progressLabel.setText(I18n.getMessage("jsite.insert.progress") + ":");
+                       }
+               });
+
                return projectInsertPanel;
        }

@@ -124,10 +158,14 @@
         */
        @Override
        public void pageAdded(TWizard wizard) {
-               this.wizard = wizard;
-               wizard.setPreviousEnabled(false);
+               
this.wizard.setPreviousName(I18n.getMessage("jsite.wizard.previous"));
+               this.wizard.setPreviousEnabled(false);
+               this.wizard.setNextName(I18n.getMessage("jsite.wizard.next"));
+               this.wizard.setQuitName(I18n.getMessage("jsite.wizard.quit"));
+       }
+
+       public void startInsert() {
                wizard.setNextEnabled(false);
-               wizard.setQuitEnabled(false);
                copyURIAction.setEnabled(false);
                progressBar.setValue(0);
                
progressBar.setFont(progressBar.getFont().deriveFont(Font.PLAIN));

Modified: trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectPage.java
===================================================================
--- trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectPage.java        
2007-10-04 23:54:31 UTC (rev 15430)
+++ trunk/apps/jSite/src/de/todesbaum/jsite/gui/ProjectPage.java        
2007-10-05 17:08:00 UTC (rev 15431)
@@ -58,6 +58,7 @@
 import de.todesbaum.jsite.application.Freenet7Interface;
 import de.todesbaum.jsite.application.Project;
 import de.todesbaum.jsite.i18n.I18n;
+import de.todesbaum.jsite.i18n.I18nContainer;
 import de.todesbaum.util.swing.SortedListModel;
 import de.todesbaum.util.swing.TLabel;
 import de.todesbaum.util.swing.TWizard;
@@ -71,12 +72,12 @@

        private Freenet7Interface freenetInterface;

-       private Action projectLocalPathBrowseAction;
-       private Action projectAddAction;
-       private Action projectDeleteAction;
-       private Action projectCloneAction;
-       private Action projectCopyURIAction;
-       private Action projectGenerateKeyAction;
+       protected Action projectLocalPathBrowseAction;
+       protected Action projectAddAction;
+       protected Action projectDeleteAction;
+       protected Action projectCloneAction;
+       protected Action projectCopyURIAction;
+       protected Action projectGenerateKeyAction;

        private JFileChooser pathChooser;
        private SortedListModel projectListModel;
@@ -88,12 +89,20 @@
        private JTextField projectPrivateKeyTextField;
        private JTextField projectPathTextField;

-       public ProjectPage() {
-               super();
+       public ProjectPage(final TWizard wizard) {
+               super(wizard);
                setLayout(new BorderLayout(12, 12));
                dialogInit();
                setHeading(I18n.getMessage("jsite.project.heading"));
                setDescription(I18n.getMessage("jsite.project.description"));
+               
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               
setHeading(I18n.getMessage("jsite.project.heading"));
+                               
setDescription(I18n.getMessage("jsite.project.description"));
+                       }
+               });
        }

        protected void dialogInit() {
@@ -117,7 +126,10 @@
        public void pageAdded(TWizard wizard) {
                super.pageAdded(wizard);
                projectList.clearSelection();
-               wizard.setNextEnabled(false);
+               
this.wizard.setPreviousName(I18n.getMessage("jsite.menu.nodes.manage-nodes"));
+               this.wizard.setNextName(I18n.getMessage("jsite.wizard.next"));
+               this.wizard.setQuitName(I18n.getMessage("jsite.wizard.quit"));
+               this.wizard.setNextEnabled(false);
        }

        /**
@@ -171,8 +183,9 @@
                projectCloneAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project.action.clone-project.tooltip"));
                projectCloneAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_L);
                projectCloneAction.setEnabled(false);
-               
+
                projectCopyURIAction = new 
AbstractAction(I18n.getMessage("jsite.project.action.copy-uri")) {
+
                        public void actionPerformed(ActionEvent actionEvent) {
                                actionCopyURI();
                        }
@@ -180,8 +193,9 @@
                projectCopyURIAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project.action.copy-uri.tooltip"));
                projectCopyURIAction.putValue(Action.MNEMONIC_KEY, 
KeyEvent.VK_U);
                projectCopyURIAction.setEnabled(false);
-               
+
                projectGenerateKeyAction = new 
AbstractAction(I18n.getMessage("jsite.project.action.generate-new-key")) {
+
                        public void actionPerformed(ActionEvent actionEvent) {
                                actionGenerateNewKey();
                        }
@@ -189,6 +203,24 @@
                projectGenerateKeyAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project.action.generate-new-key.tooltip"));
                projectGenerateKeyAction.putValue(Action.MNEMONIC_KEY, 
KeyEvent.VK_G);
                projectGenerateKeyAction.setEnabled(false);
+               
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               
projectLocalPathBrowseAction.putValue(Action.NAME, 
I18n.getMessage("jsite.project.action.browse"));
+                               
projectLocalPathBrowseAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project.action.browse.tooltip"));
+                               projectAddAction.putValue(Action.NAME, 
I18n.getMessage("jsite.project.action.add-project"));
+                               
projectAddAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project.action.add-project.tooltip"));
+                               projectDeleteAction.putValue(Action.NAME, 
I18n.getMessage("jsite.project.action.delete-project"));
+                               
projectDeleteAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project.action.delete-project.tooltip"));
+                               projectCloneAction.putValue(Action.NAME, 
I18n.getMessage("jsite.project.action.clone-project"));
+                               
projectCloneAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project.action.clone-project.tooltip"));
+                               projectCopyURIAction.putValue(Action.NAME, 
I18n.getMessage("jsite.project.action.copy-uri"));
+                               
projectCopyURIAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project.action.copy-uri.tooltip"));
+                               projectGenerateKeyAction.putValue(Action.NAME, 
I18n.getMessage("jsite.project.action.generate-new-key"));
+                               
projectGenerateKeyAction.putValue(Action.SHORT_DESCRIPTION, 
I18n.getMessage("jsite.project.action.generate-new-key.tooltip"));
+                       }
+               });
        }

        private JComponent createInformationPanel() {
@@ -206,14 +238,16 @@
                informationPanel.add(functionButtons, BorderLayout.PAGE_START);
                informationPanel.add(informationTable, BorderLayout.CENTER);

-               informationTable.add(new JLabel("<html><b>" + 
I18n.getMessage("jsite.project.project.information") + "</b></html>"), new 
GridBagConstraints(0, 0, 3, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
+               final JLabel projectInformationLabel = new JLabel("<html><b>" + 
I18n.getMessage("jsite.project.project.information") + "</b></html>");
+               informationTable.add(projectInformationLabel, new 
GridBagConstraints(0, 0, 3, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));

                projectNameTextField = new JTextField();
                projectNameTextField.getDocument().putProperty("name", 
"project.name");
                projectNameTextField.getDocument().addDocumentListener(this);
                projectNameTextField.setEnabled(false);

-               informationTable.add(new 
TLabel(I18n.getMessage("jsite.project.project.name") + ":", KeyEvent.VK_N, 
projectNameTextField), new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 
GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 
0), 0, 0));
+               final TLabel projectNameLabel = new 
TLabel(I18n.getMessage("jsite.project.project.name") + ":", KeyEvent.VK_N, 
projectNameTextField);
+               informationTable.add(projectNameLabel, new 
GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
                informationTable.add(projectNameTextField, new 
GridBagConstraints(1, 1, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));

                projectDescriptionTextField = new JTextField();
@@ -221,7 +255,8 @@
                
projectDescriptionTextField.getDocument().addDocumentListener(this);
                projectDescriptionTextField.setEnabled(false);

-               informationTable.add(new 
TLabel(I18n.getMessage("jsite.project.project.description") + ":", 
KeyEvent.VK_D, projectDescriptionTextField), new GridBagConstraints(0, 2, 1, 1, 
0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 
18, 0, 0), 0, 0));
+               final TLabel projectDescriptionLabel = new 
TLabel(I18n.getMessage("jsite.project.project.description") + ":", 
KeyEvent.VK_D, projectDescriptionTextField);
+               informationTable.add(projectDescriptionLabel, new 
GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
                informationTable.add(projectDescriptionTextField, new 
GridBagConstraints(1, 2, 2, 1, 1.0, 0.0, GridBagConstraints.CENTER, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));

                projectLocalPathTextField = new JTextField();
@@ -229,18 +264,21 @@
                
projectLocalPathTextField.getDocument().addDocumentListener(this);
                projectLocalPathTextField.setEnabled(false);

-               informationTable.add(new 
TLabel(I18n.getMessage("jsite.project.project.local-path") + ":", 
KeyEvent.VK_L, projectLocalPathTextField), new GridBagConstraints(0, 3, 1, 1, 
0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 
18, 0, 0), 0, 0));
+               final TLabel projectLocalPathLabel = new 
TLabel(I18n.getMessage("jsite.project.project.local-path") + ":", 
KeyEvent.VK_L, projectLocalPathTextField);
+               informationTable.add(projectLocalPathLabel, new 
GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
                informationTable.add(projectLocalPathTextField, new 
GridBagConstraints(1, 3, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
                informationTable.add(new JButton(projectLocalPathBrowseAction), 
new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));

-               informationTable.add(new JLabel("<html><b>" + 
I18n.getMessage("jsite.project.project.address") + "</b></html>"), new 
GridBagConstraints(0, 4, 3, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(12, 0, 0, 0), 0, 0));
+               final JLabel projectAddressLabel = new JLabel("<html><b>" + 
I18n.getMessage("jsite.project.project.address") + "</b></html>");
+               informationTable.add(projectAddressLabel, new 
GridBagConstraints(0, 4, 3, 1, 1.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(12, 0, 0, 0), 0, 0));

                projectPublicKeyTextField = new JTextField(27);
                projectPublicKeyTextField.getDocument().putProperty("name", 
"project.publickey");
                
projectPublicKeyTextField.getDocument().addDocumentListener(this);
                projectPublicKeyTextField.setEnabled(false);

-               informationTable.add(new 
TLabel(I18n.getMessage("jsite.project.project.public-key") + ":", 
KeyEvent.VK_U, projectPublicKeyTextField), new GridBagConstraints(0, 5, 1, 1, 
0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 
18, 0, 0), 0, 0));
+               final TLabel projectPublicKeyLabel = new 
TLabel(I18n.getMessage("jsite.project.project.public-key") + ":", 
KeyEvent.VK_U, projectPublicKeyTextField);
+               informationTable.add(projectPublicKeyLabel, new 
GridBagConstraints(0, 5, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
                informationTable.add(projectPublicKeyTextField, new 
GridBagConstraints(1, 5, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
                informationTable.add(new JButton(projectGenerateKeyAction), new 
GridBagConstraints(2, 5, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));

@@ -249,7 +287,8 @@
                
projectPrivateKeyTextField.getDocument().addDocumentListener(this);
                projectPrivateKeyTextField.setEnabled(false);

-               informationTable.add(new 
TLabel(I18n.getMessage("jsite.project.project.private-key") + ":", 
KeyEvent.VK_R, projectPrivateKeyTextField), new GridBagConstraints(0, 6, 1, 1, 
0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 
18, 0, 0), 0, 0));
+               final TLabel projectPrivateKeyLabel = new 
TLabel(I18n.getMessage("jsite.project.project.private-key") + ":", 
KeyEvent.VK_R, projectPrivateKeyTextField);
+               informationTable.add(projectPrivateKeyLabel, new 
GridBagConstraints(0, 6, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
                informationTable.add(projectPrivateKeyTextField, new 
GridBagConstraints(1, 6, 2, 1, 1.0, 0.0, GridBagConstraints.CENTER, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));

                projectPathTextField = new JTextField();
@@ -257,7 +296,21 @@
                projectPathTextField.getDocument().addDocumentListener(this);
                projectPathTextField.setEnabled(false);

-               informationTable.add(new 
TLabel(I18n.getMessage("jsite.project.project.path") + ":", KeyEvent.VK_P, 
projectPathTextField), new GridBagConstraints(0, 7, 1, 1, 0.0, 0.0, 
GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 
0), 0, 0));
+               final TLabel projectPathLabel = new 
TLabel(I18n.getMessage("jsite.project.project.path") + ":", KeyEvent.VK_P, 
projectPathTextField);
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+
+                       public void run() {
+                               projectInformationLabel.setText("<html><b>" + 
I18n.getMessage("jsite.project.project.information") + "</b></html>");
+                               
projectNameLabel.setText(I18n.getMessage("jsite.project.project.name") + ":");
+                               
projectDescriptionLabel.setText(I18n.getMessage("jsite.project.project.description")
 + ":");
+                               
projectLocalPathLabel.setText(I18n.getMessage("jsite.project.project.local-path")
 + ":");
+                               projectAddressLabel.setText("<html><b>" + 
I18n.getMessage("jsite.project.project.address") + "</b></html>");
+                               
projectPublicKeyLabel.setText(I18n.getMessage("jsite.project.project.public-key")
 + ":");
+                               
projectPrivateKeyLabel.setText(I18n.getMessage("jsite.project.project.private-key")
 + ":");
+                               
projectPathLabel.setText(I18n.getMessage("jsite.project.project.path") + ":");
+                       }
+               });
+               informationTable.add(projectPathLabel, new 
GridBagConstraints(0, 7, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, 
GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
                informationTable.add(projectPathTextField, new 
GridBagConstraints(1, 7, 2, 1, 1.0, 0.0, GridBagConstraints.CENTER, 
GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));

                return informationPanel;

Modified: trunk/apps/jSite/src/de/todesbaum/jsite/i18n/I18n.java
===================================================================
--- trunk/apps/jSite/src/de/todesbaum/jsite/i18n/I18n.java      2007-10-04 
23:54:31 UTC (rev 15430)
+++ trunk/apps/jSite/src/de/todesbaum/jsite/i18n/I18n.java      2007-10-05 
17:08:00 UTC (rev 15431)
@@ -56,7 +56,11 @@
                try {
                        return getResourceBundle().getString(key);
                } catch (MissingResourceException mre1) {
-                       return getResourceBundle(defaultLocale).getString(key);
+                       try {
+                               return 
getResourceBundle(defaultLocale).getString(key);
+                       } catch (MissingResourceException mre2) {
+                               return key;
+                       }
                }
        }


Added: trunk/apps/jSite/src/de/todesbaum/jsite/i18n/I18nContainer.java
===================================================================
--- trunk/apps/jSite/src/de/todesbaum/jsite/i18n/I18nContainer.java             
                (rev 0)
+++ trunk/apps/jSite/src/de/todesbaum/jsite/i18n/I18nContainer.java     
2007-10-05 17:08:00 UTC (rev 15431)
@@ -0,0 +1,55 @@
+/*
+ * jSite-remote - I18nContainer.java Copyright ?? 2007 David Roden
+ * 
+ * This program is free software; you can redistribute it and/or modify it 
under
+ * the terms of the GNU General Public License as published by the Free 
Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program 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 General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+package de.todesbaum.jsite.i18n;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @author David Roden &lt;droden at gmail.com&gt;
+ * @version $Id$
+ */
+public class I18nContainer implements Iterable<Runnable> {
+
+       private static final I18nContainer singleton = new I18nContainer();
+       private final List<Runnable> i18nRunnables = 
Collections.synchronizedList(new ArrayList<Runnable>());
+       private final List<Runnable> i18nPostRunnables = 
Collections.synchronizedList(new ArrayList<Runnable>());
+
+       public static I18nContainer getInstance() {
+               return singleton;
+       }
+
+       public void registerRunnable(Runnable i18nRunnable) {
+               i18nRunnables.add(i18nRunnable);
+       }
+
+       public void registerPostRunnable(Runnable i18nPostRunnable) {
+               i18nPostRunnables.add(i18nPostRunnable);
+       }
+
+       public Iterator<Runnable> iterator() {
+               List<Runnable> allRunnables = new ArrayList<Runnable>();
+               allRunnables.addAll(i18nRunnables);
+               allRunnables.addAll(i18nPostRunnables);
+               return allRunnables.iterator();
+       }
+
+}


Property changes on: 
trunk/apps/jSite/src/de/todesbaum/jsite/i18n/I18nContainer.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: trunk/apps/jSite/src/de/todesbaum/jsite/i18n/jSite_fr.properties
===================================================================
--- trunk/apps/jSite/src/de/todesbaum/jsite/i18n/jSite_fr.properties    
2007-10-04 23:54:31 UTC (rev 15430)
+++ trunk/apps/jSite/src/de/todesbaum/jsite/i18n/jSite_fr.properties    
2007-10-05 17:08:00 UTC (rev 15431)
@@ -128,4 +128,4 @@
 jsite.project-files.no-node-running=<html><b>Ce noeud n'est pas 
actif!</b><br><br>Vous ne pouvez pas utiliser jSite sans noeud 
actif.<br>Veuillez d?marrer votre noeud et r?essayer.</html>
 jsite.project-files.no-custom-key=<html><b>Pas de clef existante sp?cifi?e 
pour ce fichier</b><br><br>Vous avez sp?cifier de ne pas ins?rer 
<code>{0}</code><br> mais n'avez pas sp?cifier de clef ou rediriger!</html>
 jsite.project-files.no-node-selected=<html><b>Pas de noeud 
s?lectionn?</b><br><br>S?lectionnez un noeud dans le menu!</html>
-
+jsite.project-files.insert-now=Ins?rer

Modified: trunk/apps/jSite/src/de/todesbaum/jsite/main/Main.java
===================================================================
--- trunk/apps/jSite/src/de/todesbaum/jsite/main/Main.java      2007-10-04 
23:54:31 UTC (rev 15430)
+++ trunk/apps/jSite/src/de/todesbaum/jsite/main/Main.java      2007-10-05 
17:08:00 UTC (rev 15431)
@@ -52,6 +52,7 @@
 import de.todesbaum.jsite.gui.ProjectInsertPage;
 import de.todesbaum.jsite.gui.ProjectPage;
 import de.todesbaum.jsite.i18n.I18n;
+import de.todesbaum.jsite.i18n.I18nContainer;
 import de.todesbaum.util.image.IconLoader;
 import de.todesbaum.util.swing.TWizard;
 import de.todesbaum.util.swing.TWizardPage;
@@ -73,9 +74,9 @@
        }

        private static final Locale[] SUPPORTED_LOCALES = new Locale[] { 
Locale.ENGLISH, Locale.GERMAN, Locale.FRENCH };
-       private Map<Locale, Action> languageActions = new HashMap<Locale, 
Action>();
-       private Action manageNodeAction;
-       private Action aboutAction;
+       protected Map<Locale, Action> languageActions = new HashMap<Locale, 
Action>();
+       protected Action manageNodeAction;
+       protected Action aboutAction;
        protected TWizard wizard;
        protected JMenu nodeMenu;
        private Node selectedNode;
@@ -100,8 +101,6 @@
                wizard = new TWizard();
                createActions();
                wizard.setJMenuBar(createMenuBar());
-               
wizard.setPreviousName(I18n.getMessage("jsite.wizard.previous"));
-               wizard.setNextName(I18n.getMessage("jsite.wizard.next"));
                wizard.setQuitName(I18n.getMessage("jsite.wizard.quit"));
                wizard.setPreviousEnabled(false);
                wizard.setNextEnabled(true);
@@ -111,7 +110,6 @@

                initPages();
                showPage(PageType.PAGE_PROJECTS);
-               wizard.setPreviousName((String) 
manageNodeAction.getValue(Action.NAME));
        }

        private void createActions() {
@@ -136,11 +134,18 @@
                                JOptionPane.showMessageDialog(wizard, 
MessageFormat.format(I18n.getMessage("jsite.about.message"), 
Version.getVersion()), null, JOptionPane.INFORMATION_MESSAGE, jSiteIcon);
                        }
                };
+               
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+                       public void run() {
+                               manageNodeAction.putValue(Action.NAME, 
I18n.getMessage("jsite.menu.nodes.manage-nodes"));
+                               aboutAction.putValue(Action.NAME, 
I18n.getMessage("jsite.menu.help.about"));
+                       }
+               });
        }

        private JMenuBar createMenuBar() {
                JMenuBar menuBar = new JMenuBar();
-               JMenu languageMenu = new 
JMenu(I18n.getMessage("jsite.menu.languages"));
+               final JMenu languageMenu = new 
JMenu(I18n.getMessage("jsite.menu.languages"));
                menuBar.add(languageMenu);
                ButtonGroup languageButtonGroup = new ButtonGroup();
                for (Locale locale: SUPPORTED_LOCALES) {
@@ -163,31 +168,43 @@
                panel.setOpaque(false);
                menuBar.add(panel);

-               JMenu helpMenu = new JMenu(I18n.getMessage("jsite.menu.help"));
+               final JMenu helpMenu = new 
JMenu(I18n.getMessage("jsite.menu.help"));
                menuBar.add(helpMenu);
                helpMenu.add(aboutAction);
+               
+               I18nContainer.getInstance().registerRunnable(new Runnable() {
+                       public void run() {
+                               
languageMenu.setText(I18n.getMessage("jsite.menu.languages"));
+                               
nodeMenu.setText(I18n.getMessage("jsite.menu.nodes"));
+                               
helpMenu.setText(I18n.getMessage("jsite.menu.help"));
+                               for (Map.Entry<Locale, Action> 
languageActionEntry: languageActions.entrySet()) {
+                                       
languageActionEntry.getValue().putValue(Action.NAME, 
I18n.getMessage("jsite.menu.language." + 
languageActionEntry.getKey().getLanguage()));
+                               }
+                       }
+               });
+               
                return menuBar;
        }

        private void initPages() {
-               NodeManagerPage nodeManagerPage = new NodeManagerPage();
+               NodeManagerPage nodeManagerPage = new NodeManagerPage(wizard);
                nodeManagerPage.setName("page.node-manager");
                nodeManagerPage.addNodeManagerListener(this);
                nodeManagerPage.setNodes(configuration.getNodes());
                pages.put(PageType.PAGE_NODE_MANAGER, nodeManagerPage);

-               ProjectPage projectPage = new ProjectPage();
+               ProjectPage projectPage = new ProjectPage(wizard);
                projectPage.setName("page.project");
                projectPage.setProjects(configuration.getProjects());
                projectPage.setFreenetInterface(freenetInterface);
                projectPage.addListSelectionListener(this);
                pages.put(PageType.PAGE_PROJECTS, projectPage);

-               ProjectFilesPage projectFilesPage = new ProjectFilesPage();
+               ProjectFilesPage projectFilesPage = new 
ProjectFilesPage(wizard);
                projectFilesPage.setName("page.project.files");
                pages.put(PageType.PAGE_PROJECT_FILES, projectFilesPage);

-               ProjectInsertPage projectInsertPage = new ProjectInsertPage();
+               ProjectInsertPage projectInsertPage = new 
ProjectInsertPage(wizard);
                projectInsertPage.setDebug(debug);
                projectInsertPage.setName("page.project.insert");
                projectInsertPage.setFreenetInterface(freenetInterface);
@@ -242,11 +259,15 @@
                Action languageAction = languageActions.get(supportedLocale);
                JRadioButtonMenuItem menuItem = (JRadioButtonMenuItem) 
languageAction.getValue("menuItem");
                menuItem.setSelected(true);
-               /* show the restart message in the other language! */
-               Locale currentLocale = I18n.getLocale();
                I18n.setLocale(supportedLocale);
-               JOptionPane.showMessageDialog(wizard, 
I18n.getMessage("jsite.menu.language.change.restart-message"), null, 
JOptionPane.INFORMATION_MESSAGE);
-               I18n.setLocale(currentLocale);
+               for (Runnable i18nRunnable: I18nContainer.getInstance()) {
+                       try {
+                               i18nRunnable.run();
+                       } catch (Throwable t) {
+                               /* we probably shouldn't swallow this. */
+                       }
+               }
+               wizard.setPage(wizard.getPage());
                configuration.setLocale(supportedLocale);
        }

@@ -274,7 +295,6 @@
                String pageName = wizard.getPage().getName();
                if ("page.node-manager".equals(pageName)) {
                        showPage(PageType.PAGE_PROJECTS);
-                       wizard.setPreviousName((String) 
manageNodeAction.getValue(Action.NAME));
                } else if ("page.project".equals(pageName)) {
                        ProjectPage projectPage = (ProjectPage) 
wizard.getPage();
                        Project project = projectPage.getSelectedProject();
@@ -289,8 +309,6 @@
                        ((ProjectFilesPage) 
pages.get(PageType.PAGE_PROJECT_FILES)).setProject(project);
                        ((ProjectInsertPage) 
pages.get(PageType.PAGE_INSERT_PROJECT)).setProject(project);
                        showPage(PageType.PAGE_PROJECT_FILES);
-                       
wizard.setNextName(I18n.getMessage("jsite.project-files.insert-now"));
-                       
wizard.setPreviousName(I18n.getMessage("jsite.wizard.previous"));
                } else if ("page.project.files".equals(pageName)) {
                        ProjectPage projectPage = (ProjectPage) 
pages.get(PageType.PAGE_PROJECTS);
                        Project project = projectPage.getSelectedProject();
@@ -332,8 +350,8 @@
                                return;
                        }
                        configuration.save();
-                       
wizard.setNextName(I18n.getMessage("jsite.wizard.next"));
                        showPage(PageType.PAGE_INSERT_PROJECT);
+                       ((ProjectInsertPage) 
pages.get(PageType.PAGE_INSERT_PROJECT)).startInsert();
                        nodeMenu.setEnabled(false);
                } else if ("page.project.insert".equals(pageName)) {
                        showPage(PageType.PAGE_PROJECTS);
@@ -348,11 +366,8 @@
                String pageName = wizard.getPage().getName();
                if ("page.project".equals(pageName)) {
                        showPage(PageType.PAGE_NODE_MANAGER);
-                       
wizard.setPreviousName(I18n.getMessage("jsite.wizard.previous"));
                } else if ("page.project.files".equals(pageName)) {
                        showPage(PageType.PAGE_PROJECTS);
-                       
wizard.setNextName(I18n.getMessage("jsite.wizard.next"));
-                       wizard.setPreviousName((String) 
manageNodeAction.getValue(Action.NAME));
                } else if ("page.project.insert".equals(pageName)) {
                        showPage(PageType.PAGE_PROJECT_FILES);
                }

Modified: trunk/apps/jSite/src/de/todesbaum/jsite/main/Version.java
===================================================================
--- trunk/apps/jSite/src/de/todesbaum/jsite/main/Version.java   2007-10-04 
23:54:31 UTC (rev 15430)
+++ trunk/apps/jSite/src/de/todesbaum/jsite/main/Version.java   2007-10-05 
17:08:00 UTC (rev 15431)
@@ -25,7 +25,7 @@
  */
 public class Version {

-       private static final String VERSION = "0.4.9.2";
+       private static final String VERSION = "0.4.9.3";

        public static final String getVersion() {
                return VERSION;

Modified: trunk/apps/jSite/src/de/todesbaum/util/swing/TWizardPage.java
===================================================================
--- trunk/apps/jSite/src/de/todesbaum/util/swing/TWizardPage.java       
2007-10-04 23:54:31 UTC (rev 15430)
+++ trunk/apps/jSite/src/de/todesbaum/util/swing/TWizardPage.java       
2007-10-05 17:08:00 UTC (rev 15431)
@@ -27,18 +27,21 @@
  */
 public class TWizardPage extends JPanel {

+       protected final TWizard wizard;
        protected String heading;
        protected String description;

-       public TWizardPage() {
+       public TWizardPage(final TWizard wizard) {
+               this.wizard = wizard;
        }

-       public TWizardPage(String heading) {
+       public TWizardPage(final TWizard wizard, String heading) {
+               this.wizard = wizard;
                this.heading = heading;
        }

-       public TWizardPage(String heading, String description) {
-               this(heading);
+       public TWizardPage(final TWizard wizard, String heading, String 
description) {
+               this(wizard, heading);
                this.description = description;
        }



Reply via email to