diff options
Diffstat (limited to 'BKUCommonGUI/src')
-rw-r--r-- | BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java | 1 | ||||
-rw-r--r-- | BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java (renamed from BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/ViewerDialog.java) | 181 | ||||
-rw-r--r-- | BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpMouseListener.java | 10 | ||||
-rw-r--r-- | BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpViewer.java | 211 | ||||
-rw-r--r-- | BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java | 3 | ||||
-rw-r--r-- | BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages.properties | 1 | ||||
-rw-r--r-- | BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages_en.properties | 1 |
7 files changed, 279 insertions, 129 deletions
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java index 2daf3300..c7032f90 100644 --- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java +++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java @@ -38,6 +38,7 @@ public interface BKUGUIFacade { public static final String ERR_CARD_LOCKED = "error.card.locked"; public static final String ERR_CARD_NOTACTIVATED = "error.card.notactivated"; public static final String ERR_VIEWER = "error.viewer"; + public static final String ERR_EXTERNAL_LINK = "error.external.link"; public static final String MESSAGES_BUNDLE = "at/gv/egiz/bku/gui/Messages"; public static final String DEFAULT_BACKGROUND = "/images/BackgroundChipperling.png"; diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/ViewerDialog.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java index e643c876..8883098a 100644 --- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/ViewerDialog.java +++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java @@ -23,18 +23,14 @@ import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; -import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.io.BufferedReader; -import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; -import java.net.URL; -import java.net.URLConnection; import java.nio.charset.Charset; import java.text.MessageFormat; import java.util.List; @@ -51,8 +47,6 @@ import javax.swing.JScrollPane; import javax.swing.LayoutStyle; import javax.swing.text.Document; import javax.swing.text.EditorKit; -import javax.swing.text.html.HTMLDocument; -import javax.swing.text.html.HTMLEditorKit; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -60,102 +54,84 @@ import org.apache.commons.logging.LogFactory; * * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at> */ -public class ViewerDialog extends JDialog +public class HashDataViewer extends JDialog implements ActionListener { public static final String PLAINTEXT_FONT = "Monospaced"; - protected static final Log log = LogFactory.getLog(ViewerDialog.class); -// private ViewerDialog dialog; + protected static final Log log = LogFactory.getLog(HashDataViewer.class); + + private static HashDataViewer dialog; protected ResourceBundle messages; /** * - * @param frameComp * @param signedReferences currently, only one hashdata input (the first in the list) is displayed - * @param messages - * @param saveListener - * @param saveCommand - * @param helpListener + */ + public static void showHashDataInput(List<HashDataInput> hashDataInputs, + ResourceBundle messages, + ActionListener saveListener, + String saveCommand, + ActionListener helpListener) { + showHashDataInput(null, hashDataInputs, messages, saveListener, saveCommand, helpListener); + } + + /** + * + * @param frameComp owner */ public static void showHashDataInput(Component frameComp, List<HashDataInput> hashDataInputs, ResourceBundle messages, ActionListener saveListener, String saveCommand, - HelpMouseListener helpListener) { + ActionListener helpListener) { Frame frame = null; if (frameComp != null) { JOptionPane.getFrameForComponent(frameComp); } - ViewerDialog viewer = new ViewerDialog(frame, + dialog = new HashDataViewer(frame, messages, hashDataInputs, saveListener, saveCommand, helpListener); - viewer.setVisible(true); + dialog.setVisible(true); } - public static void showHelp(Component frameComp, - String helpTopic, -// Reader helpDocument, - InputStream helpDocument, - String mimeType, - ResourceBundle messages) { - - Frame frame = null; - if (frameComp != null) { - JOptionPane.getFrameForComponent(frameComp); - } - ViewerDialog viewer = new ViewerDialog(frame, messages, helpTopic, helpDocument, mimeType); - viewer.setVisible(true); - } - - /** - * TODO make encoding aware! - * @param frame - * @param title - * @param messages - * @param hashDataInputs - * @param saveListener - * @param saveCommand - * @param helpListener - */ - private ViewerDialog(Frame frame, + private HashDataViewer(Frame frame, ResourceBundle messages, List<HashDataInput> hashDataInputs, ActionListener saveListener, String saveCommand, - HelpMouseListener helpListener) { + ActionListener helpListener) { super(frame, messages.getString(BKUGUIFacade.WINDOWTITLE_VIEWER), true); this.messages = messages; HashDataInput hashData = hashDataInputs.get(0); -// Charset cs; -// if (hashData.getEncoding() == null) { -// cs = Charset.forName("UTF-8"); -// } else { -// try { -// cs = Charset.forName(hashData.getEncoding()); -// } catch (Exception ex) { -// log.debug("charset " + hashData.getEncoding() + " not supported, assuming UTF-8: " + ex.getMessage()); -// cs = Charset.forName("UTF-8"); -// } -// } - -// InputStreamReader isr = new InputStreamReader(hashData.getHashDataInput(), cs); -// Reader content = new BufferedReader(isr); - InputStream content = hashData.getHashDataInput(); - String mimeType = hashData.getMimeType(); - String encoding = hashData.getEncoding(); - if (encoding == null) { - encoding = "UTF-8"; + Charset cs; + if (hashData.getEncoding() == null) { + cs = Charset.forName("UTF-8"); + } else { + try { + cs = Charset.forName(hashData.getEncoding()); + } catch (Exception ex) { + log.debug("charset " + hashData.getEncoding() + " not supported, assuming UTF-8: " + ex.getMessage()); + cs = Charset.forName("UTF-8"); + } } - - JPanel hashDataPanel = createViewerPanel(messages.getString(BKUGUIFacade.MESSAGE_HASHDATA), content, mimeType, encoding, helpListener); + + + InputStreamReader isr = new InputStreamReader(hashData.getHashDataInput(), cs); + Reader content = new BufferedReader(isr); + + JPanel hashDataPanel = createViewerPanel( + messages.getString(BKUGUIFacade.MESSAGE_HASHDATA), + content, + hashData.getMimeType(), + helpListener); JPanel buttonPanel = createButtonPanel(saveListener, saveCommand); initContentPane(new Dimension(600, 400), hashDataPanel, buttonPanel); @@ -167,31 +143,6 @@ public class ViewerDialog extends JDialog } } - private ViewerDialog(Frame frame, - ResourceBundle messages, - String helpTopic, -// Reader helpDocument, - InputStream helpDocument, - String mimeType) { - super(frame, messages.getString(BKUGUIFacade.WINDOWTITLE_HELP), true); - this.messages = messages; - - String p = messages.getString(BKUGUIFacade.MESSAGE_HELP); - String helpItem = messages.getString(helpTopic); - String viewerLabel = MessageFormat.format(p, new Object[] {helpItem}); - - JPanel helpPanel = createViewerPanel(viewerLabel, helpDocument, mimeType, null, null); - JPanel buttonPanel = createButtonPanel(); - - initContentPane(new Dimension(600, 400), helpPanel, buttonPanel); - pack(); - if (frame != null) { - setLocationRelativeTo(frame); - } else { - setLocationByPlatform(true); - } - } - private void initContentPane(Dimension preferredSize, JPanel viewerPanel, JPanel buttonPanel) { Container contentPane = getContentPane(); contentPane.setPreferredSize(preferredSize); @@ -220,7 +171,10 @@ public class ViewerDialog extends JDialog * @param helpListener may be null * @return */ - private JPanel createViewerPanel(String viewerLabelText, InputStream content, String mimeType, String encoding, HelpMouseListener helpListener) { + private JPanel createViewerPanel(String viewerLabelText, + Reader content, + String mimeType, + final ActionListener helpListener) { log.debug("viewer dialog: " + mimeType); if (mimeType == null) { @@ -241,15 +195,8 @@ public class ViewerDialog extends JDialog // document.putProperty("IgnoreCharsetDirective", new Boolean(true)); try { - if (encoding != null) { - BufferedReader contentReader = new BufferedReader(new InputStreamReader(content, encoding)); - viewer.read(contentReader, document); - contentReader.close(); - } else { - // charset declaration in content viewer.read(content, document); content.close(); - } } catch (Exception ex) { log.error(ex.getMessage(), ex); String p = messages.getString(BKUGUIFacade.ERR_VIEWER); @@ -272,9 +219,15 @@ public class ViewerDialog extends JDialog if (helpListener != null) { JLabel helpLabel = new JLabel(); - helpListener.setHelpTopic(BKUGUIFacade.HELP_HASHDATAVIEWER); helpLabel.setIcon(new ImageIcon(getClass().getResource(BKUGUIFacade.HELP_IMG))); - helpLabel.addMouseListener(helpListener); + helpLabel.addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent arg0) { + ActionEvent e = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, BKUGUIFacade.HELP_HASHDATAVIEWER); + helpListener.actionPerformed(e); + } + }); helpLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); viewerPanelLayout.setHorizontalGroup( viewerPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(viewerPanelLayout.createSequentialGroup().addComponent(viewerLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE).addComponent(helpLabel)).addComponent(scrollPane)); //, 0, 0, Short.MAX_VALUE)); @@ -300,25 +253,6 @@ public class ViewerDialog extends JDialog return viewerPanel; } - - private JPanel createButtonPanel() { - JButton closeButton = new JButton(); - closeButton.setText(messages.getString(BKUGUIFacade.BUTTON_CLOSE)); - closeButton.addActionListener(this); - - JPanel buttonPanel = new JPanel(); - GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel); - buttonPanel.setLayout(buttonPanelLayout); - - buttonPanelLayout.setHorizontalGroup( - buttonPanelLayout.createSequentialGroup() - .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(closeButton)); - buttonPanelLayout.setVerticalGroup( - buttonPanelLayout.createSequentialGroup() - .addComponent(closeButton)); - return buttonPanel; - } private JPanel createButtonPanel(ActionListener saveListener, String saveCommand) { JButton closeButton = new JButton(); @@ -349,9 +283,6 @@ public class ViewerDialog extends JDialog @Override public void actionPerformed(ActionEvent e) { -// if ("close".equals(e.getActionCommand())) { -// ViewerDialog.dialog.setVisible(false); -// HashDataViewer.dialog.dispose(); - this.setVisible(false); + HashDataViewer.dialog.setVisible(false); } } diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpMouseListener.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpMouseListener.java index 531884d1..b7bbe971 100644 --- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpMouseListener.java +++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpMouseListener.java @@ -28,23 +28,27 @@ public class HelpMouseListener extends MouseAdapter { protected static final Log log = LogFactory.getLog(HelpMouseListener.class); - protected ActionListener externalHelpListener; + protected ActionListener helpListener; protected String locale; protected String topic; public HelpMouseListener(ActionListener externalHelpListener) { super(); - this.externalHelpListener = externalHelpListener; + this.helpListener = externalHelpListener; } public void setHelpTopic(String topic) { log.trace("setting help topic: " + topic); this.topic = topic; } + + public ActionListener getActionListener() { + return helpListener; + } @Override public void mouseClicked(MouseEvent arg0) { ActionEvent e = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, topic); - externalHelpListener.actionPerformed(e); + helpListener.actionPerformed(e); } } diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpViewer.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpViewer.java new file mode 100644 index 00000000..42ca2090 --- /dev/null +++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpViewer.java @@ -0,0 +1,211 @@ +/* + * Copyright 2008 Federal Chancellery Austria and + * Graz University of Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package at.gv.egiz.bku.gui; + +import at.gv.egiz.bku.gui.*; +import java.applet.AppletContext; +import java.awt.Component; +import java.awt.Container; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.net.URL; +import java.text.MessageFormat; +import java.util.ResourceBundle; +import javax.swing.GroupLayout; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JEditorPane; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.LayoutStyle; +import javax.swing.SwingUtilities; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * + * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at> + */ +public class HelpViewer extends JDialog + implements ActionListener { + + protected static final Log log = LogFactory.getLog(HelpViewer.class); + private static HelpViewer dialog; + protected ResourceBundle messages; + protected AppletContext ctx; + + /** + * + * @param ctx external links are opened via ctx.showDocument() + * @param helpURL + * @param helpTopic + * @param messages + */ + public static void showHelpDialog(AppletContext ctx, + URL helpURL, + String helpTopic, + ResourceBundle messages) { + showHelpDialog(null, ctx, helpURL, helpTopic, messages); + } + + public static void showHelpDialog(URL helpURL, + String helpTopic, + ResourceBundle messages) { + showHelpDialog(null, null, helpURL, helpTopic, messages); + } + + public static void showHelpDialog(Component owner, + AppletContext ctx, + URL helpURL, + String helpTopic, + ResourceBundle messages) { + + Frame frame = null; + if (owner != null) { + JOptionPane.getFrameForComponent(owner); + } + dialog = new HelpViewer(frame, messages, ctx, helpURL, helpTopic); + dialog.setVisible(true); + } + + private HelpViewer(Frame frame, + ResourceBundle messages, + AppletContext ctx, + URL helpURL, + String helpTopic) { + super(frame, messages.getString(BKUGUIFacade.WINDOWTITLE_HELP), true); + this.messages = messages; + this.ctx = ctx; + + String p = messages.getString(BKUGUIFacade.MESSAGE_HELP); + String helpItem = messages.getString(helpTopic); + String viewerLabel = MessageFormat.format(p, new Object[]{helpItem}); + + JPanel helpPanel = createViewerPanel(viewerLabel, helpURL); + JPanel buttonPanel = createButtonPanel(); + + initContentPane(new Dimension(600, 400), helpPanel, buttonPanel); + pack(); + if (frame != null) { + setLocationRelativeTo(frame); + } else { + setLocationByPlatform(true); + } + } + + private void initContentPane(Dimension preferredSize, JPanel viewerPanel, JPanel buttonPanel) { + Container contentPane = getContentPane(); + contentPane.setPreferredSize(preferredSize); + + GroupLayout mainLayout = new GroupLayout(contentPane); + contentPane.setLayout(mainLayout); + + mainLayout.setHorizontalGroup( + mainLayout.createSequentialGroup().addContainerGap().addGroup( + mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(viewerPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(buttonPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addContainerGap()); + mainLayout.setVerticalGroup( + mainLayout.createSequentialGroup().addContainerGap().addComponent(viewerPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(buttonPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addContainerGap()); + } + + private JPanel createViewerPanel(String viewerLabelText, URL helpURL) { + log.debug("viewer dialog: " + helpURL.toString()); + + final JEditorPane viewer = new JEditorPane(); + viewer.setEditable(false); + try { + viewer.setPage(helpURL); + viewer.addHyperlinkListener(new HyperlinkListener() { + + @Override + public void hyperlinkUpdate(HyperlinkEvent e) { + final URL url = e.getURL(); + if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { + if (ctx != null) { + log.debug("open external link in help viewer: " + url); + ctx.showDocument(url, "_blank"); + } else { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + String msgP = messages.getString(BKUGUIFacade.ERR_EXTERNAL_LINK); + String msg = MessageFormat.format(msgP, url); + String title = messages.getString(BKUGUIFacade.TITLE_ERROR); + JOptionPane.showMessageDialog(rootPane, msg, title, JOptionPane.ERROR_MESSAGE); + } + }); + } + } + } + }); + } catch (IOException ex) { + String p = messages.getString(BKUGUIFacade.ERR_VIEWER); + viewer.setText(MessageFormat.format(p, new Object[]{ex.getMessage()})); + } + + JScrollPane scrollPane = new JScrollPane(viewer); + scrollPane.setPreferredSize(viewer.getPreferredSize()); + scrollPane.setAlignmentX(LEFT_ALIGNMENT); + viewer.setCaretPosition(0); + + JLabel viewerLabel = new JLabel(); + viewerLabel.setText(viewerLabelText); + viewerLabel.setFont(viewerLabel.getFont().deriveFont(viewerLabel.getFont().getStyle() | java.awt.Font.BOLD)); + viewerLabel.setLabelFor(viewer); + + JPanel viewerPanel = new JPanel(); + GroupLayout viewerPanelLayout = new GroupLayout(viewerPanel); + viewerPanel.setLayout(viewerPanelLayout); + + viewerPanelLayout.setHorizontalGroup( + viewerPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(viewerLabel).addComponent(scrollPane)); + viewerPanelLayout.setVerticalGroup( + viewerPanelLayout.createSequentialGroup().addComponent(viewerLabel).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addComponent(scrollPane)); + + return viewerPanel; + } + + private JPanel createButtonPanel() { + JButton closeButton = new JButton(); + closeButton.setText(messages.getString(BKUGUIFacade.BUTTON_CLOSE)); + closeButton.addActionListener(this); + + JPanel buttonPanel = new JPanel(); + GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel); + buttonPanel.setLayout(buttonPanelLayout); + + buttonPanelLayout.setHorizontalGroup( + buttonPanelLayout.createSequentialGroup().addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(closeButton)); + buttonPanelLayout.setVerticalGroup( + buttonPanelLayout.createSequentialGroup().addComponent(closeButton)); + return buttonPanel; + } + + @Override + public void actionPerformed(ActionEvent e) { + HelpViewer.dialog.setVisible(false); + } +} diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java index 6250dd0e..a810d34c 100644 --- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java +++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java @@ -954,7 +954,8 @@ public class SimpleGUI implements BKUGUIFacade { log.debug("show plaintext hashdatainput dialog"); - ViewerDialog.showHashDataInput(contentPane, signedReferences, messages, saveListener, saveCommand, helpListener); + ActionListener l = helpListener.getActionListener(); + HashDataViewer.showHashDataInput(contentPane, signedReferences, messages, saveListener, saveCommand, l); } }); } diff --git a/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages.properties b/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages.properties index ba20471d..6c049c85 100644 --- a/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages.properties +++ b/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages.properties @@ -67,6 +67,7 @@ error.test=<html>Fehler1 {0} - Fehler2 {1}</html> error.card.locked=<html>B\u00FCrgerkarte ist gesperrt</html> error.card.notactivated=<html>B\u00FCrgerkartenfunktion ist nicht aktiviert</html> error.viewer=Der Inhalt kann nicht dargestellt werden: {0} +error.external.link=<html>Externer Link {0} wird nicht ge\u00F6ffnet</html> # Help Topics help.welcome=Startseite diff --git a/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages_en.properties b/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages_en.properties index edc5371d..80dc4234 100644 --- a/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages_en.properties +++ b/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages_en.properties @@ -65,6 +65,7 @@ error.test=<html>Error1 {0} - Error2 {1}</html> error.card.locked=<html>Citizen-card is locked</html> error.card.notactivated=<html>Citizen-card not activated</html> error.viewer=Failed to display contents: {0} +error.external.link=<html>Externer Link {0} wird nicht ge\u00F6ffnet</html> # Help Topics help.welcome=Welcome page |