diff options
author | Stephan Schwär | 2020-11-11 01:52:07 +0100 |
---|---|---|
committer | Stephan Schwär | 2020-11-11 01:59:50 +0100 |
commit | 023646ce947e9b6f6a91a7efb96a422791643d0b (patch) | |
tree | 65aedbd655e41b0b0551e4e4899f645a2ff0b79b /dozentenmodul/src/main | |
parent | [client] Check if the ovf or ova image were created by vmware or vbox (diff) | |
parent | [client] Add missing properties files (diff) | |
download | tutor-module-023646ce947e9b6f6a91a7efb96a422791643d0b.tar.gz tutor-module-023646ce947e9b6f6a91a7efb96a422791643d0b.tar.xz tutor-module-023646ce947e9b6f6a91a7efb96a422791643d0b.zip |
Merge remote-tracking branch 'origin/feature/i18n' into feature-merge
Diffstat (limited to 'dozentenmodul/src/main')
122 files changed, 4122 insertions, 898 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/App.java b/dozentenmodul/src/main/java/org/openslx/dozmod/App.java index 7c450c59..77203d50 100755 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/App.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/App.java @@ -8,7 +8,9 @@ import java.awt.event.ContainerEvent; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; import java.util.HashSet; +import java.util.Locale; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.regex.Matcher; @@ -28,6 +30,8 @@ import org.apache.log4j.spi.LoggingEvent; import org.openslx.dozmod.Config.ProxyMode; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; +import org.openslx.dozmod.gui.helper.I18n; +import org.openslx.dozmod.gui.helper.Language; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.util.ClientVersion; import org.openslx.dozmod.util.FormatHelper; @@ -152,12 +156,29 @@ public class App { try { Config.init(); } catch (Exception e) { - Gui.showMessageBox(null, "Error loading configuration", MessageType.ERROR, LOGGER, e); + Gui.showMessageBox(null, I18n.APP.getString("App.Message.error.loadingConfigurationFailed"), + MessageType.ERROR, LOGGER, e); return; } setupLogger(); + // Setting the locale + if (!setPreferredLanguage()) { + // Detect operating system language + String ul = System.getProperty("user.language"); + if (ul.equals("de")) { + Locale.setDefault(new Locale("de", "DE")); + Config.setPreferredLanguage(Language.DE_DE.value); + } else if (ul.equals("tr")) { + Locale.setDefault(new Locale("tr", "TR")); + Config.setPreferredLanguage(Language.TR_TR.value); + } else { + Locale.setDefault(new Locale("en", "US")); + Config.setPreferredLanguage(Language.EN_US.value); + } + } + // Setup swing style System.setProperty("awt.useSystemAAFontSettings", "on"); System.setProperty("swing.aatext", "true"); @@ -226,8 +247,7 @@ public class App { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { - boolean ret = Gui.showMessageBox(null, - "SSL nicht verfügbar. Wollen Sie sich trotzdem unverschlüsselt verbinden?", + boolean ret = Gui.showMessageBox(null, I18n.APP.getString("App.Message.yesNo.SSLNotAvailable"), MessageType.QUESTION_YESNO, LOGGER, e1); if (!ret) { System.exit(1); @@ -256,10 +276,9 @@ public class App { if (e.getMessage().contains("SurfaceData")) return; } - Gui.showMessageBox(null, "Ungefangene Ausnahme in Faden " + t.getName() + "\n\n" - + "Die Anwendung könnte instabil laufen.\n" - + "Zur Sicherheit sollten Sie sie neustarten.", MessageType.WARNING, LOGGER, - e); + Gui.showMessageBox(null, + I18n.APP.getString("App.Message.warning.uncaughtException", t.getName()), + MessageType.WARNING, LOGGER, e); } }); MainWindow.open(); @@ -350,6 +369,31 @@ public class App { } } + /** + * Check if any default language is already set and valid. + * @return true, if any default language exists and is valid. + */ + private static boolean setPreferredLanguage() { + // Check if any preferred language exists + String language = Config.getPreferredLanguage(); + // Check whether the provided string is null or empty + if (language == null || language.trim().isEmpty()) { + return false; + } + // Check if the provided string has the format language_country e.g. en_US + String[] parts = language.split("_"); + if (parts.length != 2) { + return false; + } + Locale locale = new Locale(parts[0], parts[1]); + // Check now if the locale is valid + if (!Arrays.asList(Locale.getAvailableLocales()).contains(locale)) { + return false; + } + Locale.setDefault(locale); + return true; + } + public static synchronized boolean isInitDone() { return proxyInitDone; } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java b/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java index 904d0693..a0e41689 100755 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java @@ -458,6 +458,24 @@ public class Config { } /** + * Set the language which should be used + * + * @param value the language consists of language and country + */ + public static void setPreferredLanguage(String value) { + setString("gui.language", value); + } + + /** + * Get the language preferred by the user + * + * @return the saved language, null otherwise + */ + public static String getPreferredLanguage() { + return getString("gui.language", null); + } + + /** * Gets the boolean from the given key. * If nothing is found, return the given default value * diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/GraphicalCertHandler.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/GraphicalCertHandler.java index 99c03373..c1432614 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/GraphicalCertHandler.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/GraphicalCertHandler.java @@ -15,6 +15,7 @@ import javax.net.ssl.X509TrustManager; import org.apache.log4j.Logger; import org.openslx.dozmod.authentication.FingerprintManager; import org.openslx.dozmod.gui.Gui.GuiCallable; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; public class GraphicalCertHandler { @@ -34,9 +35,8 @@ public class GraphicalCertHandler { @Override public Boolean run() { return Gui.showMessageBox(null, - "Der Satellit besitzt kein Zertifikat. Verschlüsselte Verbindung nicht möglich.\n\n" - + "Möchten Sie trotzdem fortfahren?", MessageType.WARNING, LOGGER, - null); + I18n.GUI.getString("GraphicalCertHandler.Message.warning.noCertificate"), + MessageType.WARNING, LOGGER, null); } }); if (ret) @@ -76,11 +76,8 @@ public class GraphicalCertHandler { return; } // Known, mismatch, panic! - question = "!!! ALARM !!!! ALARM !!!\n\n" + "Der Fingerabdruck von " + address - + " hat sich verändert.\n" + "Erwartet: " - + new BigInteger(expectedFingerprint).toString(16) + "\n" + "Vorgefunden: " - + actualFingerprintReadable + "\n\n" - + "Möchten Sie trotzdem zu diesem Satelliten verbinden?"; + question = I18n.GUI.getString("GraphicalCertHandler.Message.yesNo.fingerprintChanged", address, + new BigInteger(expectedFingerprint).toString(16), actualFingerprintReadable); } // Some question needs to be asked Boolean userOk = Gui.syncExec(new GuiCallable<Boolean>() { @@ -112,13 +109,16 @@ public class GraphicalCertHandler { try { ctx = SSLContext.getInstance("TLSv1.2"); } catch (NoSuchAlgorithmException e) { - Gui.asyncMessageBox("Could not get TLSv1.2 SSL context", MessageType.ERROR, LOGGER, e); + Gui.asyncMessageBox(I18n.GUI.getString("GraphicalCertHandler.Message.error.couldNotGetSSLContext"), + MessageType.ERROR, LOGGER, e); } if (ctx != null) { try { ctx.init(null, new TrustManager[] { new GuiTrustManager() }, null); } catch (KeyManagementException e) { - Gui.asyncMessageBox("Could not initialize TLSv1.2 SSL context", MessageType.ERROR, LOGGER, e); + Gui.asyncMessageBox( + I18n.GUI.getString("GraphicalCertHandler.Message.error.couldNotInitializeSSLContext"), + MessageType.ERROR, LOGGER, e); ctx = null; } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java index 6a9997d9..7e2fad8e 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java @@ -48,12 +48,7 @@ import org.openslx.dozmod.gui.activity.PassiveUploadPanel; import org.openslx.dozmod.gui.activity.UpdatePanel; import org.openslx.dozmod.gui.activity.UploadPanel; import org.openslx.dozmod.gui.control.QLabel; -import org.openslx.dozmod.gui.helper.CompositePage; -import org.openslx.dozmod.gui.helper.DebugWindow; -import org.openslx.dozmod.gui.helper.GridManager; -import org.openslx.dozmod.gui.helper.MessageType; -import org.openslx.dozmod.gui.helper.QuitNotification; -import org.openslx.dozmod.gui.helper.UiFeedback; +import org.openslx.dozmod.gui.helper.*; import org.openslx.dozmod.gui.window.CheckUpdateWindow; import org.openslx.dozmod.gui.window.ConfigWindow; import org.openslx.dozmod.gui.window.DisclaimerWindow; @@ -169,8 +164,10 @@ public abstract class MainWindow { }); // Set up thrift error message displaying - ThriftManager.setMasterErrorCallback(new GuiErrorCallback(mainWindow, "dem " + Branding.getServiceName() + "-Zentralserver")); - ThriftManager.setSatelliteErrorCallback(new GuiErrorCallback(mainWindow, "dem Satellitenserver")); + ThriftManager.setMasterErrorCallback(new GuiErrorCallback(mainWindow, + I18n.GUI.getString("MainWindow.GuiErrorCallback.master.serverString", Branding.getServiceName()))); + ThriftManager.setSatelliteErrorCallback(new GuiErrorCallback(mainWindow, + I18n.GUI.getString("MainWindow.GuiErrorCallback.satellite.serverString"))); // Same for config errors Config.setErrorCallback(new Config.ErrorCallback() { @@ -179,7 +176,8 @@ public abstract class MainWindow { Gui.asyncExec(new Runnable() { @Override public void run() { - Gui.showMessageBox(mainWindow, "Konnte Programmeinstellungen nicht speichern", + Gui.showMessageBox(mainWindow, + I18n.GUI.getString("MainWindow.Message.warning.couldNotSaveConfig"), MessageType.WARNING, LOGGER, t); } }); @@ -324,7 +322,7 @@ public abstract class MainWindow { } } if (!keepOpen - || Gui.showMessageBox(mainWindow, "Möchten Sie das Programm wirklich beenden?", + || Gui.showMessageBox(mainWindow, I18n.GUI.getString("MainWindow.Message.yesNo.applicationQuit"), MessageType.QUESTION_YESNO, null, null)) { if (windows == null) { windows = Window.getWindows(); @@ -424,23 +422,23 @@ public abstract class MainWindow { JMenuBar menuBar = new JMenuBar(); mainWindow.setJMenuBar(menuBar); - JMenu cascadeSessionMenu = new JMenu("Sitzung"); + JMenu cascadeSessionMenu = new JMenu(I18n.GUI.getString("MainWindow.Menu.session.s")); menuBar.add(cascadeSessionMenu); - JMenuItem configItem = new JMenuItem("Einstellungen"); + JMenuItem configItem = new JMenuItem(I18n.GUI.getString("MainWindow.MenuItem.config.text")); cascadeSessionMenu.add(configItem); - JMenuItem logDirItem = new JMenuItem("Logverzeichnis öffnen"); + JMenuItem logDirItem = new JMenuItem(I18n.GUI.getString("MainWindow.MenuItem.logDir.text")); cascadeSessionMenu.add(logDirItem); cascadeSessionMenu.addSeparator(); - JMenuItem logoutItem = new JMenuItem("Abmelden und beenden"); + JMenuItem logoutItem = new JMenuItem(I18n.GUI.getString("MainWindow.MenuItem.logout.text")); cascadeSessionMenu.add(logoutItem); - JMenuItem exitItem = new JMenuItem("Beenden"); + JMenuItem exitItem = new JMenuItem(I18n.GUI.getString("MainWindow.MenuItem.exit.text")); cascadeSessionMenu.add(exitItem); - JMenu cascadeViewMenu = new JMenu("Ansicht"); + JMenu cascadeViewMenu = new JMenu(I18n.GUI.getString("MainWindow.Menu.view.s")); menuBar.add(cascadeViewMenu); - JMenuItem homeItem = new JMenuItem("Startseite"); + JMenuItem homeItem = new JMenuItem(I18n.GUI.getString("MainWindow.MenuItem.home.text")); cascadeViewMenu.add(homeItem); - JMenuItem imagesItem = new JMenuItem("Virtuelle Maschinen"); + JMenuItem imagesItem = new JMenuItem(I18n.GUI.getString("MainWindow.MenuItem.images.text")); cascadeViewMenu.add(imagesItem); // Prevent switching to imageList when user is student @@ -448,18 +446,18 @@ public abstract class MainWindow { imagesItem.setEnabled(false); } - JMenuItem lecturesItem = new JMenuItem("Veranstaltungen"); + JMenuItem lecturesItem = new JMenuItem(I18n.GUI.getString("MainWindow.MenuItem.lectures.text")); cascadeViewMenu.add(lecturesItem); // the About menu button - JMenu cascadeAboutMenu = new JMenu("Über"); + JMenu cascadeAboutMenu = new JMenu(I18n.GUI.getString("MainWindow.Menu.about.s")); menuBar.add(cascadeAboutMenu); - JMenuItem disclaimerItem = new JMenuItem("Nutzungsvereinbarung"); - JMenuItem privacyNoticeItem = new JMenuItem("Datenschutzerklärung"); - JMenuItem virtualizerNoticeItem = new JMenuItem("Virtualisierer"); + JMenuItem disclaimerItem = new JMenuItem(I18n.GUI.getString("MainWindow.MenuItem.disclaimer.text")); + JMenuItem privacyNoticeItem = new JMenuItem(I18n.GUI.getString("MainWindow.MenuItem.privacyNotice.text")); + JMenuItem virtualizerNoticeItem = new JMenuItem(I18n.GUI.getString("MainWindow.MenuItem.virtualizer.text")); JMenuItem wikiItem = new JMenuItem(Branding.getServiceFAQWebsite()); - JMenuItem updateCheckItem = new JMenuItem("Software-Aktualisierung"); + JMenuItem updateCheckItem = new JMenuItem(I18n.GUI.getString("MainWindow.MenuItem.updateCheck.text")); cascadeAboutMenu.add(disclaimerItem); cascadeAboutMenu.add(privacyNoticeItem); cascadeAboutMenu.add(virtualizerNoticeItem); @@ -590,16 +588,8 @@ public abstract class MainWindow { timeDiffChecked = true; if (diffSecs > TimeUnit.MINUTES.toMillis(10)) { Gui.asyncMessageBox( - "ACHTUNG: Die Uhrzeit Ihres Computers weicht von der Uhrzeit auf dem Satellitenserver ab.\n" - + "Bitte stellen Sie sicher, dass die Uhr Ihres Computers richtig gestellt ist.\n" - + "Falls Ihre Sytemzeit korrekt gesetzt ist, ist möglicherweise die Uhrzeit auf\n" - + "dem Satellitenserver nicht korrekt eingestellt.\n" - + "In diesem Fall kann es - je nach Abweichung - zu unerwarteten Problemen mit den\n" - + "Start- und Endzeiten von Veranstaltungen kommen. Kontaktieren Sie in diesem\n" - + "Fall den zuständigen Administrator, damit die Uhrzeit auf dem Satellitenserver\n" - + "korrigiert werden kann.\n\n" + "Ihr Computer: " - + FormatHelper.longDate(now) + "\nSatellitenserver: " - + FormatHelper.longDate(status.serverTime), + I18n.GUI.getString("MainWindow.Message.warning.incorrectTime", + FormatHelper.longDate(now), FormatHelper.longDate(status.serverTime)), MessageType.WARNING, LOGGER, null); } } @@ -631,7 +621,7 @@ public abstract class MainWindow { public PleaseWait() { GridManager grid = new GridManager(this, 3); grid.add(Box.createHorizontalGlue()).expand(true, true); - grid.add(new JLabel("Bitte warten, suche Proxy-Konfiguration...")) + grid.add(new JLabel(I18n.GUI.getString("MainWindow.Label.pleaseWait.text"))) .expand(false, true) .fill(true, true); grid.add(Box.createHorizontalGlue()).expand(true, true); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java index a9631097..2a9b2334 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java @@ -9,6 +9,7 @@ import org.openslx.bwlp.thrift.iface.TransferState; import org.openslx.dozmod.filetransfer.DownloadTask; import org.openslx.dozmod.filetransfer.TransferEvent; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.QuitNotification; import org.openslx.dozmod.util.DesktopEnvironment; @@ -24,7 +25,7 @@ public class DownloadPanel extends TransferPanel implements ActionListener, Quit public DownloadPanel(String displayName, String diskFile, DownloadTask download) { super(download, displayName, diskFile); - btnOpenFolder = new JButton("Ordner öffnen"); + btnOpenFolder = new JButton(I18n.ACTIVITY.getString("DownloadPanel.Button.openFolder.text")); btnOpenFolder.setEnabled(false); header.add(btnOpenFolder, 6); btnOpenFolder.addActionListener(this); @@ -37,7 +38,7 @@ public class DownloadPanel extends TransferPanel implements ActionListener, Quit public void actionPerformed(ActionEvent e) { if (e.getSource() == btnClose) { if (!download.isCanceled()) { - if (!Gui.showMessageBox(panel, "Wollen Sie diesen Transfer wirklich abbrechen?", + if (!Gui.showMessageBox(panel, I18n.ACTIVITY.getString("DownloadPanel.Message.yesNo.cancelTransfer"), MessageType.QUESTION_YESNO, null, null)) return; download.cancel(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java index 64e6b994..aa461286 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java @@ -5,6 +5,7 @@ import java.awt.event.ActionListener; import org.apache.log4j.Logger; import org.openslx.dozmod.filetransfer.TransferEventEmitter; +import org.openslx.dozmod.gui.helper.I18n; @SuppressWarnings("serial") public class PassiveUploadPanel extends TransferPanel { @@ -16,11 +17,11 @@ public class PassiveUploadPanel extends TransferPanel { private final PassiveUploadPanel panel = this; public PassiveUploadPanel(TransferEventEmitter state, String name) { - super(state, name, "<Transfer zwischen Masterserver und Satellitenserver>"); + super(state, name, I18n.ACTIVITY.getString("PassiveUploadPanel.TransferPanel.fileName")); btnClose.addActionListener(new ButtonAction()); this.state = state; state.addListener(this); - btnClose.setText("Ausblenden"); + btnClose.setText(I18n.ACTIVITY.getString("PassiveUploadPanel.Button.close.text")); } private class ButtonAction implements ActionListener { diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java index 00ce10d3..eb752b30 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java @@ -17,6 +17,7 @@ import org.openslx.dozmod.filetransfer.TransferEventListener; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.BlockProgressBar; import org.openslx.dozmod.gui.control.QLabel; +import org.openslx.dozmod.gui.helper.I18n; @SuppressWarnings("serial") public abstract class TransferPanel extends ActivityPanel implements TransferEventListener { @@ -56,7 +57,7 @@ public abstract class TransferPanel extends ActivityPanel implements TransferEve // Header: [status] VM-Name ---- fileName [Button] header = new JPanel(); header.setLayout(new BoxLayout(header, BoxLayout.LINE_AXIS)); - lblStatus = new QLabel("Initialisiere"); + lblStatus = new QLabel(I18n.ACTIVITY.getString("TransferPanel.TransferState.initialize")); header.add(lblStatus); header.add(Box.createHorizontalStrut(10)); QLabel vmName = new QLabel(displayName); @@ -68,7 +69,7 @@ public abstract class TransferPanel extends ActivityPanel implements TransferEve lblFilename.setMinimumSize(new Dimension(0, 0)); header.add(lblFilename); header.add(Box.createHorizontalStrut(10)); - btnClose = new JButton("Abbrechen"); + btnClose = new JButton(I18n.ACTIVITY.getString("TransferPanel.Button.close.text.0")); header.add(btnClose); add(header); progressWrapper = new JPanel(); @@ -124,20 +125,20 @@ public abstract class TransferPanel extends ActivityPanel implements TransferEve switch (event.state) { case ERROR: errorCountdown = 20; - status = "Fehler"; + status = I18n.ACTIVITY.getString("TransferPanel.TransferState.error"); if (transfer.isCanceled()) { transfer.removeListener(panel); } break; case FINISHED: transferDone(); - status = "Beendet"; + status = I18n.ACTIVITY.getString("TransferPanel.TransferState.finished"); break; case IDLE: - status = "Inaktiv"; + status = I18n.ACTIVITY.getString("TransferPanel.TransferState.idle"); break; case WORKING: - status = "Übertragung läuft"; + status = I18n.ACTIVITY.getString("TransferPanel.TransferState.working"); break; default: status = event.state.toString(); @@ -168,7 +169,7 @@ public abstract class TransferPanel extends ActivityPanel implements TransferEve private void transferDone() { transfer.removeListener(panel); lblRemaining.setText("-"); - btnClose.setText("Schließen"); + btnClose.setText(I18n.ACTIVITY.getString("TransferPanel.Button.close.text.1")); lblFilename.setText(""); footer.setVisible(false); progressWrapper.setVisible(false); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UpdatePanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UpdatePanel.java index 41b53302..4c4c392b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UpdatePanel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UpdatePanel.java @@ -11,6 +11,7 @@ import javax.swing.SwingUtilities; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.QLabel; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.window.CheckUpdateWindow; import org.openslx.dozmod.util.DesktopEnvironment; import org.openslx.dozmod.util.DesktopEnvironment.Link; @@ -40,12 +41,16 @@ public class UpdatePanel extends ActivityPanel implements ActionListener { // Header: Neue Version verfügbar: <newVersion> [Button] header = new JPanel(); header.setLayout(new BoxLayout(header, BoxLayout.LINE_AXIS)); - lblInfo = new QLabel("Neue Version verfügbar: " + newVersion, Gui.getScaledIconResource("/img/upload-icon.png", "!", 32, this), QLabel.LEFT); + lblInfo = new QLabel(I18n.ACTIVITY.getString("UpdatePanel.Label.info.text", newVersion), + Gui.getScaledIconResource("/img/upload-icon.png", "!", 32, this), QLabel.LEFT); header.add(lblInfo); header.add(Box.createHorizontalGlue()); - btnLink = new JButton("Im Browser öffnen", Gui.getScaledIconResource("/img/download-icon.png", "!", 24, this)); - btnDetails = new JButton("Changelog", Gui.getScaledIconResource("/img/info-icon.png", "?", 24, this)); - btnClose = new JButton("Schließen", Gui.getScaledIconResource("/img/delete-icon.png", "X", 24, this)); + btnLink = new JButton(I18n.ACTIVITY.getString("UpdatePanel.Button.link.text"), + Gui.getScaledIconResource("/img/download-icon.png", "!", 24, this)); + btnDetails = new JButton(I18n.ACTIVITY.getString("UpdatePanel.Button.details.text"), + Gui.getScaledIconResource("/img/info-icon.png", "?", 24, this)); + btnClose = new JButton(I18n.ACTIVITY.getString("UpdatePanel.Button.close.text"), + Gui.getScaledIconResource("/img/delete-icon.png", "X", 24, this)); btnLink.addActionListener(this); btnClose.addActionListener(this); header.add(btnLink); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java index bc24758a..b9b106f6 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java @@ -13,6 +13,7 @@ import org.openslx.bwlp.thrift.iface.TAuthorizationException; import org.openslx.bwlp.thrift.iface.TInvalidTokenException; import org.openslx.bwlp.thrift.iface.UploadOptions; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.QuitNotification; import org.openslx.dozmod.state.UploadWizardState; @@ -40,7 +41,7 @@ public class UploadPanel extends TransferPanel implements QuitNotification { || Session.getSatelliteConfig().serverSideCopy != SscMode.USER) { chkServerSideCopy = null; } else { - chkServerSideCopy = new JCheckBox("ServerSide Copy"); + chkServerSideCopy = new JCheckBox(I18n.ACTIVITY.getString("UploadPanel.CheckBox.serverSideCopy.text")); footer.add(Box.createHorizontalStrut(15)); footer.add(chkServerSideCopy); chkServerSideCopy.addActionListener(new SscToggle()); @@ -54,7 +55,7 @@ public class UploadPanel extends TransferPanel implements QuitNotification { @Override public void actionPerformed(ActionEvent e) { if (!state.getUploadTask().isCanceled()) { - if (!Gui.showMessageBox(panel, "Wollen Sie diesen Transfer wirklich abbrechen?", + if (!Gui.showMessageBox(panel, I18n.ACTIVITY.getString("UploadPanel.Message.yesNo.cancelTransfer"), MessageType.QUESTION_YESNO, null, null)) return; QuickTimer.scheduleOnce(new Task() { @@ -84,7 +85,7 @@ public class UploadPanel extends TransferPanel implements QuitNotification { } catch (TAuthorizationException | TInvalidTokenException e) { dis = true; } catch (TException e) { - Gui.asyncMessageBox("Unerwarteter Fehler beim Setzen der Transferoptionen", + Gui.asyncMessageBox(I18n.ACTIVITY.getString("UploadPanel.Message.error.setUploadOptions"), MessageType.ERROR, LOGGER, e); } final UploadOptions newOptions = newOpt; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ImagePermissionConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ImagePermissionConfigurator.java index efba020c..cf082e27 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ImagePermissionConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ImagePermissionConfigurator.java @@ -33,6 +33,7 @@ import org.openslx.dozmod.gui.control.table.ImagePermissionTable; import org.openslx.dozmod.gui.control.table.ImagePermissionTable.UserImagePermissions; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.window.UserListWindow; import org.openslx.dozmod.gui.window.UserListWindow.UserAddedCallback; import org.openslx.dozmod.thrift.cache.UserCache; @@ -69,9 +70,9 @@ public class ImagePermissionConfigurator extends JPanel implements GenericContro userButtonPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); userButtonPane.setLayout(new BoxLayout(userButtonPane, BoxLayout.LINE_AXIS)); - btnAddUser = new JButton("Benutzer hinzufügen"); + btnAddUser = new JButton(I18n.CONFIGURATOR.getString("ImagePermission.Button.addUser.text")); userButtonPane.add(btnAddUser); - btnRemoveUser = new JButton("Benutzer entfernen"); + btnRemoveUser = new JButton(I18n.CONFIGURATOR.getString("ImagePermission.Button.removeUser.text")); userButtonPane.add(btnRemoveUser); userButtonPane.add(Box.createGlue()); @@ -105,7 +106,7 @@ public class ImagePermissionConfigurator extends JPanel implements GenericContro permissionTable.setData(permissionList, false); fireUserChangeEvent(); } - }, "Hinzufügen", ownerId); + }, I18n.CONFIGURATOR.getString("ImagePermission.Button.addUser.caption"), ownerId); } }); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java index 15959322..817289be 100755 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java @@ -29,6 +29,7 @@ import org.openslx.dozmod.gui.control.table.CheckListTable.Wrapper; import org.openslx.dozmod.gui.control.table.LectureLdapFilterTable; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.thrift.cache.MetaDataCache; @@ -63,7 +64,7 @@ public class LdapFilterConfigurator extends LdapFilterConfiguratorLayout { txtAttribute.setEnabled(editable); txtValue.setEnabled(editable); if (editable) - btnAdd.setText("Ändern"); + btnAdd.setText(I18n.CONFIGURATOR.getString("LdapFilter.Button.add.text.0")); if (item == null) { clearInputFields(); return; @@ -82,7 +83,8 @@ public class LdapFilterConfigurator extends LdapFilterConfiguratorLayout { LdapFilter input = new LdapFilter(); input.attribute = txtAttribute.getText(); if (input.attribute == null || input.attribute.isEmpty()) { - Gui.showMessageBox("Kein Attribut angegeben", MessageType.ERROR, null, null); + Gui.showMessageBox(I18n.CONFIGURATOR.getString("LdapFilter.Message.error.noAttribute"), + MessageType.ERROR, null, null); return; } input.value = txtValue.getText(); @@ -97,7 +99,8 @@ public class LdapFilterConfigurator extends LdapFilterConfiguratorLayout { // creating a new one, either way add it to the list and update // the table, if its not present already if (oldList.contains(newEntry)) { - Gui.showMessageBox("Eintrag bereits vorhanden", MessageType.ERROR, null, null); + Gui.showMessageBox(I18n.CONFIGURATOR.getString("LdapFilter.Message.error.entryAlreadyExists"), + MessageType.ERROR, null, null); return; } // now decide whether to create a new entry or update existing one @@ -143,7 +146,7 @@ public class LdapFilterConfigurator extends LdapFilterConfiguratorLayout { btnDel.setEnabled(false); txtAttribute.setText(null); txtValue.setText(null); - btnAdd.setText("Hinzufügen"); + btnAdd.setText(I18n.CONFIGURATOR.getString("LdapFilter.Button.add.text.1")); } public List<LdapFilter> getState() { @@ -205,11 +208,6 @@ class LdapFilterConfiguratorLayout extends JPanel { private static final long serialVersionUID = 6479838641542743622L; - private final static String HELPTEXT = "Geben Sie hier LDAP Filter ein, die die Sichtbarkeit" - + " der Veranstaltung abhängig vom angemeldeten Benutzer einschränken. Eine Veranstaltung" - + " ist sichtbar, sobald einer der angegebenen Filter zutrifft. Zusätzliche Raumbeschränkungen" - + " greifen weiterhin."; - protected final LectureLdapFilterTable tblFilters = new LectureLdapFilterTable(); protected final JTextField txtAttribute, txtValue; protected final JButton btnAdd, btnDel; @@ -217,27 +215,29 @@ class LdapFilterConfiguratorLayout extends JPanel { public LdapFilterConfiguratorLayout() { GridManager grid = new GridManager(this, 1, true, new Insets(3, 3, 3, 3)); // top info panel - grid.add(new WordWrapLabel(HELPTEXT)).fill(true, false).expand(true, false); + grid.add(new WordWrapLabel(I18n.CONFIGURATOR.getString("LdapFilter.Label.info.text"))) + .fill(true, false).expand(true, false); grid.nextRow(); // middle filter list grid.add(new QScrollPane(tblFilters)).fill(true, true).expand(true, true); grid.nextRow(); - btnDel = new JButton("Entfernen"); + btnDel = new JButton(I18n.CONFIGURATOR.getString("LdapFilter.Button.delete.text")); grid.add(btnDel).anchor(GridBagConstraints.EAST); grid.nextRow(); JPanel pnlNewShare = new JPanel(); GridManager gridNewFilter = new GridManager(pnlNewShare, 3, true); - pnlNewShare.setBorder(BorderFactory.createTitledBorder("Eigene Filter definieren")); - gridNewFilter.add(new QLabel("Attribut")); + pnlNewShare.setBorder(BorderFactory.createTitledBorder( + I18n.CONFIGURATOR.getString("LdapFilter.TitledBorder.newShare.title"))); + gridNewFilter.add(new QLabel(I18n.CONFIGURATOR.getString("LdapFilter.Label.attribute.text"))); txtAttribute = new JTextField(); gridNewFilter.add(txtAttribute, 2).fill(true, false).expand(true, false); gridNewFilter.nextRow(); - gridNewFilter.add(new QLabel("Wert")); + gridNewFilter.add(new QLabel(I18n.CONFIGURATOR.getString("LdapFilter.Label.value.text"))); txtValue = new JTextField(); gridNewFilter.add(txtValue).fill(true, false).expand(true, false); - btnAdd = new JButton("Hinzufügen"); + btnAdd = new JButton(I18n.CONFIGURATOR.getString("LdapFilter.Button.add.text.1")); gridNewFilter.add(btnAdd).anchor(GridBagConstraints.EAST); gridNewFilter.nextRow(); gridNewFilter.finish(false); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LecturePermissionConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LecturePermissionConfigurator.java index 5e4c1649..b659c3c9 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LecturePermissionConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LecturePermissionConfigurator.java @@ -31,6 +31,7 @@ import org.openslx.dozmod.gui.control.table.LecturePermissionTable; import org.openslx.dozmod.gui.control.table.LecturePermissionTable.UserLecturePermissions; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.window.UserListWindow; import org.openslx.dozmod.gui.window.UserListWindow.UserAddedCallback; @@ -76,9 +77,9 @@ public class LecturePermissionConfigurator extends JPanel implements GenericCont userButtonPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); userButtonPane.setLayout(new BoxLayout(userButtonPane, BoxLayout.LINE_AXIS)); - btnAddUser = new JButton("Benutzer hinzufügen"); + btnAddUser = new JButton(I18n.CONFIGURATOR.getString("LecturePermission.Button.addUser.text")); userButtonPane.add(btnAddUser); - btnRemoveUser = new JButton("Benutzer entfernen"); + btnRemoveUser = new JButton(I18n.CONFIGURATOR.getString("LecturePermission.Button.removeUser.text")); userButtonPane.add(btnRemoveUser); userButtonPane.add(Box.createGlue()); @@ -111,7 +112,7 @@ public class LecturePermissionConfigurator extends JPanel implements GenericCont permissionTable.setData(permissionList, false); fireUserChangeEvent(); } - }, "Hinzufügen", ownerId); + }, I18n.CONFIGURATOR.getString("LecturePermission.Button.addUser.caption"), ownerId); } }); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetrulesConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetrulesConfigurator.java index 3a0aabdd..8e11e484 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetrulesConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetrulesConfigurator.java @@ -51,6 +51,7 @@ import org.openslx.dozmod.gui.changemonitor.GenericControlWindow; import org.openslx.dozmod.gui.configurator.NetrulesConfigurator.StateWrapper; import org.openslx.dozmod.gui.control.WordWrapLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.TextChangeListener; import org.openslx.dozmod.thrift.cache.MetaDataCache; @@ -196,11 +197,13 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements private void showPresetSelector() { if (predefinedRules == null) { - Gui.showMessageBox("Wah wah wah! Null preset list", MessageType.ERROR, null, null); + Gui.showMessageBox(I18n.CONFIGURATOR.getString("NetRules.Message.error.noPredefinedRules"), + MessageType.ERROR, null, null); return; } final JDialog dialog = new JDialog(SwingUtilities.getWindowAncestor(this), - "Auswahl", ModalityType.APPLICATION_MODAL); + I18n.CONFIGURATOR.getString("NetRules.Dialog.dialog.title"), + ModalityType.APPLICATION_MODAL); JPanel pane = new JPanel(); pane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW) .put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel"); @@ -216,7 +219,7 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements dialog.setMinimumSize(dd); dialog.setPreferredSize(dd); GridManager grid = new GridManager(pane, 3, true, new Insets(2, 2, 2, 2)); - grid.add(new WordWrapLabel("Vordefinierte Regelsets:"), 3); + grid.add(new WordWrapLabel(I18n.CONFIGURATOR.getString("NetRules.Label.predefinedRules.text")), 3); grid.nextRow(); final Map<ButtonModel, Integer> mapper = new HashMap<>(); for (PresetNetRule ruleSet : predefinedRules) { @@ -231,8 +234,8 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements grid.add(Box.createVerticalGlue(), 3).expand(true, true).fill(true, true); grid.nextRow(); grid.add(Box.createHorizontalGlue()).expand(true, false).fill(true, false); - JButton btnCancel = new JButton("Abbrechen"); - JButton btnOk = new JButton("Speichern"); + JButton btnCancel = new JButton(I18n.CONFIGURATOR.getString("NetRules.Button.cancel.text")); + JButton btnOk = new JButton(I18n.CONFIGURATOR.getString("NetRules.Button.ok.text")); grid.add(btnCancel); grid.add(btnOk); grid.finish(false); @@ -386,9 +389,9 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements // log numbers for fields independently... LOGGER.debug("Invalid number of fields! Expected 3, got: " + fields.length); if (fields.length > 3) { - errors.append("Zeile " + lineNo + ": Zu viele Felder.\n"); + errors.append(I18n.CONFIGURATOR.getString("NetRules.Message.error.tooManyFields", lineNo)); } else { - errors.append("Zeile " + lineNo + ": Zu wenig Felder.\n"); + errors.append(I18n.CONFIGURATOR.getString("NetRules.Message.error.tooFewFields", lineNo)); } invalid = true; continue; @@ -404,7 +407,7 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements if (!ruleDirection.equals("IN") && !ruleDirection.equals("OUT")) { lineNo += addLine(newdoc, ruleLine, Color.RED, true); LOGGER.debug("Invalid net direction! Expected 'in' or out'. Got: " + ruleDirection); - errors.append("Zeile " + lineNo + ": Ungültige Richtung. Bitte nutzen Sie 'IN' bzw. 'OUT'.\n"); + errors.append(I18n.CONFIGURATOR.getString("NetRules.Message.error.invalidNetDirection", lineNo)); invalid = true; continue; } @@ -415,7 +418,7 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements if (port < 0 || port > 65535) { lineNo += addLine(newdoc, ruleLine, Color.RED, true); LOGGER.debug("Invalid port! Got: " + port); - errors.append("Zeile " + lineNo + ": Ungültiger Port. Gültiger Bereich ist 0-65535.\n"); + errors.append(I18n.CONFIGURATOR.getString("NetRules.Message.error.invalidPort", lineNo)); invalid = true; continue; } @@ -429,7 +432,8 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements String checkRes = checkHostnameSimple(fields[0]); if (checkRes != null) { lineNo += addLine(newdoc, ruleLine, Color.RED, true); - errors.append("Zeile " + lineNo + ": " + checkRes + "\n"); + errors.append(I18n.CONFIGURATOR.getString("NetRules.Message.error.checkResWithLineNo", + lineNo, checkRes)); invalid = true; continue; } @@ -442,10 +446,7 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements resetTabStops(); } if (!silent && errors.length() != 0) { - Gui.showMessageBox("Fehler beim Auswerten der angegebenen Netzwerkregeln.\n\n" + errors.toString() - + "\nBitte geben Sie die Regeln zeilenweise im Format\n" - + "<host> <port> <IN|OUT>\n" - + "an.", + Gui.showMessageBox(I18n.CONFIGURATOR.getString("NetRules.Message.error.evaluatingNetRules", errors.toString()), MessageType.ERROR, null, null); } if (invalid) { @@ -486,7 +487,7 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements */ private String checkHostnameSimple(String hostname) { if (hostname.length() > 254) { - return "Hostname ist zu lang."; + return I18n.CONFIGURATOR.getString("NetRules.Message.error.hostnameTooLong"); } boolean allNumeric = true; int netmask = -1; @@ -495,7 +496,7 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements if (ls != -1) { netmask = Util.parseInt(hostname.substring(ls + 1), -1); if (netmask == -1) { - return "Ungültige Netzmaske."; + return I18n.CONFIGURATOR.getString("NetRules.Message.error.invalidNetmask"); } hostname = hostname.substring(0, ls); } @@ -509,18 +510,18 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements // v6 if ((hostname.startsWith(":") && !hostname.startsWith("::")) || (hostname.endsWith(":") && ! hostname.endsWith("::"))) { - return "IPv6-Adresse darf nicht mit einem Doppelpunkt beginnen oder enden."; + return I18n.CONFIGURATOR.getString("NetRules.Message.error.IPv6BeginOrEndWithColon"); } int numCompressed = (hostname.length() - hostname.replace("::", "").length()) / 2; if (numCompressed > 1) { - return "IPv6-Adresse darf nicht mehr als einen komprimierten Teil enthalten."; + return I18n.CONFIGURATOR.getString("NetRules.Message.error.IPv6MoreThanOneCompressedPart"); } if (netmask > 128) { - return "IPv6 Netzmaske kann nicht größer 128 Bit sein."; + return I18n.CONFIGURATOR.getString("NetRules.Message.error.IPv6GreaterThan128Bits"); } domainLabels = hostname.split(":"); if (domainLabels.length > 8) { - return "IPv6-Adresse enthält zu viele Hextets."; // Yes it's called that apparently + return I18n.CONFIGURATOR.getString("NetRules.Message.error.IPv6TooManyHextets"); // Yes it's called that apparently } for (String domainLabel : domainLabels) { if (domainLabel.isEmpty()) @@ -528,26 +529,27 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements try { int test = Integer.parseInt(domainLabel, 16); if (test < 0 || test > 65535) { - return "IPv6-Adresse enthält ungültiges Hextet."; + return I18n.CONFIGURATOR.getString("NetRules.Message.error.IPv6InvalidHextet"); } } catch (Exception e) { - return "IPv6-Adresse enthält nicht-hexadezimale Zeichen."; + return I18n.CONFIGURATOR.getString("NetRules.Message.error.IPv6NonHexadecimalCharacters"); } } if (!allNumeric || ((domainLabels.length == 8 || numCompressed > 0) && (netmask < -1 || netmask > 128)) || (domainLabels.length < 8 && numCompressed == 0 && (netmask < 0 || netmask > 128))) { - return "Fehlerhafte IPv6-Adresse/Netzmaske."; + return I18n.CONFIGURATOR.getString("NetRules.Message.error.incorrectIPv6AddressOrNetmask"); } } else { // v4 or hostname if (netmask > 32) { - return "IPv4 Netzmaske kann nicht größer 32 Bit sein."; + return I18n.CONFIGURATOR.getString("NetRules.Message.error.IPv4GreaterThan32Bits"); } for (String domainLabel : domainLabels) { if (domainLabel.length() > 63) { // fail since domain level should be max 63 chars - return "Domain-Ebene '" + domainLabel + "' länger als 63 Zeichen."; + return I18n.CONFIGURATOR.getString("NetRules.Message.error.domainLabelLongerThan63Characters", + domainLabel); } int i = Util.parseInt(domainLabel, -1); if (i < 0 || i > 255) { @@ -559,7 +561,7 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements if ((domainLabels.length == 4 && (netmask < -1 || netmask > 32)) || domainLabels.length > 4 || (domainLabels.length < 4 && (netmask < 0 || netmask > 32))) { - return "Fehlerhafte IPv4-Adresse/Netzmaske."; + return I18n.CONFIGURATOR.getString("NetRules.Message.error.incorrectIPv4AddressOrNetmask"); } } } @@ -574,13 +576,6 @@ public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements class NetrulesConfiguratorLayout extends JPanel { private static final long serialVersionUID = 5266120380443817325L; - private final static String STR_RULES_DESCRIPTION = "Wenn Sie den Internetzugriff deaktiviert haben," - + " können Sie hier Ausnahmen definieren (Whitelist)." - + " Bitte definieren Sie Ihre Regeln im Format\n<host> <port> <in|out>.\n" - + "Sie können Port 0 angeben, was sämtlichen TCP und UDP Ports eines Hosts entspricht."; - private final static String STR_RULES_ADD = "Wenn Sie Internetzugriff aktivieren," - + " hat diese Liste den gegenteiligen Effekt (Blacklist)."; - private final static String STR_TITLE = "Netzwerkregeln"; protected final JTextPane tpNetworkRules; protected final JButton btnCheckRules; @@ -592,19 +587,19 @@ class NetrulesConfiguratorLayout extends JPanel { new Insets(5, 5, 5, 5)); // middle panel for network rules - this.setBorder(BorderFactory.createTitledBorder(STR_TITLE)); + this.setBorder(BorderFactory.createTitledBorder(I18n.CONFIGURATOR.getString("NetRules.TitledBorder.title"))); tpNetworkRules = new JTextPane(); resetTabStops(); grid - .add(new WordWrapLabel(STR_RULES_DESCRIPTION), 2) + .add(new WordWrapLabel(I18n.CONFIGURATOR.getString("NetRules.Label.description.text")), 2) .fill(true, false).expand(true, false); grid.nextRow(); grid - .add(new WordWrapLabel(STR_RULES_ADD)) + .add(new WordWrapLabel(I18n.CONFIGURATOR.getString("NetRules.Label.add.text"))) .fill(true, false).expand(true, false); - btnCheckRules = new JButton("Regeln überprüfen"); + btnCheckRules = new JButton(I18n.CONFIGURATOR.getString("NetRules.Button.checkRules.text")); grid.add(btnCheckRules); grid.nextRow(); @@ -614,7 +609,7 @@ class NetrulesConfiguratorLayout extends JPanel { .fill(true, true).expand(true, true); grid.nextRow(); - btnShowPresets = new JButton("Vordefinierte Regelsets..."); + btnShowPresets = new JButton(I18n.CONFIGURATOR.getString("NetRules.Button.showPresets.text")); grid.add(btnShowPresets, 2).anchor(GridBagConstraints.LINE_END); grid.nextRow(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java index 77f2e381..95c45282 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java @@ -38,6 +38,7 @@ import org.openslx.dozmod.gui.control.table.CheckListTable.Wrapper; import org.openslx.dozmod.gui.control.table.NetshareTable; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.thrift.cache.MetaDataCache; import org.openslx.dozmod.util.FormatHelper; @@ -79,7 +80,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { chkIsPrinter.setEnabled(editable); chkShowPass.setEnabled(editable); if (editable) - btnAdd.setText("Ändern"); + btnAdd.setText(I18n.CONFIGURATOR.getString("NetShare.Button.add.text.0")); // clear the contents of the fields and return, if no share was selected. if (item == null) { @@ -145,7 +146,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { input.path = tfSharePath.getText(); if (input.path == null || input.path.isEmpty()) { - lblError.setText("Kein Pfad angegeben!"); + lblError.setText(I18n.CONFIGURATOR.getString("NetShare.Label.error.noPath")); return; } String inputShareName = tfShareName.getText(); @@ -156,7 +157,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { NetShareAuth inputNetShareAuth = cboNetshareAuth .getItemAt(cboNetshareAuth.getSelectedIndex()); if (inputNetShareAuth == null) { - lblError.setText("Kein Authentifizierungstyp angegeben!"); + lblError.setText(I18n.CONFIGURATOR.getString("NetShare.Label.error.noAuth")); return; } input.auth = inputNetShareAuth; @@ -170,7 +171,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { input.username = tfUsername.getText(); input.password = new String(tfPassword.getPassword()); if (input.username.isEmpty()) { - lblError.setText("Kein Nutzername angegeben!"); + lblError.setText(I18n.CONFIGURATOR.getString("NetShare.Label.error.noUsername")); return; } break; @@ -179,7 +180,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { break; } if (input == null) { - lblError.setText("Fehlerhafte Eingabe"); + lblError.setText(I18n.CONFIGURATOR.getString("NetShare.Label.error.incorrectInput")); LOGGER.debug("Bad input, aborting."); return; } @@ -189,7 +190,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { .getItemAt(cboNetshareMountPoint.getSelectedIndex()); if (!chkIsPrinter.isSelected()) { if (inputMountPoint == null) { - lblError.setText("Kein Laufwerk angegeben!"); + lblError.setText(I18n.CONFIGURATOR.getString("NetShare.Label.error.noMountPoint")); return; } input.mountpoint = String.valueOf(inputMountPoint); @@ -201,10 +202,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { // which we might want to implement one day... if (input.password != null && !input.password.isEmpty()) { if (!Gui.showMessageBox( - "Das eingebene Passwort wird im Klartext gespeichert " - + "und ist in der VM für jeden Nutzer sichtbar.\n" - + "Verwenden Sie auf keinen Fall sicherheitskritische Passwörter!" - + "\n\nMöchten Sie diesen Netzlaufwerk trotzdem hinzufügen?", + I18n.CONFIGURATOR.getString("NetShare.Message.yesNo.password"), MessageType.QUESTION_YESNO, LOGGER, null)) { return; } @@ -218,7 +216,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { if (oldEntry != null && oldList.contains(oldEntry)) { // editing existing one, delete it from the internal data if (!oldList.remove(oldEntry)) { - lblError.setText("Änderung fehlgeschlagen!"); + lblError.setText(I18n.CONFIGURATOR.getString("NetShare.Label.error.changeFailed")); LOGGER.error("Failed to remove selected share for replacement: " + oldEntry); return; } @@ -228,7 +226,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { // creating a new one, either way add it to the list and update // the table, if its not present already if (oldList.contains(newEntry)) { - lblError.setText("Existiert bereits!"); + lblError.setText(I18n.CONFIGURATOR.getString("NetShare.Label.error.alreadyExists")); LOGGER.error("Network share already in the list, aborting."); return; } @@ -287,7 +285,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { cboNetshareMountPoint.setSelectedItem(null); chkIsPrinter.setSelected(false); chkShowPass.setSelected(false); - btnAdd.setText("Hinzufügen"); + btnAdd.setText(I18n.CONFIGURATOR.getString("NetShare.Button.add.text.1")); } public List<NetShare> getState() { @@ -335,10 +333,6 @@ class NetshareConfiguratorLayout extends JPanel { private static final long serialVersionUID = 6479525981542743622L; - private final static String txtNetshareDesc = "<html>Hier können Sie Netzlaufwerke angeben," - + " die automatisch beim Start der Veranstaltung eingebunden werden sollen." - + " Der Platzhalter <em>%loginuser%</em> wird im Pfad durch den Loginnamen des Nutzers ersetzt.</html>"; - protected final JLabel lblError; protected final NetshareTable tblNetshare = new NetshareTable(); protected final JTextField tfSharePath, tfShareName, tfUsername; @@ -369,7 +363,8 @@ class NetshareConfiguratorLayout extends JPanel { public NetshareConfiguratorLayout() { GridManager grid = new GridManager(this, 3, true, new Insets(3, 3, 3, 3)); // top info panel - grid.add(new JLabel(txtNetshareDesc), 3).fill(true, false).expand(true, false); + grid.add(new JLabel(I18n.CONFIGURATOR.getString("NetShare.Label.description.text")), 3) + .fill(true, false).expand(true, false); grid.nextRow(); // middle netshare list grid.add(new QScrollPane(tblNetshare), 3).fill(true, true).expand(true, true); @@ -377,17 +372,18 @@ class NetshareConfiguratorLayout extends JPanel { JPanel pnlNewShare = new JPanel(); GridManager gridNewShare = new GridManager(pnlNewShare, 6, true, new Insets(0, 3, 0, 3)); - pnlNewShare.setBorder(BorderFactory.createTitledBorder("Eigenes Netzlaufwerk definieren")); + pnlNewShare.setBorder(BorderFactory.createTitledBorder( + I18n.CONFIGURATOR.getString("NetShare.TitledBorder.newShare.title"))); JPanel pnlSharePath = new JPanel(); pnlSharePath.setLayout(new BoxLayout(pnlSharePath, BoxLayout.LINE_AXIS)); - gridNewShare.add(new QLabel("Pfad")); + gridNewShare.add(new QLabel(I18n.CONFIGURATOR.getString("NetShare.Label.sharePath.text"))); tfSharePath = new JTextField(); pnlSharePath.add(tfSharePath); pnlSharePath.add(Box.createGlue()); pnlSharePath.add(Box.createHorizontalStrut(5)); - chkIsPrinter = new JCheckBox("Drucker"); + chkIsPrinter = new JCheckBox(I18n.CONFIGURATOR.getString("NetShare.CheckBox.isPrinter.text")); pnlSharePath.add(chkIsPrinter); pnlSharePath.add(Box.createHorizontalStrut(5)); gridNewShare.add(pnlSharePath, 5).fill(true, false).expand(true, false); @@ -399,30 +395,30 @@ class NetshareConfiguratorLayout extends JPanel { pnlShareName.setLayout(new BoxLayout(pnlShareName, BoxLayout.LINE_AXIS)); pnlShareName.add(tfShareName); pnlShareName.add(Box.createHorizontalStrut(3)); - pnlShareName.add(new QLabel("Laufwerk")); + pnlShareName.add(new QLabel(I18n.CONFIGURATOR.getString("NetShare.Label.shareMountPoint.text"))); pnlShareName.add(Box.createHorizontalStrut(3)); pnlShareName.add(cboNetshareMountPoint); - gridNewShare.add(new QLabel("Anzeigename")); + gridNewShare.add(new QLabel(I18n.CONFIGURATOR.getString("NetShare.Label.shareName.text"))); gridNewShare.add(pnlShareName, 5).fill(true, false).expand(true, false); gridNewShare.nextRow(); - gridNewShare.add(new QLabel("Authentifizierung")); + gridNewShare.add(new QLabel(I18n.CONFIGURATOR.getString("NetShare.Label.shareAuth.text"))); gridNewShare.add(cboNetshareAuth, 5).fill(true, false).expand(true, false); gridNewShare.nextRow(); - gridNewShare.add(new QLabel("Benutzername")); + gridNewShare.add(new QLabel(I18n.CONFIGURATOR.getString("NetShare.Label.username.text"))); tfUsername = new JTextField(20); gridNewShare.add(tfUsername, 2).fill(true, false).expand(true, false); - gridNewShare.add(new QLabel("Passwort")); + gridNewShare.add(new QLabel(I18n.CONFIGURATOR.getString("NetShare.Label.password.text"))); tfPassword = new JPasswordField(20); gridNewShare.add(tfPassword, 2).fill(true, false).expand(true, false); gridNewShare.nextRow(); - chkShowPass = new JCheckBox("Passwort anzeigen"); + chkShowPass = new JCheckBox(I18n.CONFIGURATOR.getString("NetShare.CheckBox.showPassword.text")); gridNewShare.add(Box.createGlue(), 5); gridNewShare.add(chkShowPass).anchor(GridBagConstraints.EAST); gridNewShare.nextRow(); grid.add(pnlNewShare, 3).fill(true, false).expand(true, false); grid.nextRow(); - btnAdd = new JButton("Hinzufügen"); - btnDel = new JButton("Entfernen"); + btnAdd = new JButton(I18n.CONFIGURATOR.getString("NetShare.Button.add.text.1")); + btnDel = new JButton(I18n.CONFIGURATOR.getString("NetShare.Button.delete.text")); lblError = new QLabel(""); lblError.setForeground(Color.RED); grid.add(lblError).fill(true, false).expand(true, false); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/StartupConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/StartupConfigurator.java index 16267690..eadc7339 100755 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/StartupConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/StartupConfigurator.java @@ -41,6 +41,7 @@ import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.control.WordWrapLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.thrift.Session; import org.openslx.dozmod.thrift.cache.MetaDataCache; @@ -96,11 +97,12 @@ public class StartupConfigurator extends StartupConfiguratorLayout { private void showRunscriptSelector() { if (scripts == null) { - Gui.showMessageBox("Wah wah wah! Null scripts", MessageType.ERROR, null, null); + Gui.showMessageBox(I18n.CONFIGURATOR.getString("Startup.Message.error.noScripts"), + MessageType.ERROR, null, null); return; } final JDialog dialog = new JDialog(SwingUtilities.getWindowAncestor(this), - "Auswahl", ModalityType.APPLICATION_MODAL); + I18n.CONFIGURATOR.getString("Startup.Dialog.title"), ModalityType.APPLICATION_MODAL); JPanel pane = new JPanel(); pane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW) .put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel"); @@ -116,7 +118,8 @@ public class StartupConfigurator extends StartupConfiguratorLayout { dialog.setMinimumSize(dd); dialog.setPreferredSize(dd); GridManager grid = new GridManager(pane, 3, true, new Insets(2, 2, 2, 2)); - grid.add(new WordWrapLabel("Vordefinierte Startskripte:"), 3).fill(true, false); + grid.add(new WordWrapLabel(I18n.CONFIGURATOR.getString("Startup.Label.predefinedScripts.text")), 3) + .fill(true, false); grid.nextRow(); final Map<ButtonModel, Integer> mapper = new HashMap<>(); boolean haveDisabled = false; @@ -135,15 +138,14 @@ public class StartupConfigurator extends StartupConfiguratorLayout { } } if (haveDisabled) { - grid.add(new WordWrapLabel("Ausgegraute Elemente sind mit dem zur" - + " Veranstaltung gehörendem Betriebssystem nicht kompatibel."), 3) + grid.add(new WordWrapLabel(I18n.CONFIGURATOR.getString("Startup.Label.greyedOutElements.text")), 3) .fill(true, false); grid.nextRow(); } grid.add(Box.createVerticalGlue(), 3).expand(true, true).fill(true, true); grid.nextRow(); - JButton btnCancel = new JButton("Abbrechen"); - JButton btnOk = new JButton("Speichern"); + JButton btnCancel = new JButton(I18n.CONFIGURATOR.getString("Startup.Button.cancel.text")); + JButton btnOk = new JButton(I18n.CONFIGURATOR.getString("Startup.Button.ok.text")); grid.add(Box.createHorizontalGlue()).expand(true, true).fill(true, true); grid.add(btnCancel); grid.add(btnOk); @@ -386,8 +388,6 @@ class StartupConfiguratorLayout extends JPanel { private static final long serialVersionUID = 648729071828404053L; - private final static String RUN_SCRIPT_HELP = "Ein hier eingetragenes Skript wird nach dem Start" - + " der VM automatisch ausgeführt."; protected final QLabel lblError; protected final JTextArea taRunScript; protected final ComboBox<RunscriptType> cboRunscriptType; @@ -397,7 +397,7 @@ class StartupConfiguratorLayout extends JPanel { public StartupConfiguratorLayout() { GridManager grid = new GridManager(this, 2, true, new Insets(5, 5, 5, 5)); - grid.add(new QLabel("Audio")); + grid.add(new QLabel(I18n.CONFIGURATOR.getString("Startup.Label.audio.text"))); cboSoundState = new ComboBox<>(new ComboBoxRenderer<SoundState>() { @Override public String renderItem(SoundState item) { @@ -411,7 +411,7 @@ class StartupConfiguratorLayout extends JPanel { grid.add(Box.createVerticalStrut(4), 2); grid.nextRow(); - grid.add(new WordWrapLabel(RUN_SCRIPT_HELP, false, true), 2) + grid.add(new WordWrapLabel(I18n.CONFIGURATOR.getString("Startup.Label.description.text"), false, true), 2) .fill(true, false).expand(true, false); grid.nextRow(); @@ -427,7 +427,7 @@ class StartupConfiguratorLayout extends JPanel { cboRunscriptType.setModel(new DefaultComboBoxModel<RunscriptType>( RunscriptType.values())); cboRunscriptType.setEditable(true); - grid.add(new QLabel("Dateinamenserweiterung: ")).fill(false, false) + grid.add(new QLabel(I18n.CONFIGURATOR.getString("Startup.Label.scriptType.text"))).fill(false, false) .expand(false, false); grid.add(cboRunscriptType).fill(true, false) .expand(true, false); @@ -442,7 +442,7 @@ class StartupConfiguratorLayout extends JPanel { } }); cboRunscriptVisibility.setModel(new DefaultComboBoxModel<RunscriptVisibility>(RunscriptVisibility.values())); - grid.add(new QLabel("Sichtbarkeit: ")).fill(false, false) + grid.add(new QLabel(I18n.CONFIGURATOR.getString("Startup.Label.visibility.text"))).fill(false, false) .expand(false, false); grid.add(cboRunscriptVisibility).fill(true, false) .expand(true, false); @@ -457,7 +457,7 @@ class StartupConfiguratorLayout extends JPanel { grid.add(scpRunScript, 2).fill(true, true).expand(true, true); grid.nextRow(); - btnPredefinedScripts = new JButton("Vordefinierte Skripte..."); + btnPredefinedScripts = new JButton(I18n.CONFIGURATOR.getString("Startup.Button.predefinedScripts.text")); grid.add(btnPredefinedScripts, 2).anchor(GridBagConstraints.LINE_END); grid.nextRow(); @@ -475,7 +475,8 @@ class StartupConfiguratorLayout extends JPanel { enum RunscriptType { - SHELL("Shellskript", "sh"), BATCH("Windows-Batch", "bat"); + SHELL(I18n.CONFIGURATOR.getString("Startup.ScriptType.shell"), "sh"), + BATCH(I18n.CONFIGURATOR.getString("Startup.ScriptType.batch"), "bat"); public final String displayName; public final String extension; @@ -492,7 +493,9 @@ enum RunscriptType { } enum RunscriptVisibility { - NORMAL("Normal", 1), MINIMIZED("Minimiert", 2), HIDDEN("Versteckt", 0); + NORMAL(I18n.CONFIGURATOR.getString("Startup.ScriptVisibility.normal"), 1), + MINIMIZED(I18n.CONFIGURATOR.getString("Startup.ScriptVisibility.minimized"), 2), + HIDDEN(I18n.CONFIGURATOR.getString("Startup.ScriptVisibility.hidden"), 0); public final String displayName; public final int value; @@ -504,7 +507,9 @@ enum RunscriptVisibility { } enum SoundState { - DEFAULT("Vorgabe des Pools", -1), MUTED("Stummschalten", 1), UNMUTED("Aktivieren", 0); + DEFAULT(I18n.CONFIGURATOR.getString("Startup.SoundState.default"), -1), + MUTED(I18n.CONFIGURATOR.getString("Startup.SoundState.muted"), 1), + UNMUTED(I18n.CONFIGURATOR.getString("Startup.SoundState.unmuted"), 0); public final String displayName; public final int value; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java index 7ef4a800..7de9459f 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java @@ -25,6 +25,7 @@ import org.openslx.dozmod.gui.control.table.ImageTable; import org.openslx.dozmod.gui.control.table.ListTable.ListModel; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.TextChangeListener; import org.openslx.dozmod.permissions.ImagePerms; import org.openslx.dozmod.thrift.Session; @@ -95,11 +96,11 @@ public class ImageListViewer extends QLabel { }; public static enum FilterType { - ALL("Alle anzeigen"), - OWN("Nur eigene/zugewiesene anzeigen"), - USABLE("Nur verwendbare/linkbare anzeigen"), - EDITABLE("Nur editierbare anzeigen"), - TEMPLATES("Nur Vorlagen zeigen"); + ALL(I18n.CONTROL.getString("ImageListViewer.FilterType.all")), + OWN(I18n.CONTROL.getString("ImageListViewer.FilterType.own")), + USABLE(I18n.CONTROL.getString("ImageListViewer.FilterType.usable")), + EDITABLE(I18n.CONTROL.getString("ImageListViewer.FilterType.editable")), + TEMPLATES(I18n.CONTROL.getString("ImageListViewer.FilterType.templates")); private final String name; @@ -121,7 +122,8 @@ public class ImageListViewer extends QLabel { // the panel for the table and search field // the search field and filter combo box JPanel filterPanel = new JPanel(); - filterPanel.setBorder(new TitledBorder("Suchen")); + filterPanel.setBorder(new TitledBorder( + I18n.CONTROL.getString("ImageListViewer.TitledBorder.filterPanel.title"))); filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.LINE_AXIS)); txtSearch = new JTextField(); cboFilter = new JComboBox<FilterType>(); @@ -134,7 +136,7 @@ public class ImageListViewer extends QLabel { // Panel for itemCount JPanel imageCountPanel = new JPanel(); imageCountLabel = new JLabel(); - imageCountPanel.add(new JLabel("Sichtbar:")); + imageCountPanel.add(new JLabel(I18n.CONTROL.getString("ImageListViewer.Label.imageCount.text"))); imageCountPanel.add(imageCountLabel); filterPanel.add(imageCountPanel); grid.add(filterPanel).fill(true, false).expand(true, false); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/PersonLabel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/PersonLabel.java index 7c53bf96..9148ea4b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/PersonLabel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/PersonLabel.java @@ -10,6 +10,7 @@ import javax.swing.UIManager; import org.openslx.bwlp.thrift.iface.UserInfo; import org.openslx.dozmod.gui.helper.ColorUtil; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.util.FormatHelper; import org.openslx.dozmod.util.DesktopEnvironment; @@ -73,7 +74,7 @@ public class PersonLabel extends QLabel { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); setForeground(UIManager.getColor("Label.foreground")); } else { - setToolTipText("Klicken, um eine Mail an diese Person zu senden"); + setToolTipText(I18n.CONTROL.getString("PersonLabel.Label.toolTipText")); setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); setForeground(linkColor); } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java index a2d99355..c539c751 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java @@ -2,17 +2,23 @@ package org.openslx.dozmod.gui.control.table; import org.openslx.bwlp.thrift.iface.ImagePermissions; import org.openslx.dozmod.gui.control.table.ImagePermissionTable.UserImagePermissions; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.thrift.cache.UserCache; import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class ImagePermissionTable extends ListTable<UserImagePermissions> { - public static final ListTableColumn COL_USER = new ListTableColumn("Benutzer"); - public static final ListTableColumn COL_LINK = new ListTableColumn("Verlinken", Boolean.class); - public static final ListTableColumn COL_DOWNLOAD = new ListTableColumn("Download", Boolean.class); - public static final ListTableColumn COL_EDIT = new ListTableColumn("Bearbeiten", Boolean.class); - public static final ListTableColumn COL_ADMIN = new ListTableColumn("Admin", Boolean.class); + public static final ListTableColumn COL_USER = new ListTableColumn( + I18n.CONTROL.getString("ImagePermissionTable.ListTableColumn.user.colName")); + public static final ListTableColumn COL_LINK = new ListTableColumn( + I18n.CONTROL.getString("ImagePermissionTable.ListTableColumn.link.colName"), Boolean.class); + public static final ListTableColumn COL_DOWNLOAD = new ListTableColumn( + I18n.CONTROL.getString("ImagePermissionTable.ListTableColumn.download.colName"), Boolean.class); + public static final ListTableColumn COL_EDIT = new ListTableColumn( + I18n.CONTROL.getString("ImagePermissionTable.ListTableColumn.edit.colName"), Boolean.class); + public static final ListTableColumn COL_ADMIN = new ListTableColumn( + I18n.CONTROL.getString("ImagePermissionTable.ListTableColumn.admin.colName"), Boolean.class); public ImagePermissionTable() { super(COL_USER, COL_LINK, COL_DOWNLOAD, COL_EDIT, COL_ADMIN); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePublishedTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePublishedTable.java index c25748c1..49b125b8 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePublishedTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePublishedTable.java @@ -4,6 +4,7 @@ import java.util.Comparator; import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.bwlp.thrift.iface.UserInfo; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.thrift.Sorters; import org.openslx.dozmod.thrift.cache.MetaDataCache; import org.openslx.dozmod.thrift.cache.OrganizationCache; @@ -17,11 +18,17 @@ public class ImagePublishedTable extends ListTable<ImageSummaryRead> { // public static final ListTableColumn COL_USABLE = new ListTableColumn("Verwendbar", Boolean.class); // public static final ListTableColumn COL_SIZE = new ListTableColumn("Größe", Long.class); // public static final ListTableColumn COL_LASTCHANGE = new ListTableColumn("Geändert", Long.class); - public static final ListTableColumn COL_NAME = new ListTableColumn("Name"); - public static final ListTableColumn COL_OS = new ListTableColumn("OS", Integer.class, Sorters.osNameById); - public static final ListTableColumn COL_OWNER = new ListTableColumn("Besitzer", Sorters.userNameById); - public static final ListTableColumn COL_UPLOADER = new ListTableColumn("Hochgeladen von", Sorters.userNameById); - public static final ListTableColumn COL_ORG = new ListTableColumn("Organisation"); + public static final ListTableColumn COL_NAME = new ListTableColumn( + I18n.CONTROL.getString("ImagePublishedTable.ListTableColumn.name.colName")); + public static final ListTableColumn COL_OS = new ListTableColumn( + I18n.CONTROL.getString("ImagePublishedTable.ListTableColumn.OS.colName"), + Integer.class, Sorters.osNameById); + public static final ListTableColumn COL_OWNER = new ListTableColumn( + I18n.CONTROL.getString("ImagePublishedTable.ListTableColumn.owner.colName"), Sorters.userNameById); + public static final ListTableColumn COL_UPLOADER = new ListTableColumn( + I18n.CONTROL.getString("ImagePublishedTable.ListTableColumn.uploader.colName"), Sorters.userNameById); + public static final ListTableColumn COL_ORG = new ListTableColumn( + I18n.CONTROL.getString("ImagePublishedTable.ListTableColumn.organization.colName")); public ImagePublishedTable() { super(new Comparator<ImageSummaryRead>() { diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java index 8829876c..9bf9b59e 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java @@ -6,6 +6,7 @@ import javax.swing.Icon; import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.thrift.Sorters; import org.openslx.dozmod.thrift.cache.MetaDataCache; import org.openslx.dozmod.thrift.cache.UserCache; @@ -14,17 +15,28 @@ import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class ImageTable extends ListTable<ImageSummaryRead> { - public static final ListTableColumn COL_TEMPLATE = new ListTableColumn("Vorlage", Boolean.class); - public static final ListTableColumn COL_USABLE = new ListTableColumn("Verwendbar", Boolean.class); - public static final ListTableColumn COL_SIZE = new ListTableColumn("Größe", Long.class); - public static final ListTableColumn COL_LASTCHANGE = new ListTableColumn("Geändert", Long.class); - public static final ListTableColumn COL_EXPIRING = new ListTableColumn("Ablaufdatum", Long.class); - public static final ListTableColumn COL_OWNER = new ListTableColumn("Besitzer", Sorters.userNameById); - public static final ListTableColumn COL_OS = new ListTableColumn("OS", Integer.class, Sorters.osNameById); - public static final ListTableColumn COL_NAME = new ListTableColumn("Name"); - public static final ListTableColumn COL_HYPERVISOR = new ListTableColumn("", Icon.class); - public static final ListTableColumn COL_VERSIONCOUNT = new ListTableColumn("Versionen", Integer.class); - public static final ListTableColumn COL_TOTALSIZE = new ListTableColumn("Gesamtgröße", Long.class); + public static final ListTableColumn COL_TEMPLATE = new ListTableColumn( + I18n.CONTROL.getString("ImageTable.ListTableColumn.template.colName"), Boolean.class); + public static final ListTableColumn COL_USABLE = new ListTableColumn( + I18n.CONTROL.getString("ImageTable.ListTableColumn.usable.colName"), Boolean.class); + public static final ListTableColumn COL_SIZE = new ListTableColumn( + I18n.CONTROL.getString("ImageTable.ListTableColumn.size.colName"), Long.class); + public static final ListTableColumn COL_LASTCHANGE = new ListTableColumn( + I18n.CONTROL.getString("ImageTable.ListTableColumn.lastChange.colName"), Long.class); + public static final ListTableColumn COL_EXPIRING = new ListTableColumn( + I18n.CONTROL.getString("ImageTable.ListTableColumn.expiring.colName"), Long.class); + public static final ListTableColumn COL_OWNER = new ListTableColumn( + I18n.CONTROL.getString("ImageTable.ListTableColumn.owner.colName"), Sorters.userNameById); + public static final ListTableColumn COL_OS = new ListTableColumn( + I18n.CONTROL.getString("ImageTable.ListTableColumn.OS.colName"), Integer.class, Sorters.osNameById); + public static final ListTableColumn COL_NAME = new ListTableColumn( + I18n.CONTROL.getString("ImageTable.ListTableColumn.name.colName")); + public static final ListTableColumn COL_HYPERVISOR = new ListTableColumn( + I18n.CONTROL.getString("ImageTable.ListTableColumn.hypervisor.colName"), Icon.class); + public static final ListTableColumn COL_VERSIONCOUNT = new ListTableColumn( + I18n.CONTROL.getString("ImageTable.ListTableColumn.versionCount.colName"), Integer.class); + public static final ListTableColumn COL_TOTALSIZE = new ListTableColumn( + I18n.CONTROL.getString("ImageTable.ListTableColumn.totalSize.colName"), Long.class); public ImageTable() { super(new Comparator<ImageSummaryRead>() { diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java index f69d3c47..ff783370 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java @@ -1,18 +1,25 @@ package org.openslx.dozmod.gui.control.table; import org.openslx.bwlp.thrift.iface.ImageVersionDetails; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.thrift.cache.UserCache; import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class ImageVersionTable extends ListTable<ImageVersionDetails> { - public static final ListTableColumn COL_CREATED = new ListTableColumn("Erstellungszeitpunkt", Long.class); - public static final ListTableColumn COL_EXPIRING = new ListTableColumn("Ablaufszeitpunkt", Long.class); - public static final ListTableColumn COL_UPLOADER = new ListTableColumn("Ersteller"); - public static final ListTableColumn COL_VALID = new ListTableColumn("Verwendbar", Boolean.class); - public static final ListTableColumn COL_SIZE = new ListTableColumn("Größe", Long.class); - public static final ListTableColumn COL_ID = new ListTableColumn("Interne ID"); + public static final ListTableColumn COL_CREATED = new ListTableColumn( + I18n.CONTROL.getString("ImageVersionTable.ListTableColumn.created.colName"), Long.class); + public static final ListTableColumn COL_EXPIRING = new ListTableColumn( + I18n.CONTROL.getString("ImageVersionTable.ListTableColumn.expiring.colName"), Long.class); + public static final ListTableColumn COL_UPLOADER = new ListTableColumn( + I18n.CONTROL.getString("ImageVersionTable.ListTableColumn.uploader.colName")); + public static final ListTableColumn COL_VALID = new ListTableColumn( + I18n.CONTROL.getString("ImageVersionTable.ListTableColumn.valid.colName"), Boolean.class); + public static final ListTableColumn COL_SIZE = new ListTableColumn( + I18n.CONTROL.getString("ImageVersionTable.ListTableColumn.size.colName"), Long.class); + public static final ListTableColumn COL_ID = new ListTableColumn( + I18n.CONTROL.getString("ImageVersionTable.ListTableColumn.ID.colName")); public ImageVersionTable() { super(COL_CREATED, COL_EXPIRING, COL_UPLOADER, COL_VALID, COL_SIZE, COL_ID); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureLdapFilterTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureLdapFilterTable.java index eb7b71dc..f037263e 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureLdapFilterTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureLdapFilterTable.java @@ -1,13 +1,17 @@ package org.openslx.dozmod.gui.control.table; import org.openslx.bwlp.thrift.iface.LdapFilter; +import org.openslx.dozmod.gui.helper.I18n; @SuppressWarnings("serial") public class LectureLdapFilterTable extends CheckListTable<LdapFilter> { - public static final ListTableColumn COL_TITLE = new ListTableColumn("Name"); - public static final ListTableColumn COL_ATTRIBUTE = new ListTableColumn("Attribut"); - public static final ListTableColumn COL_VALUE = new ListTableColumn("Wert"); + public static final ListTableColumn COL_TITLE = new ListTableColumn( + I18n.CONTROL.getString("LectureLdapFilterTable.ListTableColumn.title.colName")); + public static final ListTableColumn COL_ATTRIBUTE = new ListTableColumn( + I18n.CONTROL.getString("LectureLdapFilterTable.ListTableColumn.attribute.colName")); + public static final ListTableColumn COL_VALUE = new ListTableColumn( + I18n.CONTROL.getString("LectureLdapFilterTable.ListTableColumn.value.colName")); public LectureLdapFilterTable() { super(COL_TITLE, COL_ATTRIBUTE, COL_VALUE); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java index 9d8bd2a3..294123f8 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java @@ -2,15 +2,19 @@ package org.openslx.dozmod.gui.control.table; import org.openslx.bwlp.thrift.iface.LecturePermissions; import org.openslx.dozmod.gui.control.table.LecturePermissionTable.UserLecturePermissions; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.thrift.cache.UserCache; import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class LecturePermissionTable extends ListTable<UserLecturePermissions> { - public static final ListTableColumn COL_USER = new ListTableColumn("Benutzer"); - public static final ListTableColumn COL_EDIT = new ListTableColumn("Bearbeiten", Boolean.class); - public static final ListTableColumn COL_ADMIN = new ListTableColumn("Admin", Boolean.class); + public static final ListTableColumn COL_USER = new ListTableColumn( + I18n.CONTROL.getString("LecturePermissionTable.ListTableColumn.user.colName")); + public static final ListTableColumn COL_EDIT = new ListTableColumn( + I18n.CONTROL.getString("LecturePermissionTable.ListTableColumn.edit.colName"), Boolean.class); + public static final ListTableColumn COL_ADMIN = new ListTableColumn( + I18n.CONTROL.getString("LecturePermissionTable.ListTableColumn.admin.colName"), Boolean.class); public LecturePermissionTable() { super(COL_USER, COL_EDIT, COL_ADMIN); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java index 054e94fc..46cf9552 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java @@ -8,6 +8,7 @@ import javax.swing.UIManager; import org.openslx.bwlp.thrift.iface.LectureSummary; import org.openslx.dozmod.gui.helper.ColorUtil; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.thrift.Session; import org.openslx.dozmod.thrift.Sorters; import org.openslx.dozmod.thrift.cache.UserCache; @@ -16,12 +17,18 @@ import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class LectureTable extends ListTable<LectureSummary> { - public static final ListTableColumn COL_NAME = new ListTableColumn("Name"); - public static final ListTableColumn COL_OWNER = new ListTableColumn("Besitzer", Sorters.userNameById); - public static final ListTableColumn COL_STARTTIME = new ListTableColumn("Startdatum", Long.class); - public static final ListTableColumn COL_ENDTIME = new ListTableColumn("Ablaufdatum", Long.class); - public static final ListTableColumn COL_ENABLED = new ListTableColumn("Aktiviert", Boolean.class); - public static final ListTableColumn COL_VALID = new ListTableColumn("VM gültig", Boolean.class); + public static final ListTableColumn COL_NAME = new ListTableColumn( + I18n.CONTROL.getString("LectureTable.ListTableColumn.name.colName")); + public static final ListTableColumn COL_OWNER = new ListTableColumn( + I18n.CONTROL.getString("LectureTable.ListTableColumn.owner.colName"), Sorters.userNameById); + public static final ListTableColumn COL_STARTTIME = new ListTableColumn( + I18n.CONTROL.getString("LectureTable.ListTableColumn.startTime.colName"), Long.class); + public static final ListTableColumn COL_ENDTIME = new ListTableColumn( + I18n.CONTROL.getString("LectureTable.ListTableColumn.endTime.colName"), Long.class); + public static final ListTableColumn COL_ENABLED = new ListTableColumn( + I18n.CONTROL.getString("LectureTable.ListTableColumn.enabled.colName"), Boolean.class); + public static final ListTableColumn COL_VALID = new ListTableColumn( + I18n.CONTROL.getString("LectureTable.ListTableColumn.valid.colName"), Boolean.class); private final Font boldFont; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/NetshareTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/NetshareTable.java index 30994eae..3eb56748 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/NetshareTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/NetshareTable.java @@ -3,19 +3,25 @@ package org.openslx.dozmod.gui.control.table; import org.openslx.bwlp.thrift.iface.NetShare; import org.openslx.bwlp.thrift.iface.NetShareAuth; import org.openslx.dozmod.gui.configurator.NetshareConfigurator; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.thrift.Sorters; import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class NetshareTable extends CheckListTable<NetShare> { - public static final ListTableColumn COL_NAME = new ListTableColumn("Name"); - public static final ListTableColumn COL_MOUNT = new ListTableColumn("Ziel"); - public static final ListTableColumn COL_PATH = new ListTableColumn("Pfad"); - public static final ListTableColumn COL_AUTH = new ListTableColumn("Authentifizierung", - Sorters.netShareAuth); - public static final ListTableColumn COL_USER = new ListTableColumn("Username"); - public static final ListTableColumn COL_PASSWORD = new ListTableColumn("Passwort"); + public static final ListTableColumn COL_NAME = new ListTableColumn( + I18n.CONTROL.getString("NetShareTable.ListTableColumn.name.colName")); + public static final ListTableColumn COL_MOUNT = new ListTableColumn( + I18n.CONTROL.getString("NetShareTable.ListTableColumn.mount.colName")); + public static final ListTableColumn COL_PATH = new ListTableColumn( + I18n.CONTROL.getString("NetShareTable.ListTableColumn.path.colName")); + public static final ListTableColumn COL_AUTH = new ListTableColumn( + I18n.CONTROL.getString("NetShareTable.ListTableColumn.auth.colName"), Sorters.netShareAuth); + public static final ListTableColumn COL_USER = new ListTableColumn( + I18n.CONTROL.getString("NetShareTable.ListTableColumn.user.colName")); + public static final ListTableColumn COL_PASSWORD = new ListTableColumn( + I18n.CONTROL.getString("NetShareTable.ListTableColumn.password.colName")); public NetshareTable() { super(COL_NAME, COL_PATH, COL_MOUNT, COL_AUTH, COL_USER, COL_PASSWORD); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java index b227916e..000384fa 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java @@ -1,13 +1,16 @@ package org.openslx.dozmod.gui.control.table; import org.openslx.bwlp.thrift.iface.UserInfo; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class UserTable extends ListTable<UserInfo> { - public static final ListTableColumn COL_NAME = new ListTableColumn("Name"); - public static final ListTableColumn COL_MAIL = new ListTableColumn("Mail"); + public static final ListTableColumn COL_NAME = new ListTableColumn( + I18n.CONTROL.getString("UserTable.ListTableColumn.name.colName")); + public static final ListTableColumn COL_MAIL = new ListTableColumn( + I18n.CONTROL.getString("UserTable.ListTableColumn.mail.colName")); public UserTable() { super(COL_NAME, COL_MAIL); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ExpiryDateChooser.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ExpiryDateChooser.java index d77e6f9a..855757f9 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ExpiryDateChooser.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ExpiryDateChooser.java @@ -58,11 +58,11 @@ class ExpiryDateChooserWindow extends JPanel { private final GridManager grdPane = new GridManager(pane, 3, true); private final JSlider sldDaysToExtend = new JSlider(JSlider.HORIZONTAL); private final QLabel lblNewDate = new QLabel(); - private final QLabel lblNewDateLabel = new QLabel("Neues Ablaufdatum: "); + private final QLabel lblNewDateLabel = new QLabel(I18n.HELPER.getString("ExpiryDateChooser.Label.newDate.text")); private final Component parent; public ExpiryDateChooserWindow(final Component parent) { this.parent = parent; - grdPane.add(new QLabel("Geben Sie ein um wieviele Tage diese Version(en) verlängert werden soll:"), 3) + grdPane.add(new QLabel(I18n.HELPER.getString("ExpiryDateChooser.Label.daysToExtend.text")), 3) .fill(true, true) .expand(true, true); grdPane.nextRow(); @@ -91,8 +91,8 @@ class ExpiryDateChooserWindow extends JPanel { } }); sldDaysToExtend.setValue(DEFAULT_EXTENSION_DURATION); - int ret = JOptionPane.showConfirmDialog(parent, pane, "Ablaufdatum verlängern", - JOptionPane.OK_CANCEL_OPTION); + int ret = JOptionPane.showConfirmDialog(parent, pane, + I18n.HELPER.getString("ExpiryDateChooser.ConfirmDialog.ret.title"), JOptionPane.OK_CANCEL_OPTION); if (ret != 0) return -1; return sldDaysToExtend.getValue(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/I18n.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/I18n.java new file mode 100644 index 00000000..b69aa8d6 --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/I18n.java @@ -0,0 +1,53 @@ +package org.openslx.dozmod.gui.helper; + +import org.apache.log4j.Logger; + +import java.text.MessageFormat; +import java.util.ResourceBundle; + +/** + * Helper enum for loading resource bundle files and getting values from them. + */ +public enum I18n { + ACTIVITY("activity"), + APP("app"), + CONFIGURATOR("configurator"), + CONTROL("control"), + HELPER("helper"), + GUI("gui"), + PAGE("page"), + PAGE_LAYOUT("page_layout"), + THRIFT("thrift"), + WINDOW("window"), + WINDOW_LAYOUT("window_layout"), + WIZARD("wizard"); + + /** + * Logger for this class + */ + private final static Logger LOGGER = Logger.getLogger(I18n.class); + + private final ResourceBundle resourceBundle; + + I18n(String bundleFilename) { + String baseName = "i18n." + bundleFilename; + resourceBundle = ResourceBundle.getBundle(baseName, new UTF8Control()); + } + + /** + * Returns i18n value for a given key and format the output at the appropriate places for (a) given parameter(s). + * If no key is found, return the key. + * @param key to get value + * @param params to get formatted output + * @return value represented by key or key on error + */ + public String getString(String key, Object... params) { + try { + String value = resourceBundle.getString(key); + return MessageFormat.format(value, params); + } catch (Exception e) { + LOGGER.error("Could not find a value for the given key: " + key); + return key; + } + } +}
\ No newline at end of file diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/Language.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/Language.java new file mode 100644 index 00000000..d038f292 --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/Language.java @@ -0,0 +1,18 @@ +package org.openslx.dozmod.gui.helper; + +/** + * List of available languages as an enum. + */ +public enum Language { + DE_DE(I18n.HELPER.getString("Language.german"), "de_DE"), + EN_US(I18n.HELPER.getString("Language.english"), "en_US"), + TR_TR(I18n.HELPER.getString("Language.turkish"), "tr_TR"); + + public final String displayName; + public final String value; + + Language(String name, String value) { + this.displayName = name; + this.value = value; + } +}
\ No newline at end of file diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/MessageType.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/MessageType.java index 4ac0fbc8..0e0d2dc8 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/MessageType.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/MessageType.java @@ -5,13 +5,13 @@ import javax.swing.JOptionPane; import org.apache.log4j.Level; public enum MessageType { - DEBUG(JOptionPane.INFORMATION_MESSAGE, -1, "Debug", Level.DEBUG), - INFO(JOptionPane.INFORMATION_MESSAGE, -1, "Hinweis", Level.INFO), - WARNING(JOptionPane.WARNING_MESSAGE, -1, "Warnung", Level.WARN), - WARNING_RETRY(JOptionPane.WARNING_MESSAGE, JOptionPane.OK_CANCEL_OPTION, "Fehler", Level.ERROR), - ERROR(JOptionPane.ERROR_MESSAGE, -1, "Fehler", Level.ERROR), - ERROR_RETRY(JOptionPane.ERROR_MESSAGE, JOptionPane.OK_CANCEL_OPTION, "Fehler", Level.ERROR), - QUESTION_YESNO(JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION, "Frage", Level.INFO); + DEBUG(JOptionPane.INFORMATION_MESSAGE, -1, I18n.HELPER.getString("MessageType.debug"), Level.DEBUG), + INFO(JOptionPane.INFORMATION_MESSAGE, -1, I18n.HELPER.getString("MessageType.info"), Level.INFO), + WARNING(JOptionPane.WARNING_MESSAGE, -1, I18n.HELPER.getString("MessageType.warning"), Level.WARN), + WARNING_RETRY(JOptionPane.WARNING_MESSAGE, JOptionPane.OK_CANCEL_OPTION, I18n.HELPER.getString("MessageType.warningRetry"), Level.ERROR), + ERROR(JOptionPane.ERROR_MESSAGE, -1, I18n.HELPER.getString("MessageType.error"), Level.ERROR), + ERROR_RETRY(JOptionPane.ERROR_MESSAGE, JOptionPane.OK_CANCEL_OPTION, I18n.HELPER.getString("MessageType.errorRetry"), Level.ERROR), + QUESTION_YESNO(JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION, I18n.HELPER.getString("MessageType.questionYesNo"), Level.INFO); public final String title; public final int optionPaneId; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/UTF8Control.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/UTF8Control.java new file mode 100644 index 00000000..2f759323 --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/UTF8Control.java @@ -0,0 +1,54 @@ +package org.openslx.dozmod.gui.helper; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.StandardCharsets; +import java.util.Locale; +import java.util.PropertyResourceBundle; +import java.util.ResourceBundle; + +/** + * Custom ResourceBundle.Control class to read properties files as UTF-8, where usually ISO-8859-1 is default. + */ +public class UTF8Control extends ResourceBundle.Control { + + @Override + public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) + throws IllegalAccessException, InstantiationException, IOException { + if (!format.equals("java.properties")) { + return super.newBundle(baseName, locale, format, loader, reload); + } + + String bundleName = toBundleName(baseName, locale); + String resourceName = toResourceName(bundleName, "properties"); + + ResourceBundle bundle = null; + InputStream stream = null; + + if (reload) { + URL url = loader.getResource(resourceName); + if (url != null) { + URLConnection connection = url.openConnection(); + if (connection != null) { + connection.setUseCaches(false); + stream = connection.getInputStream(); + } + } + } else { + stream = loader.getResourceAsStream(resourceName); + } + + if (stream != null) { + try { + bundle = new PropertyResourceBundle(new InputStreamReader(stream, StandardCharsets.UTF_8)); + } finally { + stream.close(); + } + } + + return bundle; + } +}
\ No newline at end of file diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/BwIdmLinkWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/BwIdmLinkWindow.java index d24378ab..04fc2beb 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/BwIdmLinkWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/BwIdmLinkWindow.java @@ -21,6 +21,7 @@ import org.openslx.dozmod.Branding; import org.openslx.dozmod.authentication.ShibbolethEcp; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.util.DesktopEnvironment; @@ -29,11 +30,6 @@ import org.openslx.dozmod.util.DesktopEnvironment; */ @SuppressWarnings("serial") public class BwIdmLinkWindow extends JDialog implements UiFeedback { - private static final String title = "Registrierung erforderlich"; - private static final String infoText = "<html><body style='width:100%'>" - + "Sie sind nicht bei " + Branding.getServiceName() + " registriert. " - + "Bitte rufen Sie die angegebene Seite auf um sich zu registrieren und versuchen Sie es erneut." - + "</body></html>"; protected JButton btnLink; protected JButton OkButton; @@ -44,8 +40,8 @@ public class BwIdmLinkWindow extends JDialog implements UiFeedback { * Don't use this, use static function open instead! */ public BwIdmLinkWindow(Frame modalParent) { - super(modalParent, title, modalParent != null ? ModalityType.APPLICATION_MODAL - : ModalityType.MODELESS); + super(modalParent, I18n.WINDOW.getString("BwIdmLink.Dialog.title"), + modalParent != null ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS); final BwIdmLinkWindow me = this; setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); @@ -57,13 +53,13 @@ public class BwIdmLinkWindow extends JDialog implements UiFeedback { GridManager grid = new GridManager(contentPanel, 1); // infotext - JLabel infoLabel = new JLabel(infoText); - infoLabel.setBorder(BorderFactory.createTitledBorder("Hinweis")); + JLabel infoLabel = new JLabel(I18n.WINDOW.getString("BwIdmLink.Label.info.text", Branding.getServiceName())); + infoLabel.setBorder(BorderFactory.createTitledBorder(I18n.WINDOW.getString("BwIdmLink.Label.info.title"))); grid.add(infoLabel).fill(true, true).expand(true, true).anchor(GridBagConstraints.CENTER); grid.nextRow(); // button for opening the link - btnLink = new JButton("Seite im Browser öffnen"); + btnLink = new JButton(I18n.WINDOW.getString("BwIdmLink.Button.link.text")); btnLink.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -92,7 +88,7 @@ public class BwIdmLinkWindow extends JDialog implements UiFeedback { bottomPane.add(Box.createHorizontalGlue()); // close/ok button - OkButton = new JButton("Schließen"); + OkButton = new JButton(I18n.WINDOW.getString("BwIdmLink.Button.ok.text")); OkButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ConfigWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ConfigWindow.java index c8c0d9d0..15d26b92 100755 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ConfigWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ConfigWindow.java @@ -18,6 +18,8 @@ import org.openslx.dozmod.Config; import org.openslx.dozmod.Config.ProxyMode; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; +import org.openslx.dozmod.gui.helper.I18n; +import org.openslx.dozmod.gui.helper.Language; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.gui.window.layout.ConfigWindowLayout; @@ -66,7 +68,7 @@ public class ConfigWindow extends ConfigWindowLayout implements UiFeedback, Acti chkSendMeMail.setSelected(false); } chkSendMeMail.addActionListener(this); - lblYourAddress.setText("Ihre Adresse ist " + Session.getEMail()); + lblYourAddress.setText(I18n.WINDOW.getString("Config.Label.yourAddress.text", Session.getEMail())); } // -- END USER CONFIG -- @@ -112,6 +114,15 @@ public class ConfigWindow extends ConfigWindowLayout implements UiFeedback, Acti sldConnections.setValue(Config.getTransferConnectionCount()); sldConnections.addChangeListener(changeListener); + // Language + for (Language language : Language.values()) { + if (language.value.equals(Config.getPreferredLanguage())) { + cboLanguage.setSelectedItem(language); + break; + } + } + cboLanguage.addActionListener(this); + // -- BOTTOM BUTTONS -- btnSave.addActionListener(this); btnClose.addActionListener(this); @@ -123,7 +134,7 @@ public class ConfigWindow extends ConfigWindowLayout implements UiFeedback, Acti public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == btnProxyAuto || source == btnProxyHttp || source == btnProxyNone - || source == btnProxySocks || source == chkSendMeMail) { + || source == btnProxySocks || source == chkSendMeMail || source == cboLanguage) { reactToInput(); } if (source == btnSave) { @@ -140,6 +151,7 @@ public class ConfigWindow extends ConfigWindowLayout implements UiFeedback, Acti // first check our initial state ProxyMode initMode = Config.getProxyMode(); int fontScaling = Config.getFontScaling(); + Language newLanguage = (Language)cboLanguage.getSelectedItem(); // now check if the buttons represent another state if (btnProxyNone.isSelected() && initMode != ProxyMode.NONE) { @@ -154,6 +166,8 @@ public class ConfigWindow extends ConfigWindowLayout implements UiFeedback, Acti changed = true; } else if (!selectedLookAndFeel.getToolTipText().equals(Config.getLookAndFeel())) { changed = true; + } else if (!newLanguage.value.equals(Config.getPreferredLanguage())) { + changed = true; } // en/disable the save button @@ -167,7 +181,7 @@ public class ConfigWindow extends ConfigWindowLayout implements UiFeedback, Acti userConfig = ThriftManager.getSatClient().getUserConfig(Session.getSatelliteToken()); } catch (TException e) { ThriftError.showMessage(this, LOGGER, e, - "Konnte die benutzerspezifische Konfiguration nicht vom Satelliten holen"); + I18n.WINDOW.getString("Config.Message.error.couldNotGetUserConfFromSat")); } return userConfig; } @@ -181,7 +195,7 @@ public class ConfigWindow extends ConfigWindowLayout implements UiFeedback, Acti userConfig = config; } catch (TException e) { ThriftError.showMessage(this, LOGGER, e, - "Konnte die benutzerspezifische Konfiguration nicht auf dem Satelliten speichern"); + I18n.WINDOW.getString("Config.Message.error.couldNotSaveUserConfOnSat")); return false; } return true; @@ -221,9 +235,14 @@ public class ConfigWindow extends ConfigWindowLayout implements UiFeedback, Acti Config.setLookAndFeel(selectedLookAndFeel.getToolTipText()); } + // save language + Language newLanguage = (Language)cboLanguage.getSelectedItem(); + restartRequired = restartRequired || !newLanguage.value.equals(Config.getPreferredLanguage()); + Config.setPreferredLanguage(newLanguage.value); + if (restartRequired) { // let the user know he needs to restart for the changes to apply - Gui.showMessageBox(this, "Die Änderungen werden erst nach einem Programmneustart wirksam.", + Gui.showMessageBox(this, I18n.WINDOW.getString("Config.Message.info.restartNeededToApplyChanges"), MessageType.INFO, null, null); } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/GenericNoticeWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/GenericNoticeWindow.java index 94492d7f..09b22948 100755 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/GenericNoticeWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/GenericNoticeWindow.java @@ -13,6 +13,7 @@ import javax.swing.JScrollBar; import org.apache.log4j.Logger; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.gui.window.layout.GenericNoticeWindowLayout; @@ -50,7 +51,7 @@ public abstract class GenericNoticeWindow extends GenericNoticeWindowLayout impl }); if (!shouldBeShown) { chkAgreeBox.setVisible(false); - btnContinue.setText("Schließen"); + btnContinue.setText(I18n.WINDOW.getString("GenericNotice.Button.continue.text")); btnContinue.setEnabled(true); } else { disclaimerPanel.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() { @@ -86,10 +87,8 @@ public abstract class GenericNoticeWindow extends GenericNoticeWindowLayout impl */ private void closeWindow() { if (shouldBeShown) { - if (Gui.showMessageBox(me, - "Wenn diesen rechtlichen Hinweis nicht akzeptieren, können Sie die Software nicht verwenden! " - + "Sind Sie sicher, dass sie abbrechen wollen?", MessageType.QUESTION_YESNO, - LOGGER, null)) { + if (Gui.showMessageBox(me, I18n.WINDOW.getString("GenericNotice.Message.yesNo.closeWindow"), + MessageType.QUESTION_YESNO, LOGGER, null)) { System.exit(ABORT); } } else { diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java index b6cb1050..35399d32 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java @@ -112,11 +112,11 @@ import org.openslx.util.Util; /** * Popup menu items */ - private final JMenuItem mnuNewLecture = new JMenuItem("Neue Veranstaltung"); - private final JMenuItem mnuDownload = new JMenuItem("Download"); - private final JMenuItem mnuVmConfig = new JMenuItem("VM-Konfiguration"); - private final JMenuItem mnuDelete = new JMenuItem("Löschen"); - private final JMenuItem mnuExtendExpiryDate = new JMenuItem("Ablaufzeitpunkt verlängern"); + private final JMenuItem mnuNewLecture = new JMenuItem(I18n.WINDOW.getString("ImageDetails.MenuItem.newLecture.text")); + private final JMenuItem mnuDownload = new JMenuItem(I18n.WINDOW.getString("ImageDetails.MenuItem.download.text")); + private final JMenuItem mnuVmConfig = new JMenuItem(I18n.WINDOW.getString("ImageDetails.MenuItem.vmConfig.text")); + private final JMenuItem mnuDelete = new JMenuItem(I18n.WINDOW.getString("ImageDetails.MenuItem.delete.text")); + private final JMenuItem mnuExtendExpiryDate = new JMenuItem(I18n.WINDOW.getString("ImageDetails.MenuItem.extendExpirationDate.text")); private DialogChangeMonitor changeMonitor; @@ -199,13 +199,13 @@ import org.openslx.util.Util; UserListWindow.open(me, new UserAddedCallback() { @Override public void userAdded(UserInfo user, UserListWindow window) { window.dispose(); - if (Gui.showMessageBox(me, "Sind Sie sicher, dass sie die Besitzerrechte an " - + "einen anderen Benutzer übertragen wollen?", MessageType.QUESTION_YESNO, - LOGGER, null)) + if (Gui.showMessageBox(me, + I18n.WINDOW.getString("ImageDetails.Message.yesNo.changeOwner"), + MessageType.QUESTION_YESNO, LOGGER, null)) setImageOwner(user); } - }, "Besitzer festlegen", image.ownerId); + }, I18n.WINDOW.getString("ImageDetails.Button.changeOwner.caption"), image.ownerId); } }); @@ -316,9 +316,10 @@ import org.openslx.util.Util; tblVersions.addMouseListener(ma); // add controls to change monitor to handle user actions - changeMonitor.add(txtTitle).addConstraint(new TextNotEmptyConstraint("Name darf nicht leer sein")); - changeMonitor.add(txtDescription) - .addConstraint(new TextNotEmptyConstraint("Beschreibung darf nicht leer sein")); + changeMonitor.add(txtTitle).addConstraint(new TextNotEmptyConstraint( + I18n.WINDOW.getString("ImageDetails.TextField.title.error"))); + changeMonitor.add(txtDescription).addConstraint(new TextNotEmptyConstraint( + I18n.WINDOW.getString("ImageDetails.TextField.description.error"))); changeMonitor.add(txtTags); changeMonitor.addFixedCombo(cboOperatingSystem, Comparators.operatingSystem) .addConstraint(new DialogChangeMonitor.ValidationConstraint<OperatingSystem>() { @@ -326,7 +327,7 @@ import org.openslx.util.Util; if (userInput != null && MetaDataCache.getOsById(userInput.osId) != null) // validating OS coming from the cache makes no sense? return null; - return "Ungültiges Betriebssystem ausgewählt!"; + return I18n.WINDOW.getString("ImageDetails.ComboBox.OS.error"); } }); changeMonitor.addFixedCombo(cboShareMode, null) @@ -334,7 +335,7 @@ import org.openslx.util.Util; public String checkStateValid(ShareMode userInput) { if (userInput != null) return null; - return "Ungültiges Betriebssystem ausgewählt!"; + return I18n.WINDOW.getString("ImageDetails.ComboBox.shareMode.error"); } }); changeMonitor.add(chkIsTemplate); @@ -392,8 +393,9 @@ import org.openslx.util.Util; Gui.asyncExec(new Runnable() { @Override public void run() { if (machineDescription == null) { - Gui.showMessageBox("Konnte VM-Konfiguration nicht abrufen.", MessageType.ERROR, - LOGGER, null); + Gui.showMessageBox( + I18n.WINDOW.getString("ImageDetails.Message.error.couldNotRetrieveVMConfig"), + MessageType.ERROR, LOGGER, null); return; } @@ -497,8 +499,9 @@ import org.openslx.util.Util; if (!actionHandler.setImageOwner(image.getImageBaseId(), user)) { return; } - Gui.showMessageBox(me, "Besitzrechte übertragen an " + FormatHelper.userName(user), MessageType.INFO, - null, null); + Gui.showMessageBox(me, + I18n.WINDOW.getString("ImageDetails.Message.info.setImageOwner", FormatHelper.userName(user)), + MessageType.INFO, null, null); makeEditable(false); refresh(); } @@ -510,13 +513,14 @@ import org.openslx.util.Util; private void uploadToMaster() { // 04.2018: bail if we the user tries to publish a non-vmware image. if (Session.hasFeature(Feature.MULTIPLE_HYPERVISORS) && !TConst.VIRT_VMWARE.equals(image.virtId)) { - Gui.showMessageBox(MetaDataCache.getVirtualizerById(image.virtId).virtName - + " ist derzeit nicht für den öffentlichen Austausch freigegeben.", MessageType.ERROR, - null, null); + Gui.showMessageBox( + I18n.WINDOW.getString("ImageDetails.Message.error.publishNonVMWareImage", + MetaDataCache.getVirtualizerById(image.virtId).virtName), + MessageType.ERROR, null, null); return; } if (changeMonitor.isCurrentlyModified()) { - if (Gui.showMessageBox("Sie haben unspeicherte Änderungen, wollen Sie diese erst speichern?", + if (Gui.showMessageBox(I18n.WINDOW.getString("ImageDetails.Message.yesNo.currentlyModified"), MessageType.QUESTION_YESNO, null, null)) { if (!saveChangesInternal()) { return; @@ -524,7 +528,7 @@ import org.openslx.util.Util; } } // let the user confirm or abort - if (!Gui.showMessageBox("Wollen Sie diese VM wirklich landesweit veröffentlichen?", + if (!Gui.showMessageBox(I18n.WINDOW.getString("ImageDetails.Message.yesNo.confirmOrAbort"), MessageType.QUESTION_YESNO, null, null)) return; // start upload to masterserver @@ -536,10 +540,8 @@ import org.openslx.util.Util; .publishImageVersion(Session.getSatelliteToken(), image.latestVersionId); } catch (TException e1) { ThriftError.showMessage(me, LOGGER, e1, - "Upload der VM auf den Masterserver fehlgeschlagen." - + " Prüfen Sie, ob Sie bei der Registrierung dem landesweiten VM-Austausch zugestimmt haben.\n" - + " Sie können dies hier überprüfen:\n" - + DesktopEnvironment.Link.REGISTER_BWIDM.uri.toString() + "\n\n"); + I18n.WINDOW.getString("ImageDetails.Message.error.uploadFailed", + DesktopEnvironment.Link.REGISTER_BWIDM.uri.toString())); return; } Gui.asyncExec(new Runnable() { @@ -547,10 +549,8 @@ import org.openslx.util.Util; MainWindow.addPassiveTransfer(transferId, image.imageName, true); // Inform user Gui.showMessageBox(ImageDetailsWindow.this, - "Die Übertragung läuft direkt zwischen Satellitenserver und" + " dem " - + Branding.getServiceName() + " Zentral-Server.\n" + "Wenn Sie die " - + Branding.getApplicationName() - + " schließen, wird der Transfer trotzdem" + "weiterlaufen.", + I18n.WINDOW.getString("ImageDetails.Message.info.passiveTransfer", + Branding.getServiceName(), Branding.getApplicationName()), MessageType.INFO, null, null); } }); @@ -603,7 +603,7 @@ import org.openslx.util.Util; LOGGER.info("Successfully saved new metadata"); } catch (TException e) { ThriftError.showMessage(me, LOGGER, e, - "Konnte aktualisierte Metadaten nicht an den Server übermitteln"); + I18n.WINDOW.getString("ImageDetails.Message.error.saveChangesInternal")); return false; } @@ -651,7 +651,7 @@ import org.openslx.util.Util; LOGGER.info("Successfully saved new custom permissions"); } catch (TException e) { ThriftError.showMessage(me, LOGGER, e, - "Konnte geänderte Berechtigungen nicht an den Server übermitteln"); + I18n.WINDOW.getString("ImageDetails.Message.error.saveCustomPermissions")); return false; } return true; @@ -664,7 +664,8 @@ import org.openslx.util.Util; */ private void performImageDownload(ImageVersionDetails selected) { if (selected.getVersionId() == null) { - Gui.showMessageBox(this, "Ausgewählte Version ist ungültig", MessageType.ERROR, null, null); + Gui.showMessageBox(this, I18n.WINDOW.getString("ImageDetails.Message.error.performImageDownload"), + MessageType.ERROR, null, null); return; } // using actionHandler here is not needed, as this ThriftAction works for downloads @@ -732,12 +733,12 @@ import org.openslx.util.Util; count++; } catch (TException e) { ThriftError.showMessage(this, LOGGER, e, - "Konnte Ablaufdatum der Version " + img.versionId + " nicht verlängern."); + I18n.WINDOW.getString("ImageDetails.Message.error.extendVersionExpiry", img.versionId)); } } if (count > 0) { - Gui.showMessageBox(this, "Erfolgreich verlängerte Abbilder: " + count, MessageType.INFO, null, - null); + Gui.showMessageBox(this, I18n.WINDOW.getString("ImageDetails.Message.info.extendVersionExpiry", count), + MessageType.INFO, null, null); refresh(); } } @@ -950,9 +951,9 @@ import org.openslx.util.Util; * confirmation if so */ private boolean safeClose() { - if (changeMonitor.isCurrentlyModified() && !Gui.showMessageBox(me, - "Änderungen werden verworfen, wollen Sie wirklich schließen?", MessageType.QUESTION_YESNO, - null, null)) + if (changeMonitor.isCurrentlyModified() + && !Gui.showMessageBox(me, I18n.WINDOW.getString("ImageDetails.Message.yesNo.safeClose"), + MessageType.QUESTION_YESNO, null, null)) return false; dispose(); return true; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java index 50034bf0..b2904280 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java @@ -24,6 +24,7 @@ import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; import org.openslx.dozmod.gui.control.table.ImageTable; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.PopupMenu; import org.openslx.dozmod.gui.window.ImageDetailsWindow.ImageUpdatedCallback; @@ -62,10 +63,10 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa /** * Popup menu items */ - private final JMenuItem popupItemNewLecture = new JMenuItem("Neue Veranstaltung"); - private final JMenuItem popupItemEdit = new JMenuItem("Detailansicht"); - private final JMenuItem popupItemDelete = new JMenuItem("Löschen"); - private final JMenuItem popupItemDownload = new JMenuItem("Download"); + private final JMenuItem popupItemNewLecture = new JMenuItem(I18n.WINDOW.getString("ImageList.MenuItem.newLecture.text")); + private final JMenuItem popupItemEdit = new JMenuItem(I18n.WINDOW.getString("ImageList.MenuItem.edit.text")); + private final JMenuItem popupItemDelete = new JMenuItem(I18n.WINDOW.getString("ImageList.MenuItem.delete.text")); + private final JMenuItem popupItemDownload = new JMenuItem(I18n.WINDOW.getString("ImageList.MenuItem.download.text")); /** * Constructor @@ -251,7 +252,7 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa if (image == null) return false; if (image.getLatestVersionId() == null) { - Gui.showMessageBox(me, "Die gewählte VM besitzt keine gültige Image-Version", + Gui.showMessageBox(me, I18n.WINDOW.getString("ImageList.Message.error.hasLatestVersion"), MessageType.ERROR, null, null); return false; } @@ -379,7 +380,7 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa } } if (failedToDeleteAll) { - Gui.showMessageBox("Folgende images konnten nicht gelöscht werden: " + builder.toString(), + Gui.showMessageBox(I18n.WINDOW.getString("ImageList.Message.info.deleteImages", builder.toString()), MessageType.INFO, LOGGER, null); } ctlImageListViewer.refreshList(deletedAtLeastOne, 1000); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImagePublishedWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImagePublishedWindow.java index b02b5cf7..079329c7 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImagePublishedWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImagePublishedWindow.java @@ -31,6 +31,7 @@ import org.openslx.dozmod.Branding; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; import org.openslx.dozmod.gui.control.table.ListTable.ListModel; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.TextChangeListener; import org.openslx.dozmod.gui.helper.UiFeedback; @@ -113,15 +114,14 @@ public class ImagePublishedWindow extends ImagePublishedWindowLayout implements transferToken = ThriftManager.getSatClient() .requestImageReplication(Session.getSatelliteToken(), item.latestVersionId); } catch (TException ex) { - ThriftError.showMessage(me, LOGGER, ex, "Could not start download"); + ThriftError.showMessage(me, LOGGER, ex, + I18n.WINDOW.getString("ImagePublished.Message.error.satDownload")); return; } MainWindow.addPassiveTransfer(transferToken, item.imageName, false); Gui.showMessageBox(ImagePublishedWindow.this, - "Die Übertragung läuft direkt zwischen Satellitenserver und" - + " dem " + Branding.getServiceName() + " Zentral-Server.\n" - + "Wenn Sie die " + Branding.getApplicationName() + " schließen, wird der Transfer trotzdem" - + "weiterlaufen.", + I18n.WINDOW.getString("ImagePublished.Message.info.satDownload", Branding.getServiceName(), + Branding.getApplicationName()), MessageType.INFO, null, null); } }); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureChangeImage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureChangeImage.java index a2654896..41532b6f 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureChangeImage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureChangeImage.java @@ -19,6 +19,7 @@ import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor; import org.openslx.dozmod.gui.changemonitor.GenericControlWindow; import org.openslx.dozmod.gui.control.table.ImageTable; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.gui.window.layout.LectureChangeImageLayout; @@ -78,10 +79,12 @@ public class LectureChangeImage extends LectureChangeImageLayout implements UiFe dispose(); } else { if (!image.isValid) { - Gui.showMessageBox(LectureChangeImage.this, "Ausgewählte VM ist ungültig!", MessageType.ERROR, - LOGGER, null); + Gui.showMessageBox(LectureChangeImage.this, + I18n.WINDOW.getString("LectureChangeImage.Message.error.imageInvalid"), + MessageType.ERROR, LOGGER, null); } else { - Gui.showMessageBox(LectureChangeImage.this, "Keine Rechte zum Verlinken auf die ausgewählte VM.", + Gui.showMessageBox(LectureChangeImage.this, + I18n.WINDOW.getString("LectureChangeImage.Message.error.canNotLinkToVM"), MessageType.ERROR, LOGGER, null); } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java index 19e30fff..62cf10cc 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java @@ -41,6 +41,7 @@ import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor.ValidationConstr import org.openslx.dozmod.gui.configurator.NetrulesConfigurator.StateWrapper; import org.openslx.dozmod.gui.configurator.StartupConfigurator.StartupSettings; import org.openslx.dozmod.gui.helper.DateTimeHelper; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.gui.window.UserListWindow.UserAddedCallback; @@ -149,7 +150,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements public String checkStateValid(ImageVersionDetails userInput) { if (userInput != null && userInput.isValid) return null; - return "Keine/Ungültige VM-Version ausgewählt"; + return I18n.WINDOW.getString("LectureDetails.ComboBox.versions.error"); } }); // Create constraint for date start/end @@ -162,9 +163,10 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements Date start = DateTimeHelper.getDateFrom(dtpStartDate, spnStartTime); Date end = DateTimeHelper.getDateFrom(dtpEndDate, spnEndTime); if (!end.after(start)) - return "Enddatum darf nicht vor dem Startdatum liegen"; + return I18n.WINDOW.getString("LectureDetails.Message.error.endAfterStart"); if (end.after(maxValidity)) - return "Enddatum liegt nach dem " + FormatHelper.shortDate(maxValidity); + return I18n.WINDOW.getString("LectureDetails.Message.error.endAfterMaxValidity", + FormatHelper.shortDate(maxValidity)); return null; } }; @@ -175,13 +177,16 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements changeMonitor.add(chkIsActive); changeMonitor.add(chkCustomPermAdmin); changeMonitor.add(chkCustomPermEdit); - changeMonitor.add(txtTitle).addConstraint(new TextNotEmptyConstraint("Veranstaltungsname darf nicht leer sein")); - changeMonitor.add(txtDescription).addConstraint(new TextNotEmptyConstraint("Beschreibung darf nicht leer sein")); + changeMonitor.add(txtTitle).addConstraint(new TextNotEmptyConstraint( + I18n.WINDOW.getString("LectureDetails.TextField.title.error"))); + changeMonitor.add(txtDescription).addConstraint(new TextNotEmptyConstraint( + I18n.WINDOW.getString("LectureDetails.TextField.description.error"))); changeMonitor.add(dtpEndDate).addConstraint(dateRangeValidator); changeMonitor.add(dtpStartDate).addConstraint(dateRangeValidator); changeMonitor.add(spnEndTime).addConstraint(dateRangeValidator); changeMonitor.add(spnStartTime).addConstraint(dateRangeValidator); - changeMonitor.add(ctlNetrulesConfigurator).addConstraint(new NotNullConstraint<StateWrapper>("Fehlerhafte Netzwerkregeln")); + changeMonitor.add(ctlNetrulesConfigurator).addConstraint(new NotNullConstraint<StateWrapper>( + I18n.WINDOW.getString("LectureDetails.NetRulesConfigurator.error"))); changeListenerPermissions = changeMonitor.add(ctlPermissionManager); ctlLocationSelector.addToChangeMonitor(changeMonitor); ctlRunscriptConfigurator.addToChangeMonitor(changeMonitor); @@ -252,12 +257,11 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements @Override public void userAdded(UserInfo user, UserListWindow window) { window.dispose(); - if (Gui.showMessageBox(me, "Sind Sie sicher, dass sie die Besitzerrechte an " - + "einen anderen Account übertragen wollen?", MessageType.QUESTION_YESNO, - LOGGER, null)) + if (Gui.showMessageBox(me, I18n.WINDOW.getString("LectureDetails.Message.yesNo.changeOwner"), + MessageType.QUESTION_YESNO, LOGGER, null)) setLectureOwner(user); } - }, "Besitzer festlegen", lecture.ownerId); + }, I18n.WINDOW.getString("LectureDetails.Button.changeOwner.caption"), lecture.ownerId); } }); @@ -386,7 +390,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements // now enable the tabs the user can see given its permissions toggleEditable(true); // and always switch to the "About" tab - pnlTabs.setSelectedIndex(pnlTabs.indexOfTab("Übersicht")); + pnlTabs.setSelectedIndex(pnlTabs.indexOfTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.info.title"))); setVisible(true); changeMonitor.reset(); } @@ -435,8 +439,9 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements return; } // success - Gui.showMessageBox(me, "Besitzrechte übertragen an " + FormatHelper.userName(user), MessageType.INFO, - null, null); + Gui.showMessageBox(me, + I18n.WINDOW.getString("LectureDetails.Message.info.setLectureOwner", FormatHelper.userName(user)), + MessageType.INFO, null, null); toggleEditable(false); String lectureId = lecture.getLectureId(); synchronized (me) { @@ -451,7 +456,8 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements */ private void performImageDownload() { if (image == null) { - Gui.showMessageBox(this, "VM ungültig.", MessageType.ERROR, null, null); + Gui.showMessageBox(this, I18n.WINDOW.getString("LectureDetails.Message.error.imageInvalid"), + MessageType.ERROR, null, null); return; } btnDownloadImage.setEnabled(false); @@ -459,7 +465,8 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements for (ImageVersionDetails version : image.versions) { if (version.versionId.equals(lecture.imageVersionId)) { if (!version.isValid) { - Gui.showMessageBox(this, "Ungültige VM-Version gewählt", MessageType.ERROR, null, null); + Gui.showMessageBox(this, I18n.WINDOW.getString("LectureDetails.Message.error.imageVersionInvalid"), + MessageType.ERROR, null, null); return; } versionSize = version.fileSize; @@ -467,8 +474,8 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements } } if (versionSize == 0) { - Gui.showMessageBox(this, "Fehler bei der Abfrage der Größe des VM-Abbildes.", MessageType.ERROR, null, - null); + Gui.showMessageBox(this, I18n.WINDOW.getString("LectureDetails.Message.error.imageVersionFileSizeInvalid"), + MessageType.ERROR, null, null); return; } ThriftActions.initDownload(JOptionPane.getFrameForComponent(this), lecture.imageVersionId, @@ -552,7 +559,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements LOGGER.info("Successfully saved new metadata"); } catch (TException e) { ThriftError.showMessage(JOptionPane.getFrameForComponent(this), LOGGER, e, - "Fehler beim Speichern der Veranstaltung!"); + I18n.WINDOW.getString("LectureDetails.Message.error.saveChangesInternal")); return false; } @@ -578,7 +585,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements return true; } catch (TException e) { ThriftError.showMessage(JOptionPane.getFrameForComponent(this), LOGGER, e, - "Fehler beim Übertragen der Berechtigungen!"); + I18n.WINDOW.getString("LectureDetails.Message.error.saveCustomPermissions")); } return false; } @@ -599,10 +606,9 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements // analyse time stuff to see if its valid if (end > start) return true; - String msg = "Start der Veranstaltung ist nach dem Enddatum!"; + String msg = I18n.WINDOW.getString("LectureDetails.Message.error.isPeriodValid"); if (feedback) { - Gui.showMessageBox(me, msg, MessageType.ERROR, - LOGGER, null); + Gui.showMessageBox(me, msg, MessageType.ERROR, LOGGER, null); } lblError.setText(msg); return false; @@ -683,7 +689,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements */ private void safeClose() { if (changeMonitor.isCurrentlyModified() - && !Gui.showMessageBox(me, "Änderungen werden verworfen, wollen Sie wirklich schließen?", + && !Gui.showMessageBox(me, I18n.WINDOW.getString("LectureDetails.Message.yesNo.safeClose"), MessageType.QUESTION_YESNO, null, null)) return; synchronized(me) { diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java index 31ff7702..b89de75a 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java @@ -35,6 +35,7 @@ import org.openslx.bwlp.thrift.iface.UserInfo; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; import org.openslx.dozmod.gui.control.table.ListTable.ListModel; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.PopupMenu; import org.openslx.dozmod.gui.helper.TextChangeListener; @@ -65,32 +66,32 @@ public class LectureListWindow extends LectureListWindowLayout { // Filter types as an enum public enum FilterType { - ALL("Alle anzeigen", null), - OWN("Nur eigene/zugewiesene anzeigen", new RowFilter<ListModel<LectureSummary>, Integer>() { + ALL(I18n.WINDOW.getString("LectureList.FilterType.all"), null), + OWN(I18n.WINDOW.getString("LectureList.FilterType.own"), new RowFilter<ListModel<LectureSummary>, Integer>() { public boolean include(Entry<? extends ListModel<LectureSummary>, ? extends Integer> entry) { LectureSummary lecture = entry.getModel().getModelRow(entry.getIdentifier()); return lecture.userPermissions.admin || lecture.ownerId.equals(Session.getUserId()); } }), - ACTIVE("Nur aktive anzeigen", new RowFilter<ListModel<LectureSummary>, Integer>() { + ACTIVE(I18n.WINDOW.getString("LectureList.FilterType.active"), new RowFilter<ListModel<LectureSummary>, Integer>() { public boolean include(Entry<? extends ListModel<LectureSummary>, ? extends Integer> entry) { LectureSummary lecture = entry.getModel().getModelRow(entry.getIdentifier()); return lecture.isEnabled && lecture.endTime > Util.unixTime(); } }), - EDITABLE("Nur editierbare anzeigen", new RowFilter<ListModel<LectureSummary>, Integer>() { + EDITABLE(I18n.WINDOW.getString("LectureList.FilterType.editable"), new RowFilter<ListModel<LectureSummary>, Integer>() { public boolean include(Entry<? extends ListModel<LectureSummary>, ? extends Integer> entry) { LectureSummary lecture = entry.getModel().getModelRow(entry.getIdentifier()); return LecturePerms.canEdit(lecture); } }), - EXPIRING("Bald auslaufende anzeigen", new RowFilter<ListModel<LectureSummary>, Integer>() { + EXPIRING(I18n.WINDOW.getString("LectureList.FilterType.expiring"), new RowFilter<ListModel<LectureSummary>, Integer>() { public boolean include(Entry<? extends ListModel<LectureSummary>, ? extends Integer> entry) { LectureSummary lecture = entry.getModel().getModelRow(entry.getIdentifier()); return Math.abs(lecture.endTime - Util.unixTime()) < 86400 * 7; } }), - EXAMS("Prüfungsveranstaltungen anzeigen", new RowFilter<ListModel<LectureSummary>, Integer>() { + EXAMS(I18n.WINDOW.getString("LectureList.FilterType.exams"), new RowFilter<ListModel<LectureSummary>, Integer>() { public boolean include(Entry<? extends ListModel<LectureSummary>, ? extends Integer> entry) { LectureSummary lecture = entry.getModel().getModelRow(entry.getIdentifier()); return lecture.isExam; @@ -135,11 +136,11 @@ public class LectureListWindow extends LectureListWindowLayout { /** * Popup menu items */ - private JMenuItem popupItemNew = new JMenuItem("Neu"); - private JMenuItem popupItemEdit = new JMenuItem("Detailansicht"); - private JMenuItem popupItemLinked = new JMenuItem("VM-Details anzeigen"); - private JMenuItem popupItemDownload = new JMenuItem("Verlinkte VM herunterladen"); - private JMenuItem popupItemDelete = new JMenuItem("Löschen"); + private JMenuItem popupItemNew = new JMenuItem(I18n.WINDOW.getString("LectureList.MenuItem.new.text")); + private JMenuItem popupItemEdit = new JMenuItem(I18n.WINDOW.getString("LectureList.MenuItem.edit.text")); + private JMenuItem popupItemLinked = new JMenuItem(I18n.WINDOW.getString("LectureList.MenuItem.linked.text")); + private JMenuItem popupItemDownload = new JMenuItem(I18n.WINDOW.getString("LectureList.MenuItem.download.text")); + private JMenuItem popupItemDelete = new JMenuItem(I18n.WINDOW.getString("LectureList.MenuItem.delete.text")); public LectureListWindow() { super(); @@ -212,8 +213,7 @@ public class LectureListWindow extends LectureListWindowLayout { if (lecture == null) return; if (e.getSource().equals(popupItemNew)) { - if (Gui.showMessageBox(me, "Um eine Veranstaltung zu erstellen, " - + "müssen Sie eine VM auswählen. Zur VM-Auswahl wechseln?", + if (Gui.showMessageBox(me, I18n.WINDOW.getString("LectureList.Message.yesNo.switchView"), MessageType.QUESTION_YESNO, LOGGER, null)) { MainWindow.showPage(ImageListWindow.class); } @@ -263,7 +263,8 @@ public class LectureListWindow extends LectureListWindowLayout { public void mouseClicked(MouseEvent e) { if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) { if (!Session.canListImages()) { - Gui.showMessageBox("Ihnen fehlen die benötigten Berechtigungen.", MessageType.ERROR, LOGGER, null); + Gui.showMessageBox(I18n.WINDOW.getString("LectureList.Message.error.canNotListImages"), + MessageType.ERROR, LOGGER, null); return; } openLectureDetails(tblLectures.getSelectedItem()); @@ -402,12 +403,13 @@ public class LectureListWindow extends LectureListWindowLayout { for (LectureSummary lecture : fLectures.keySet()) { builder.append("\n\n"); builder.append(lecture.lectureName + " \n" ); - builder.append("Begründung: " + fLectures.get(lecture).getLocalizedMessage()); + builder.append(I18n.WINDOW.getString("LectureList.Message.error.deleteLecture", + fLectures.get(lecture).getLocalizedMessage())); LOGGER.error("Couldn't delete lecture " + lecture.lectureName + ", reason:", fLectures.get(lecture) ); // TODO Should the exception be printed in the debugger or is this to much information? } - Gui.showMessageBox("Folgende Veranstaltungen konnten nicht gelöscht werden: " - + builder.toString(), MessageType.INFO, LOGGER, null); + Gui.showMessageBox(I18n.WINDOW.getString("LectureList.Message.info.deleteLectures", + builder.toString()), MessageType.INFO, LOGGER, null); } } }); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LocationSelectionWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LocationSelectionWindow.java index bf818cf5..b8eb653d 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LocationSelectionWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LocationSelectionWindow.java @@ -9,6 +9,7 @@ import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.Gui.GuiCallable; import org.openslx.dozmod.gui.control.JCheckBoxTree.CheckChangeEvent; import org.openslx.dozmod.gui.control.JCheckBoxTree.CheckChangeEventListener; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.gui.window.layout.LocationSelectionWindowLayout; @@ -56,7 +57,7 @@ public class LocationSelectionWindow extends LocationSelectionWindowLayout imple if (tempIntList != null && tempIntList.size() > Session.getSatelliteConfig().maxLocationsPerLecture) { ctlLocationSelector.setSelectedLocationsAsIds(tempIntList); - Gui.showMessageBox("Bitten reduzieren Sie die Anzahl gewählter Orte", + Gui.showMessageBox(I18n.WINDOW.getString("LocationSelection.Message.warning.saveChanges"), MessageType.WARNING, null, null); return; } @@ -73,7 +74,7 @@ public class LocationSelectionWindow extends LocationSelectionWindowLayout imple if (tempIntList != null) { if (tempIntList.size() > Session.getSatelliteConfig().maxLocationsPerLecture) { // add error - lblError.setText("Zu viele Orte ausgewählt!"); + lblError.setText(I18n.WINDOW.getString("LocationSelection.Message.error.locationSelector")); } else { lblError.setText(""); } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java index a6601ea7..94ee10e4 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java @@ -36,6 +36,7 @@ import org.openslx.dozmod.authentication.TestAccountAuthenticator; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; import org.openslx.dozmod.gui.activity.UpdatePanel; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.TextChangeListener; import org.openslx.dozmod.gui.window.layout.LoginWindowLayout; @@ -74,9 +75,6 @@ public class LoginWindow extends LoginWindowLayout { // authentication method to use for login attempts protected LoginType loginType = null; - // text constants - private final String NO_USERNAME = "Kein Benutzername angegeben!"; - private final String NO_PASSWORD = "Kein Passwort angegeben!"; private boolean forceCustomSatellite = false; @@ -298,12 +296,12 @@ public class LoginWindow extends LoginWindowLayout { private void doLogin() { // sanity check on loginType. if (loginType == null) { - Gui.showMessageBox(this, "Bitte wählen Sie eine Authentifizierungsart.", MessageType.ERROR, - LOGGER, null); + Gui.showMessageBox(this, I18n.WINDOW.getString("Login.Message.error.noLoginType"), + MessageType.ERROR, LOGGER, null); return; } if (loginType == LoginType.ECP && cboOrganization.getSelectedIndex() == -1) { - Gui.showMessageBox(this, "Bitte wählen Sie ihre Organisation als 'Identity Provider'.", + Gui.showMessageBox(this, I18n.WINDOW.getString("Login.Message.error.noOrganization"), MessageType.ERROR, LOGGER, null); cboOrganization.requestFocusInWindow(); return; @@ -313,11 +311,11 @@ public class LoginWindow extends LoginWindowLayout { final String password = String.copyValueOf(txtPassword.getPassword()); // login clicked, lets first read the fields if (username.isEmpty()) { - Gui.showMessageBox(this, NO_USERNAME, MessageType.ERROR, LOGGER, null); + Gui.showMessageBox(this, I18n.WINDOW.getString("Login.Message.error.noUsername"), MessageType.ERROR, LOGGER, null); return; } if (password.isEmpty()) { - Gui.showMessageBox(this, NO_PASSWORD, MessageType.ERROR, LOGGER, null); + Gui.showMessageBox(this, I18n.WINDOW.getString("Login.Message.error.noPassword"), MessageType.ERROR, LOGGER, null); return; } @@ -342,30 +340,32 @@ public class LoginWindow extends LoginWindowLayout { }); return; case IDENTITY_PROVIDER_ERROR: - Gui.showMessageBox(me, "IdP Error", MessageType.ERROR, LOGGER, null); + Gui.showMessageBox(me, I18n.WINDOW.getString("Login.Message.error.authIdentityProvider"), + MessageType.ERROR, LOGGER, null); break; case SERVICE_PROVIDER_ERROR: // here if we have t != null then we have not received a token // if we have t, then the token is invalid. - Gui.showMessageBox(me, "Invalid token from the service provider!", MessageType.ERROR, - LOGGER, t); + Gui.showMessageBox(me, I18n.WINDOW.getString("Login.Message.error.authServiceProvider"), + MessageType.ERROR, LOGGER, t); break; case UNREGISTERED_ERROR: LOGGER.error("User not registered!"); BwIdmLinkWindow.open((JFrame) SwingUtilities.getWindowAncestor(me)); break; case INVALID_URL_ERROR: - Gui.showMessageBox(me, "ECP Authenticator says: Invalid URL.", MessageType.ERROR, LOGGER, - t); + Gui.showMessageBox(me, I18n.WINDOW.getString("Login.Message.error.authInvalidURL"), + MessageType.ERROR, LOGGER, t); break; case GENERIC_ERROR: default: if (t == null || !t.getClass().equals(RuntimeException.class)) { - Gui.showMessageBox(me, "Internal error!", MessageType.ERROR, null, t); + Gui.showMessageBox(me, I18n.WINDOW.getString("Login.Message.error.authInternal"), + MessageType.ERROR, null, t); } else { - Gui.showMessageBox(me, "Der Masterserver hat den Loginversuch mit der" - + " folgenden Nachricht abgewiesen:\n\n" - + t.getMessage(), MessageType.ERROR, null, null); + Gui.showMessageBox(me, + I18n.WINDOW.getString("Login.Message.error.authMasterServer", t.getMessage()), + MessageType.ERROR, null, null); } break; } @@ -383,10 +383,12 @@ public class LoginWindow extends LoginWindowLayout { authenticator = new TestAccountAuthenticator(); break; case DIRECT_CONNECT: - Gui.showMessageBox(this, "Not yet implemented", MessageType.ERROR, LOGGER, null); + Gui.showMessageBox(this, I18n.WINDOW.getString("Login.Message.error.loginTypeDirectConnect"), + MessageType.ERROR, LOGGER, null); return; default: - Gui.showMessageBox(this, "No login type selected!", MessageType.ERROR, LOGGER, null); + Gui.showMessageBox(this, I18n.WINDOW.getString("Login.Message.error.loginTypeDefault"), + MessageType.ERROR, LOGGER, null); return; } @@ -401,10 +403,11 @@ public class LoginWindow extends LoginWindowLayout { authenticator.login(finalUsername, password, authenticatorCallback); return; } catch (TException e) { - ThriftError.showMessage(LoginWindow.this, LOGGER, e, "Anmeldung fehlgeschlagen"); + ThriftError.showMessage(LoginWindow.this, LOGGER, e, + I18n.WINDOW.getString("Login.Message.error.loginFailed")); } catch (Exception e) { - Gui.showMessageBox(LoginWindow.this, "Anmeldung fehlgeschlagen", MessageType.ERROR, - LOGGER, e); + Gui.showMessageBox(LoginWindow.this, I18n.WINDOW.getString("Login.Message.error.loginFailed"), + MessageType.ERROR, LOGGER, e); } enableLogin(true); } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/SatelliteListWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/SatelliteListWindow.java index e3f68295..2674dc9a 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/SatelliteListWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/SatelliteListWindow.java @@ -17,6 +17,7 @@ import org.openslx.bwlp.thrift.iface.UserInfo; import org.openslx.dozmod.Config; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.Gui.GuiCallable; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.gui.window.layout.SatelliteListWindowLayout; @@ -108,7 +109,8 @@ public class SatelliteListWindow extends SatelliteListWindowLayout implements Ui } dispose(); } else { - Gui.showMessageBox(rootPane, "Kein Satellit ausgewählt", MessageType.ERROR, null, null); + Gui.showMessageBox(rootPane, I18n.WINDOW.getString("SatelliteList.Message.error.noSatellite"), + MessageType.ERROR, null, null); } } }); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtConfigEditorWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtConfigEditorWindow.java index 36bea427..cb207d34 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtConfigEditorWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtConfigEditorWindow.java @@ -15,6 +15,7 @@ import java.util.TreeSet; import org.apache.log4j.Logger; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.TextChangeListener; import org.openslx.dozmod.gui.helper.UiFeedback; @@ -115,13 +116,13 @@ public class VirtConfigEditorWindow extends VirtConfigEditorWindowLayout impleme if (!filteredSet.equals(unfilteredSet)) { unfilteredSet.removeAll(filteredSet); // not equals, means there was some invalid input - String errorText = "Invalide Eingaben:\n"; + String errorText = I18n.WINDOW.getString("VirtConfigEditor.Message.error.invalidInputTitle"); for (String s : unfilteredSet) { errorText += s + "\n"; } // TODO: Somehow this always triggers for vbox errorText += System.lineSeparator() - + "Wollen Sie trotzdem speichern? (Die invaliden Zeilen werden dabei automatisch gelöscht.)"; + + I18n.WINDOW.getString("VirtConfigEditor.Message.error.invalidInputText"); if (!Gui.showMessageBox(errorText, MessageType.ERROR_RETRY, LOGGER, null)) return; } @@ -163,7 +164,7 @@ public class VirtConfigEditorWindow extends VirtConfigEditorWindowLayout impleme private void safeClose() { if (originalMachineDescription.equals(pnlEditor.getText()) || Gui.showMessageBox(me, - "Ihre Änderungen, in diesem Fenster, werden verloren gehen, wollen Sie trotzdem abbrechen?", + I18n.WINDOW.getString("VirtConfigEditor.Message.yesNo.safeClose"), MessageType.QUESTION_YESNO, null, null)) dispose(); } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtDropDownConfigEditorWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtDropDownConfigEditorWindow.java index 072d648e..b6584b8e 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtDropDownConfigEditorWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtDropDownConfigEditorWindow.java @@ -9,6 +9,7 @@ import java.nio.ByteBuffer; import org.apache.log4j.Logger; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.gui.window.layout.VirtDropDownConfigEditorWindowLayout; @@ -187,8 +188,7 @@ public class VirtDropDownConfigEditorWindow extends VirtDropDownConfigEditorWind cboMaxUsbSpeed.setSelectedItem(usbSpeed); } catch (IllegalArgumentException e) { // TODO improve user message - Gui.showMessageBox("Sie haben beim letzten Konfigurieren \n" - + "einen falschen Eintrag eingespeichert. \n" + "Die VM wird nicht starten!", + Gui.showMessageBox(I18n.WINDOW.getString("VirtDropDownConfigEditor.Message.warning.initializeComboBoxes"), MessageType.WARNING, null, e); } } @@ -220,7 +220,7 @@ public class VirtDropDownConfigEditorWindow extends VirtDropDownConfigEditorWind private void safeClose() { if (!hasChanged() || Gui.showMessageBox(me, - "Wollen Sie wirklich abbrechen?\n" + "Ihre Änderungen werden verworfen.", + I18n.WINDOW.getString("VirtDropDownConfigEditor.Message.yesNo.safeClose"), MessageType.QUESTION_YESNO, null, null)) { dispose(); } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/CheckUpdateWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/CheckUpdateWindowLayout.java index 8667c944..017194b5 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/CheckUpdateWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/CheckUpdateWindowLayout.java @@ -15,14 +15,11 @@ import javax.swing.JTextArea; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; @SuppressWarnings("serial") public abstract class CheckUpdateWindowLayout extends JDialog { - private final static String title = "Version"; - private final static String noticeLabel = "Update"; - private final static String closeButtonLabel = "Schließen"; - protected static JButton btnLink; protected static JButton btnClose; @@ -34,8 +31,8 @@ public abstract class CheckUpdateWindowLayout extends JDialog { protected final JTextArea txtChangelog; public CheckUpdateWindowLayout(Window modalParent) { - super(modalParent, title, modalParent != null ? ModalityType.APPLICATION_MODAL - : ModalityType.MODELESS); + super(modalParent, I18n.WINDOW_LAYOUT.getString("CheckUpdate.Dialog.title"), modalParent != null + ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS); setLayout(new BorderLayout()); setPreferredSize(Gui.getScaledDimension(680, 400)); @@ -47,13 +44,14 @@ public abstract class CheckUpdateWindowLayout extends JDialog { // information before the disclaimer JPanel infoPanel = new JPanel(); GridManager infoGrid = new GridManager(infoPanel, 4); - infoPanel.setBorder(BorderFactory.createTitledBorder(noticeLabel)); - infoGrid.add(new QLabel("Ihre Version")); + infoPanel.setBorder(BorderFactory.createTitledBorder( + I18n.WINDOW_LAYOUT.getString("CheckUpdate.TitledBorder.infoPanel.title"))); + infoGrid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("CheckUpdate.Label.localVersion.text"))); infoGrid.add(Box.createHorizontalStrut(10)); infoGrid.add(lblLocalVersion); infoGrid.add(Box.createHorizontalGlue()).fill(true, false).expand(true, false); infoGrid.nextRow(); - infoGrid.add(new QLabel("Aktuelle Version")); + infoGrid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("CheckUpdate.Label.remoteVersion.text"))); infoGrid.add(Box.createHorizontalStrut(10)); infoGrid.add(lblRemoteVersion); infoGrid.add(Box.createHorizontalGlue()).fill(true, false).expand(true, false); @@ -64,11 +62,12 @@ public abstract class CheckUpdateWindowLayout extends JDialog { txtChangelog.setWrapStyleWord(true); JScrollPane changelogPanel = new JScrollPane(txtChangelog, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - changelogPanel.setBorder(BorderFactory.createTitledBorder("Changelog")); + changelogPanel.setBorder(BorderFactory.createTitledBorder( + I18n.WINDOW_LAYOUT.getString("CheckUpdate.TitledBorder.changelogPanel.title"))); // checkbox for acknowledging the disclaimer - btnLink = new JButton("Zum Download-Portal"); - btnClose = new JButton(closeButtonLabel); + btnLink = new JButton(I18n.WINDOW_LAYOUT.getString("CheckUpdate.Button.link.text")); + btnClose = new JButton(I18n.WINDOW_LAYOUT.getString("CheckUpdate.Button.close.text")); JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS)); buttonPanel.add(Box.createHorizontalGlue()); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ConfigWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ConfigWindowLayout.java index bf37dc42..0dfe4c1e 100755 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ConfigWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ConfigWindowLayout.java @@ -4,32 +4,22 @@ import java.awt.BorderLayout; import java.awt.Insets; import java.awt.Window; -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.ButtonGroup; -import javax.swing.DefaultBoundedRangeModel; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JDialog; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.JSlider; -import javax.swing.UIManager; +import javax.swing.*; import javax.swing.UIManager.LookAndFeelInfo; import org.openslx.dozmod.Branding; import org.openslx.dozmod.Config; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.control.ComboBox; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.control.WordWrapLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; +import org.openslx.dozmod.gui.helper.Language; @SuppressWarnings("serial") public class ConfigWindowLayout extends JDialog { - private static String title = Branding.getApplicationName() + " - Konfiguration"; - protected final JRadioButton btnProxyNone; protected final JRadioButton btnProxyAuto; protected final JRadioButton btnProxySocks = null; @@ -40,12 +30,14 @@ public class ConfigWindowLayout extends JDialog { protected final JSlider sldConnections; protected ButtonGroup btnGroupLookAndFeel = null; + protected final ComboBox<Language> cboLanguage; + protected final JButton btnSave; protected final JButton btnClose; public ConfigWindowLayout(Window modalParent) { - super(modalParent, title, modalParent != null ? ModalityType.APPLICATION_MODAL - : ModalityType.MODELESS); + super(modalParent, I18n.WINDOW_LAYOUT.getString("Config.Dialog.title", Branding.getApplicationName()), + modalParent != null ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS); // regular layout as a helper for the whole page getContentPane().setLayout(new BorderLayout()); @@ -57,22 +49,21 @@ public class ConfigWindowLayout extends JDialog { GridManager grid = new GridManager(contentPanel, 1, false, new Insets(4, 3, 1, 3)); // mail config - grid.add(new WordWrapLabel("E-Mail-Benachrichtigungen", true, false)) + grid.add(new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("Config.Label.mailNotifications.text"), true, false)) .insets(headingInset) .expand(true, false) .fill(true, false); - chkSendMeMail = new JCheckBox("Über VM- und Veranstaltungsänderungen per E-Mail informiert werden"); + chkSendMeMail = new JCheckBox(I18n.WINDOW_LAYOUT.getString("Config.CheckBox.sendMeMail.text")); grid.add(chkSendMeMail).fill(true, false).expand(true, false); grid.add( - new WordWrapLabel("Für diese Option muss der Server" - + " für den Mailversand konfiguriert sein.", false, true)) + new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("Config.Label.sendMeMail.text"), false, true)) .expand(true, false) .fill(true, false); lblYourAddress = new QLabel(); grid.add(lblYourAddress).fill(true, false).expand(true, false); // proxy config - grid.add(new WordWrapLabel("Proxyserver", true, false)) + grid.add(new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("Config.Label.proxyConfig.text"), true, false)) .insets(headingInset) .fill(true, false) .expand(true, false); @@ -80,8 +71,8 @@ public class ConfigWindowLayout extends JDialog { radioGroupPanel.setLayout(new BoxLayout(radioGroupPanel, BoxLayout.LINE_AXIS)); // radio buttons ButtonGroup radioGroup = new ButtonGroup(); - btnProxyNone = new JRadioButton("Keinen Proxy verwenden"); - btnProxyAuto = new JRadioButton("Automatisch nach Proxy suchen"); + btnProxyNone = new JRadioButton(I18n.WINDOW_LAYOUT.getString("Config.RadioButton.proxyNone.text")); + btnProxyAuto = new JRadioButton(I18n.WINDOW_LAYOUT.getString("Config.RadioButton.proxyAuto.text")); radioGroup.add(btnProxyNone); radioGroup.add(btnProxyAuto); radioGroupPanel.add(btnProxyNone); @@ -89,12 +80,12 @@ public class ConfigWindowLayout extends JDialog { grid.add(radioGroupPanel).expand(true, false).fill(true, false); // font config - grid.add(new WordWrapLabel("Schriftgröße (%)", true, false)) + grid.add(new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("Config.Label.fontConfig.text"), true, false)) .insets(headingInset) .fill(true, false) .expand(true, false); grid.add( - new WordWrapLabel("Diese Funktion ist experimentell. Es kann zu Anzeigefehlern kommen.", + new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("Config.Label.fontConfigInfo.text"), false, true)) .expand(true, false) .fill(true, false); @@ -110,14 +101,12 @@ public class ConfigWindowLayout extends JDialog { grid.add(sldFontSize).fill(true, false).expand(true, false); // look and feel - grid.add(new WordWrapLabel("LookAndFeel", true, false)) + grid.add(new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("Config.Label.lookAndFeel.text"), + true, false)) .insets(headingInset) .fill(true, false) .expand(true, false); - grid.add( - new WordWrapLabel("Hier können Sie die Darstellung der Oberfläche zwischen unterschiedlichen" - + " 'LookAndFeels' umstellen.", - false, true)) + grid.add(new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("Config.Label.lookAndFeelInfo.text"), false, true)) .fill(true, false) .expand(true, false); JPanel lafGroupPanel = new JPanel(); @@ -133,16 +122,13 @@ public class ConfigWindowLayout extends JDialog { grid.add(lafGroupPanel).expand(true, false).fill(true, false); // Concurrent Connections - grid.add(new WordWrapLabel("Verbindungen pro Transfer", true, false)) + grid.add(new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("Config.Label.concurrentConnections.text"), + true, false)) .insets(headingInset) .fill(true, false) .expand(true, false); grid.add( - new WordWrapLabel("Im Normalfall werden beste Ergebnisse erzielt," - + " wenn die Einstellung auf 1 belassen wird. Falls die Übertragungsgeschwindigkeit" - + " ihre Netzwerkanbindung nicht auslastet, probieren Sie den nächsthöheren" - + " Wert. Zu hohe Werte können einen negativen Effekt auf die" - + " Übertragungsgeschwindigkeit haben, und belasten den Satellitenserver stärker.", + new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("Config.Label.concurrentConnectionsInfo.text"), false, true)) .fill(true, false) .expand(true, false); @@ -153,13 +139,33 @@ public class ConfigWindowLayout extends JDialog { sldConnections.setPaintLabels(true); grid.add(sldConnections).expand(true, false).fill(true, false); + // Language + grid.add(new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("Config.Label.language.text"), + true, false)) + .insets(headingInset) + .fill(true, false) + .expand(true, false); + grid.add( + new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("Config.Label.languageInfo.text"), + false, true)) + .fill(true, false) + .expand(true, false); + cboLanguage = new ComboBox<>(new ComboBox.ComboBoxRenderer<Language>() { + @Override + public String renderItem(Language item) { + return item.displayName; + } + }); + cboLanguage.setModel(new DefaultComboBoxModel<>(Language.values())); + grid.add(cboLanguage).fill(true, false).expand(true, false); + // Finish grid.finish(true); // bottom button panel JPanel buttonPanel = new JPanel(); - btnClose = new JButton("Schließen"); - btnSave = new JButton("Speichern"); + btnClose = new JButton(I18n.WINDOW_LAYOUT.getString("Config.Button.close.text")); + btnSave = new JButton(I18n.WINDOW_LAYOUT.getString("Config.Button.save.text")); buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS)); buttonPanel.add(Box.createGlue()); @@ -167,7 +173,7 @@ public class ConfigWindowLayout extends JDialog { buttonPanel.add(btnSave); getContentPane().add(buttonPanel, BorderLayout.PAGE_END); - setPreferredSize(Gui.getScaledDimension(500, 650)); + setPreferredSize(Gui.getScaledDimension(500, 700)); } -} +}
\ No newline at end of file diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/GenericNoticeWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/GenericNoticeWindowLayout.java index bd28189a..9bbce4f1 100755 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/GenericNoticeWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/GenericNoticeWindowLayout.java @@ -17,19 +17,18 @@ import org.openslx.dozmod.Branding; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; @SuppressWarnings("serial") public abstract class GenericNoticeWindowLayout extends JDialog { - protected String info = "Bitte lesen und bestätigen Sie folgende rechtliche Hinweise:"; + protected String info = I18n.WINDOW_LAYOUT.getString("GenericNotice.Label.noticePanel.text"); protected JTextArea notice; protected JScrollPane disclaimerPanel; - protected String checkboxText = "Ja, ich akzeptiere die Vereinbarung. Benachrichtigung nicht mehr anzeigen."; + protected String checkboxText = I18n.WINDOW_LAYOUT.getString("GenericNotice.CheckBox.agree.text"); private static String title = Branding.getApplicationName(); - private static String noticeLabel = "Hinweis"; - private static String continueButtonLabel = "Weiter"; // Buttons protected final JCheckBox chkAgreeBox; @@ -47,7 +46,8 @@ public abstract class GenericNoticeWindowLayout extends JDialog { // information before the notice QLabel noticePanel = new QLabel(); - noticePanel.setBorder(BorderFactory.createTitledBorder(noticeLabel)); + noticePanel.setBorder(BorderFactory.createTitledBorder( + I18n.WINDOW_LAYOUT.getString("GenericNotice.TitledBorder.noticePanel.title"))); noticePanel.setText(info); // the disclaimer text box with scrolling functionality @@ -67,7 +67,7 @@ public abstract class GenericNoticeWindowLayout extends JDialog { // spacer buttonPanel.add(Box.createHorizontalGlue()); // the continue button - btnContinue = new JButton(continueButtonLabel); + btnContinue = new JButton(I18n.WINDOW_LAYOUT.getString("GenericNotice.Button.continue.text")); btnContinue.setEnabled(false); buttonPanel.add(btnContinue); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java index c1df6867..e96345c0 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java @@ -28,6 +28,7 @@ import org.openslx.dozmod.gui.control.table.ContainerBindMountTable; import org.openslx.dozmod.gui.control.table.ImageVersionTable; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.thrifthelper.Comparators; @SuppressWarnings("serial") public abstract class ImageDetailsWindowLayout extends JDialog { @@ -81,9 +82,6 @@ import org.openslx.thrifthelper.Comparators; protected ImagePermissionConfigurator ctlImagePermissionConfigurator; - private static String infoTextDefPerms = "<html><body style='width:100%'>" - + "Hier können Sie Rechte für nicht in der Liste angegebene Nutzer festlegen:" + "</body></html>"; - public ImageDetailsWindowLayout(Frame modalParent) { super(modalParent, "<init>", ModalityType.APPLICATION_MODAL); setResizable(true); @@ -109,7 +107,8 @@ import org.openslx.thrifthelper.Comparators; txtDescription = new JTextArea(); txtDescription.setLineWrap(true); txtDescription.setWrapStyleWord(true); - grid.add(new QLabel("Beschreibung")).anchor = GridBagConstraints.FIRST_LINE_START; + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.description.text"))) + .anchor = GridBagConstraints.FIRST_LINE_START; JScrollPane jsp = new JScrollPane(txtDescription, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); jsp.setMinimumSize(Gui.getScaledDimension(0, 110)); @@ -119,27 +118,27 @@ import org.openslx.thrifthelper.Comparators; // owner lblOwner = new PersonLabel(); - btnChangeOwner = new JButton("Ändern"); - grid.add(new QLabel("Besitzer")); + btnChangeOwner = new JButton(I18n.WINDOW_LAYOUT.getString("ImageDetails.Button.changeOwner.text")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.owner.text"))); grid.add(lblOwner).expand(true, false); grid.add(btnChangeOwner).fill(true, false); grid.nextRow(); // creation time lblCreateTime = new QLabel(); - grid.add(new QLabel("Erstellt am")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.createTime.text"))); grid.add(lblCreateTime, 2); grid.nextRow(); // last updater lblUpdater = new PersonLabel(); - grid.add(new QLabel("Geändert durch")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.updater.text"))); grid.add(lblUpdater, 2); grid.nextRow(); // last updated lblUpdateTime = new QLabel(); - grid.add(new QLabel("Geändert am")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.updateTime.text"))); grid.add(lblUpdateTime, 2); grid.nextRow(); @@ -153,7 +152,7 @@ import org.openslx.thrifthelper.Comparators; }); cboOperatingSystem.setEditable(false); - grid.add(new QLabel("Betriebssystem")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.OS.text"))); grid.add(cboOperatingSystem, 2).expand(true, false).fill(true, false); grid.nextRow(); @@ -168,39 +167,40 @@ import org.openslx.thrifthelper.Comparators; return item.name(); } }); - grid.add(new QLabel("Freigabemodus")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.shareMode.text"))); grid.add(cboShareMode, 2).expand(true, false).fill(true, false); grid.nextRow(); // template - chkIsTemplate = new JCheckBox("Vorlage"); + chkIsTemplate = new JCheckBox(I18n.WINDOW_LAYOUT.getString("ImageDetails.CheckBox.isTemplate.text")); grid.add(Box.createGlue()); grid.add(chkIsTemplate, 2); grid.nextRow(); // version txtVersion = new JTextField(); - grid.add(new QLabel("Versions-ID")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.version.text"))); grid.add(txtVersion, 2).expand(true, false).fill(true, false); grid.nextRow(); // id txtId = new JTextField(); txtId.setEditable(false); - grid.add(new QLabel("VM-ID")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.ID.text"))); grid.add(txtId, 2).expand(true, false).fill(true, false); grid.nextRow(); // virtualizer lblVirtualizer = new QLabel(); - grid.add(new QLabel("Virtualisierer")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.virtualizer.text"))); grid.add(lblVirtualizer, 2).expand(true, false).fill(true, false); grid.nextRow(); - grid.add(new QLabel("Veranstaltungen")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.linkedLectureCount.text"))); lblLinkedLectureCount = new QLabel(); grid.add(lblLinkedLectureCount).expand(true, false); - btnShowLinkingLectures = new JButton("Anzeigen"); + btnShowLinkingLectures = new JButton( + I18n.WINDOW_LAYOUT.getString("ImageDetails.Button.showLinkingLectures.text")); grid.add(btnShowLinkingLectures).fill(true, false); grid.nextRow(); grid.add(Box.createVerticalGlue(), 3).expand(true, true).fill(true, true); @@ -209,11 +209,14 @@ import org.openslx.thrifthelper.Comparators; JPanel buttonBar = new JPanel(); BoxLayout buttons = new BoxLayout(buttonBar, BoxLayout.LINE_AXIS); buttonBar.setLayout(buttons); - btnUpdateImage = new JButton("Neue VM-Version hochladen", - Gui.getScaledIconResource("/img/upload-icon.png", "New VM", ICON_SIZE_Y, buttonBar)); + btnUpdateImage = new JButton(I18n.WINDOW_LAYOUT.getString("ImageDetails.Button.updateImage.text"), + Gui.getScaledIconResource("/img/upload-icon.png", + I18n.WINDOW_LAYOUT.getString("ImageDetails.Button.updateImage.description"), ICON_SIZE_Y, buttonBar)); buttonBar.add(btnUpdateImage); - btnUploadToMaster = new JButton("Landesweit veröffentlichen", - Gui.getScaledIconResource("/img/publish-icon.png", "Publish VM", ICON_SIZE_Y, buttonBar)); + btnUploadToMaster = new JButton(I18n.WINDOW_LAYOUT.getString("ImageDetails.Button.uploadToMaster.text"), + Gui.getScaledIconResource("/img/publish-icon.png", + I18n.WINDOW_LAYOUT.getString("ImageDetails.Button.uploadToMaster.description"), + ICON_SIZE_Y, buttonBar)); buttonBar.add(btnUploadToMaster); grid.add(buttonBar, 3).fill(true, false).expand(true, false); grid.nextRow(); @@ -246,9 +249,10 @@ import org.openslx.thrifthelper.Comparators; .expand(true, true); // Panel with the permissions for other users JPanel defaultPermissionPane = new JPanel(); - defaultPermissionPane.setBorder(BorderFactory.createTitledBorder("Andere Nutzer")); + defaultPermissionPane.setBorder(BorderFactory.createTitledBorder( + I18n.WINDOW_LAYOUT.getString("ImageDetails.TitledBorder.defaultPermissionPane.title"))); defaultPermissionPane.setLayout(new BoxLayout(defaultPermissionPane, BoxLayout.PAGE_AXIS)); - JLabel txtDefaultPerms = new JLabel(infoTextDefPerms); + JLabel txtDefaultPerms = new JLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.defaultPerms.text")); JPanel txtDefaultPermsPanel = new JPanel(); // Panel + BoxLayout + Label = wordwrap @@ -256,10 +260,10 @@ import org.openslx.thrifthelper.Comparators; txtDefaultPermsPanel.add(txtDefaultPerms); JPanel defaultPermsSubPanel = new JPanel(); defaultPermsSubPanel.setLayout(new BoxLayout(defaultPermsSubPanel, BoxLayout.LINE_AXIS)); - chkDefaultPermAdmin = new JCheckBox("Admin"); - chkDefaultPermDownload = new JCheckBox("Download"); - chkDefaultPermEdit = new JCheckBox("Bearbeiten"); - chkDefaultPermLink = new JCheckBox("Verlinken"); + chkDefaultPermAdmin = new JCheckBox(I18n.WINDOW_LAYOUT.getString("ImageDetails.CheckBox.permAdmin.text")); + chkDefaultPermDownload = new JCheckBox(I18n.WINDOW_LAYOUT.getString("ImageDetails.CheckBox.permDownload.text")); + chkDefaultPermEdit = new JCheckBox(I18n.WINDOW_LAYOUT.getString("ImageDetails.CheckBox.permEdit.text")); + chkDefaultPermLink = new JCheckBox(I18n.WINDOW_LAYOUT.getString("ImageDetails.CheckBox.permLink.text")); defaultPermsSubPanel.add(chkDefaultPermLink); defaultPermsSubPanel.add(chkDefaultPermDownload); @@ -327,8 +331,8 @@ import org.openslx.thrifthelper.Comparators; JPanel pnlButtons = new JPanel(); pnlButtons.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); pnlButtons.setLayout(new BoxLayout(pnlButtons, BoxLayout.LINE_AXIS)); - btnSaveChanges = new JButton("Speichern"); - btnClose = new JButton("Schließen"); + btnSaveChanges = new JButton(I18n.WINDOW_LAYOUT.getString("ImageDetails.Button.saveChanges.text")); + btnClose = new JButton(I18n.WINDOW_LAYOUT.getString("ImageDetails.Button.close.text")); // user feedback slot lblError = new QLabel(""); lblError.setForeground(Color.RED); @@ -343,10 +347,10 @@ import org.openslx.thrifthelper.Comparators; * ********************************************************************************/ pnlTabs = new JTabbedPane(); - pnlTabs.addTab("Übersicht", pnlTabOverview); - pnlTabs.addTab("VM-Versionen", pnlTabVersions); - pnlTabs.addTab("Berechtigungen", pnlTabPermissions); - + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("ImageDetails.Tab.overview.title"), pnlTabOverview); + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("ImageDetails.Tab.versions.title"), pnlTabVersions); + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("ImageDetails.Tab.permissions.title"), pnlTabPermissions); + add(pnlTabs, BorderLayout.CENTER); add(pnlButtons, BorderLayout.PAGE_END); } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java index 071a6312..67ed8ec9 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java @@ -16,6 +16,7 @@ import org.openslx.dozmod.gui.control.ImageListViewer.FilterType; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.CompositePage; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; @SuppressWarnings("serial") public abstract class ImageListWindowLayout extends CompositePage { @@ -24,15 +25,15 @@ public abstract class ImageListWindowLayout extends CompositePage { private static final int ICON_SIZE_Y = 24; private final ImageListWindowLayout me = this; - protected final static String infoTextString = "Hier können Sie Virtuelle Maschinen hochladen, herunterladen, bearbeiten und löschen."; - protected final static String infoTitleString = "Übersicht Virtuelle Maschinen"; - protected final static String newButtonLabel = "Neue VM"; - protected final static String newLectureButtonLabel = "Neue Veranstaltung"; - protected final static String editButtonLabel = "Bearbeiten"; - protected final static String downloadButtonLabel = "Download"; - protected final static String deleteButtonLabel = "Löschen"; - protected final static String switchViewButtonLabel = "Veranstaltungen zeigen"; - protected final static String showPublishedImagesLabel = "Öffentliche VMs"; + protected final static String infoTextString = I18n.WINDOW_LAYOUT.getString("ImageList.Label.title.text"); + protected final static String infoTitleString = I18n.WINDOW_LAYOUT.getString("ImageList.Label.info.text"); + protected final static String newButtonLabel = I18n.WINDOW_LAYOUT.getString("ImageList.Button.newVM.text"); + protected final static String newLectureButtonLabel = I18n.WINDOW_LAYOUT.getString("ImageList.Button.newLecture.text"); + protected final static String editButtonLabel = I18n.WINDOW_LAYOUT.getString("ImageList.Button.edit.text"); + protected final static String downloadButtonLabel = I18n.WINDOW_LAYOUT.getString("ImageList.Button.download.text"); + protected final static String deleteButtonLabel = I18n.WINDOW_LAYOUT.getString("ImageList.Button.delete.text"); + protected final static String switchViewButtonLabel = I18n.WINDOW_LAYOUT.getString("ImageList.Button.switchView.text"); + protected final static String showPublishedImagesLabel = I18n.WINDOW_LAYOUT.getString("ImageList.Button.showPublishedImages.text"); // -------------------------------------- // search field, table and buttons @@ -65,21 +66,23 @@ public abstract class ImageListWindowLayout extends CompositePage { JPanel buttonPanel = new JPanel(); buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS)); - btnNewVm = new JButton(newButtonLabel, Gui.getScaledIconResource("/img/new-vm-icon.png", "New VM", - ICON_SIZE_Y, buttonPanel)); + btnNewVm = new JButton(newButtonLabel, Gui.getScaledIconResource("/img/new-vm-icon.png", + I18n.WINDOW_LAYOUT.getString("ImageList.Button.newVM.description"), ICON_SIZE_Y, buttonPanel)); btnEditDetails = new JButton(editButtonLabel, Gui.getScaledIconResource("/img/edit-icon.png", - "Edit VM", ICON_SIZE_Y, buttonPanel)); + I18n.WINDOW_LAYOUT.getString("ImageList.Button.edit.description"), ICON_SIZE_Y, buttonPanel)); btnDelete = new JButton(deleteButtonLabel, Gui.getScaledIconResource("/img/delete-icon.png", - "Delete VM", ICON_SIZE_Y, buttonPanel)); + I18n.WINDOW_LAYOUT.getString("ImageList.Button.delete.description"), ICON_SIZE_Y, buttonPanel)); btnDownload = new JButton(downloadButtonLabel, Gui.getScaledIconResource("/img/download-icon.png", - "New VM", ICON_SIZE_Y, buttonPanel)); + I18n.WINDOW_LAYOUT.getString("ImageList.Button.download.description"), ICON_SIZE_Y, buttonPanel)); btnNewLecture = new JButton(newLectureButtonLabel, Gui.getScaledIconResource("/img/new-lecture-icon.png", - "New Lecture", ICON_SIZE_Y, buttonPanel)); - btnShowPublishedImages = new JButton(showPublishedImagesLabel, Gui.getScaledIconResource("/img/published-vm-icon.png", - "Published Lectures", ICON_SIZE_Y, buttonPanel)); + I18n.WINDOW_LAYOUT.getString("ImageList.Button.newLecture.description"), ICON_SIZE_Y, buttonPanel)); + btnShowPublishedImages = new JButton(showPublishedImagesLabel, + Gui.getScaledIconResource("/img/published-vm-icon.png", + I18n.WINDOW_LAYOUT.getString("ImageList.Button.showPublishedImages.description"), + ICON_SIZE_Y, buttonPanel)); btnShowPublishedImages.setVisible(false); // this gets enabled later when the API version can be queried btnSwitchView = new JButton(switchViewButtonLabel, Gui.getScaledIconResource("/img/switch-icon.png", - "Switch", ICON_SIZE_Y, buttonPanel)); + I18n.WINDOW_LAYOUT.getString("ImageList.Button.switchView.description"), ICON_SIZE_Y, buttonPanel)); buttonPanel.add(btnNewVm); buttonPanel.add(btnEditDetails); buttonPanel.add(btnDelete); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImagePublishedWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImagePublishedWindowLayout.java index 7202fac1..61dbf613 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImagePublishedWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImagePublishedWindowLayout.java @@ -16,6 +16,7 @@ import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.control.table.ImagePublishedTable; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; @SuppressWarnings("serial") public class ImagePublishedWindowLayout extends JDialog { @@ -28,18 +29,16 @@ public class ImagePublishedWindowLayout extends JDialog { protected final JButton btnSatDownload; protected final JButton btnClose; - private static String title = "Öffentliche VMs"; - protected ImagePublishedWindowLayout(Window modalParent) { - super(modalParent, title, modalParent != null ? ModalityType.APPLICATION_MODAL - : ModalityType.MODELESS); + super(modalParent, I18n.WINDOW_LAYOUT.getString("ImagePublished.Dialog.title"), modalParent != null + ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS); GridManager grid = new GridManager(this, 1); // --------------- filter field -------------------------------------- JPanel filterPanel = new JPanel(); filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.LINE_AXIS)); filterPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); - filterPanel.add(new QLabel("Suchen: ")); + filterPanel.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImagePublished.Label.filterPanel.text"))); txtSearch = new JTextField(); filterPanel.add(txtSearch); // --------------- end filter field -------------------------------- @@ -58,14 +57,17 @@ public class ImagePublishedWindowLayout extends JDialog { JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS)); buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); - btnDownload = new JButton("Herunterladen", Gui.getScaledIconResource("/img/download-icon.png", - "Herunterladen", ICON_SIZE_Y, buttonPanel)); + btnDownload = new JButton(I18n.WINDOW_LAYOUT.getString("ImagePublished.Button.download.text"), + Gui.getScaledIconResource("/img/download-icon.png", + I18n.WINDOW_LAYOUT.getString("ImagePublished.Button.download.description"), ICON_SIZE_Y, buttonPanel)); buttonPanel.add(btnDownload); - btnSatDownload = new JButton("Auf Satellit herunterladen", Gui.getScaledIconResource("/img/download-to-sat-icon.png", - "Auf Satellit herunterladen", ICON_SIZE_Y, buttonPanel)); + btnSatDownload = new JButton(I18n.WINDOW_LAYOUT.getString("ImagePublished.Button.satDownload.text"), + Gui.getScaledIconResource("/img/download-to-sat-icon.png", + I18n.WINDOW_LAYOUT.getString("ImagePublished.Button.satDownload.description"), + ICON_SIZE_Y, buttonPanel)); buttonPanel.add(btnSatDownload); buttonPanel.add(Box.createHorizontalGlue()); - btnClose = new JButton("Schließen"); + btnClose = new JButton(I18n.WINDOW_LAYOUT.getString("ImagePublished.Button.close.text")); buttonPanel.add(btnClose); // --------------- end button panel ---------------------------------- diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureChangeImageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureChangeImageLayout.java index d24db283..a9948308 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureChangeImageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureChangeImageLayout.java @@ -14,6 +14,7 @@ import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.ImageListViewer; import org.openslx.dozmod.gui.control.ImageListViewer.FilterType; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; /** * Layout for the ChangeLinkedImage of a lecture @@ -34,14 +35,9 @@ public class LectureChangeImageLayout extends JDialog { */ protected final ImageListViewer imageListViewer; - /** - * The title of the window. - */ - private static String title = "VM zum Verlinken auswählen"; - protected LectureChangeImageLayout(Window modalParent) { - super(modalParent, title, modalParent != null ? ModalityType.APPLICATION_MODAL - : ModalityType.MODELESS); + super(modalParent, I18n.WINDOW_LAYOUT.getString("LectureChangeImage.Dialog.title"), modalParent != null + ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS); // Panel to add everything into, needed for the border. JPanel contentPanel = new JPanel(); @@ -56,10 +52,10 @@ public class LectureChangeImageLayout extends JDialog { // Panel for the buttons at the bottom JPanel buttonPane = new JPanel(); buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); - btnOk = new JButton("Übernehmen"); + btnOk = new JButton(I18n.WINDOW_LAYOUT.getString("LectureChangeImage.Button.ok.text")); buttonPane.add(Box.createGlue()); buttonPane.add(btnOk); - btnClose = new JButton("Abbrechen"); + btnClose = new JButton(I18n.WINDOW_LAYOUT.getString("LectureChangeImage.Button.close.text")); buttonPane.add(btnClose); // Put everything into the grid diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java index 0dc3cee2..09ad8918 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java @@ -41,6 +41,7 @@ import org.openslx.dozmod.gui.control.QDatePickerImpl; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.control.WordWrapLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.thrift.Session; import org.openslx.dozmod.thrift.cache.MetaDataCache; import org.openslx.dozmod.util.FormatHelper; @@ -107,7 +108,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog { protected final JPanel pnlTabLdapFilter; public LectureDetailsWindowLayout(Frame modalParent) { - super(modalParent, "Veranstaltungsdetails", ModalityType.APPLICATION_MODAL); + super(modalParent, I18n.WINDOW_LAYOUT.getString("LectureDetails.Dialog.title"), ModalityType.APPLICATION_MODAL); setResizable(true); setPreferredSize(Gui.getScaledDimension(570, 650)); setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); @@ -126,41 +127,41 @@ public abstract class LectureDetailsWindowLayout extends JDialog { grdInfo.nextRow(); // lblOwner lblOwnerInfo = new PersonLabel(); - grdInfo.add(new QLabel("Besitzer")); + grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.owner.text"))); grdInfo.add(lblOwnerInfo, 2).expand(true, false); grdInfo.nextRow(); // creation time lblCreateTime = new QLabel(); - grdInfo.add(new QLabel("Erstellt am")); + grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.createTime.text"))); grdInfo.add(lblCreateTime, 2); grdInfo.nextRow(); // last updater lblUpdater = new PersonLabel(); - grdInfo.add(new QLabel("Geändert durch")); + grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.updater.text"))); grdInfo.add(lblUpdater, 2); grdInfo.nextRow(); // last updated lblUpdateTime = new QLabel(); - grdInfo.add(new QLabel("Geändert am")); + grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.updateTime.text"))); grdInfo.add(lblUpdateTime, 2); grdInfo.nextRow(); lblVersionInfo = new QLabel(); // UNUSED lblImageNameInfo = new QLabel(); - grdInfo.add(new QLabel("Verknüpfte VM"), 2); + grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.imageName.text")), 2); grdInfo.add(lblImageNameInfo); grdInfo.nextRow(); lblStartTime = new QLabel(); - grdInfo.add(new QLabel("Startdatum"), 2); + grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.startTime.text")), 2); grdInfo.add(lblStartTime); grdInfo.nextRow(); lblEndTime = new QLabel(); - grdInfo.add(new QLabel("Enddatum"), 2); + grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.endTime.text")), 2); grdInfo.add(lblEndTime); grdInfo.nextRow(); lblUseCount = new QLabel(); - grdInfo.add(new QLabel("Aufrufe")); + grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.useCount.text"))); grdInfo.add(lblUseCount, 2); grdInfo.finish(true); @@ -170,7 +171,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog { GridManager grdGeneral = new GridManager(pnlTabGeneral, 5, true, new Insets(3, 3, 3, 3)); // lecture title txtTitle = new JTextField(); - grdGeneral.add(new QLabel("Name")); + grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.title.text"))); grdGeneral.add(txtTitle, 4).expand(true, false).fill(true, false); grdGeneral.nextRow(); @@ -178,7 +179,8 @@ public abstract class LectureDetailsWindowLayout extends JDialog { txtDescription = new JTextArea(); txtDescription.setLineWrap(true); txtDescription.setWrapStyleWord(true); - grdGeneral.add(new QLabel("Beschreibung")).anchor(GridBagConstraints.FIRST_LINE_START); + grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.description.text"))) + .anchor(GridBagConstraints.FIRST_LINE_START); JScrollPane jsp = new JScrollPane(txtDescription, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); jsp.setMinimumSize(Gui.getScaledDimension(450, 120)); @@ -190,14 +192,14 @@ public abstract class LectureDetailsWindowLayout extends JDialog { txtId = new JTextField(); txtId.setEditable(false); txtId.setFont(txtId.getFont().deriveFont(Font.BOLD, txtId.getFont().getSize2D() * 0.66f)); - grdGeneral.add(new QLabel("ID")); + grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.ID.text"))); grdGeneral.add(txtId, 4).expand(true, false).fill(true, false); grdGeneral.nextRow(); // owner lblOwner = new PersonLabel(); - btnChangeOwner = new JButton("Ändern"); - grdGeneral.add(new QLabel("Besitzer")); + btnChangeOwner = new JButton(I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.changeOwner.text")); + grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.owner.text"))); grdGeneral.add(lblOwner, 3).expand(true, false); grdGeneral.add(btnChangeOwner).fill(true, false); grdGeneral.nextRow(); @@ -205,17 +207,17 @@ public abstract class LectureDetailsWindowLayout extends JDialog { // linked image // name txtImageName = new QLabel(); - grdGeneral.add(new QLabel("Verknüpfte VM")); + grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.imageName.text"))); grdGeneral.add(txtImageName, 3).expand(true, false); // link button for image - btnLinkImage = new JButton("Ändern"); + btnLinkImage = new JButton(I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.linkImage.text")); grdGeneral.add(btnLinkImage).fill(true, false); grdGeneral.nextRow(); // image version handling // auto update - chkAutoUpdate = new JCheckBox("Immer aktuellste Version verwenden"); + chkAutoUpdate = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.autoUpdate.text")); // versions combo cboVersions = new ComboBox<>(Comparators.imageVersionDetails, new ComboBoxRenderer<ImageVersionDetails>() { @@ -226,16 +228,18 @@ public abstract class LectureDetailsWindowLayout extends JDialog { if (item.isValid) { return FormatHelper.longDate(item.getCreateTime()); } else { - return FormatHelper.longDate(item.getCreateTime()) + " [ungültig]"; + return FormatHelper.longDate(item.getCreateTime()) + + I18n.WINDOW_LAYOUT.getString("LectureDetails.ComboBox.versionInvalid.text"); } } }); - btnDownloadImage = new JButton("Download"); - btnDownloadImage.setToolTipText("Momentan verwendete Version herunterladen"); + btnDownloadImage = new JButton(I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.downloadImage.text")); + btnDownloadImage.setToolTipText( + I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.downloadImage.toolTipText")); JPanel versionPanel = new JPanel(new BorderLayout()); versionPanel.add(cboVersions, BorderLayout.CENTER); versionPanel.add(chkAutoUpdate, BorderLayout.SOUTH); - grdGeneral.add(new QLabel("VM-Version")); + grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.version.text"))); grdGeneral.add(versionPanel, 3); grdGeneral.add(btnDownloadImage).fill(true, false); grdGeneral.nextRow(); @@ -249,7 +253,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog { startTimePanel.add(spnStartTime); startTimePanel.setMinimumSize(startTimePanel.getPreferredSize()); startTimePanel.setMaximumSize(startTimePanel.getPreferredSize()); - grdGeneral.add(new QLabel("Startdatum")); + grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.startTime.text"))); grdGeneral.add(startTimePanel, 4); grdGeneral.nextRow(); @@ -262,12 +266,12 @@ public abstract class LectureDetailsWindowLayout extends JDialog { endTimePanel.add(spnEndTime); endTimePanel.setMinimumSize(endTimePanel.getPreferredSize()); endTimePanel.setMaximumSize(endTimePanel.getPreferredSize()); - grdGeneral.add(new QLabel("Enddatum")); + grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.endTime.text"))); grdGeneral.add(endTimePanel, 4); grdGeneral.nextRow(); // lecture active - chkIsActive = new JCheckBox("Veranstaltung aktiv"); + chkIsActive = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.isActive.text")); grdGeneral.skip(); grdGeneral.add(chkIsActive, 4); grdGeneral.nextRow(); @@ -280,14 +284,13 @@ public abstract class LectureDetailsWindowLayout extends JDialog { pnlTabNetrules = new JPanel(); GridManager grdNetrules = new GridManager(pnlTabNetrules, 1, true, new Insets(9, 4, 2, 4)); // "restrictions": internet access / usb access / exam - chkHasInternetAccess = new JCheckBox("Netzwerk-/Internetzugriff zulassen"); + chkHasInternetAccess = new JCheckBox( + I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.hasInternetAccess.text")); grdNetrules.add(chkHasInternetAccess).expand(true, false).insets(firstInset); grdNetrules.nextRow(); grdNetrules.add( new WordWrapLabel( - "Legen Sie hier fest, ob die Veranstaltung Zugriff zum Internet haben soll." - + " In der Liste können Sie bestimmte Adressen und Services" - + " ein- oder ausschließen.", false, true)) + I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.hasInternetAccess.text"), false, true)) .fill(true, false) .expand(true, false) .insets(descriptionInset); @@ -301,25 +304,24 @@ public abstract class LectureDetailsWindowLayout extends JDialog { pnlTabRestrictions = new JPanel(); GridManager grdRestrictions = new GridManager(pnlTabRestrictions, 2, true, new Insets(9, 4, 2, 4)); - chkHasUsbAccess = new JCheckBox("Externe Speichermedien zulassen"); + chkHasUsbAccess = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.hasUSBAccess.text")); grdRestrictions.add(chkHasUsbAccess, 2); grdRestrictions.nextRow(); grdRestrictions.add( - new WordWrapLabel("Legen Sie hier fest, ob die Veranstaltung den Zugriff" - + " auf Speichermedien (CD, USB, ...) erlauben soll", false, true), 2) + new WordWrapLabel( + I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.hasUSBAccess.text"), false, true), 2) .fill(true, false) .expand(true, false) .insets(descriptionInset); grdRestrictions.nextRow(); - chkIsExam = new JCheckBox("Prüfungsmodus"); + chkIsExam = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.isExam.text")); grdRestrictions.add(chkIsExam, 2); grdRestrictions.nextRow(); grdRestrictions.add( new WordWrapLabel( - "Markieren Sie diese Veranstaltung als E-Prüfung.\n" - + "Die Veranstaltung wird nur dann startbar sein, wenn " + Branding.getServiceName() + " in den" - + " Prüfungsmodus versetzt wird. Kontaktieren Sie dazu Ihren lokalen " + Branding.getServiceName() + "-Administrator.", + I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.isExam.text", + Branding.getServiceName(), Branding.getServiceName()), false, true), 2) .fill(true, false) .expand(true, false) @@ -335,9 +337,10 @@ public abstract class LectureDetailsWindowLayout extends JDialog { pnlTabPermissions = new JPanel(); GridManager grdPermissions = new GridManager(pnlTabPermissions, 1, false); JPanel defaultPermissionPane = new JPanel(); - defaultPermissionPane.setBorder(BorderFactory.createTitledBorder("Andere Nutzer")); - chkCustomPermEdit = new JCheckBox("Bearbeiten"); - chkCustomPermAdmin = new JCheckBox("Admin"); + defaultPermissionPane.setBorder(BorderFactory.createTitledBorder( + I18n.WINDOW_LAYOUT.getString("LectureDetails.TitledBorder.defaultPermissionPane.title"))); + chkCustomPermEdit = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.permEdit.text")); + chkCustomPermAdmin = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.permAdmin.text")); defaultPermissionPane.add(chkCustomPermEdit); defaultPermissionPane.add(chkCustomPermAdmin); grdPermissions.add(ctlPermissionManager).fill(true, true).expand(true, true); @@ -396,32 +399,32 @@ public abstract class LectureDetailsWindowLayout extends JDialog { ********************************************************************************/ // finally build the tabbedPane and add it to the main view pnlTabs = new JTabbedPane(); - pnlTabs.addTab("Übersicht", pnlTabInfo); - pnlTabs.addTab("Allgemein", pnlTabGeneral); + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.info.title"), pnlTabInfo); + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.general.title"), pnlTabGeneral); if (Session.isLectureRestrictionsSupported()) { - pnlTabs.addTab("Beschränkungen", pnlTabRestrictions); - pnlTabs.addTab("Firewall", pnlTabNetrules); + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.restrictions.title"), pnlTabRestrictions); + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.netRules.title"), pnlTabNetrules); } if (MetaDataCache.getLocations() != null && !MetaDataCache.getLocations().isEmpty()) { - pnlTabs.addTab("Raumauswahl", pnlTabLocations); + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.locations.title"), pnlTabLocations); } if (Session.isLectureRestrictionsSupported()) { - pnlTabs.addTab("VM-Start", pnlTabRunscript); + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.runScript.title"), pnlTabRunscript); } - pnlTabs.addTab("Berechtigungen", pnlTabPermissions); + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.permissions.title"), pnlTabPermissions); if (Session.hasFeature(Feature.NETWORK_SHARES)) { - pnlTabs.addTab("Netzlaufwerke", pnlTabNetshare); + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.netShare.title"), pnlTabNetshare); } if (Session.hasFeature(Feature.LECTURE_FILTER_LDAP)) { - pnlTabs.addTab("LDAP-Filter", pnlTabLdapFilter); + pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.ldapFilter.title"), pnlTabLdapFilter); } add(pnlTabs, BorderLayout.CENTER); // usage counter + button panel on the bottom JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS)); buttonPanel.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); - btnClose = new JButton("Schließen"); - btnSaveChanges = new JButton("Speichern"); + btnClose = new JButton(I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.close.text")); + btnSaveChanges = new JButton(I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.saveChanges.text")); lblError = new QLabel(""); lblError.setForeground(Color.RED); buttonPanel.add(lblError); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureListWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureListWindowLayout.java index 03847488..31ccf5b5 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureListWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureListWindowLayout.java @@ -21,6 +21,7 @@ import org.openslx.dozmod.gui.control.table.LectureTable; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.CompositePage; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.window.LectureListWindow.FilterType; @SuppressWarnings("serial") @@ -28,14 +29,6 @@ public abstract class LectureListWindowLayout extends CompositePage { private static final int ICON_SIZE_Y = 24; - private static final String infoTitleString = "Übersicht Veranstaltungen"; - private static final String newButtonLabel = "Neue Veranstaltung"; - private static final String editButtonLabel = "Bearbeiten"; - private static final String deleteButtonLabel = "Löschen"; - private static final String switchViewButtonLabel = "VMs zeigen"; - private static final String filterPanelLabel = "Suchen"; - private static final String infoTextString = "Hier können Sie Veranstaltungen anlegen, bearbeiten und löschen."; - // buttons protected final JButton btnNewLecture; protected final JButton btnDeleteLecture; @@ -56,9 +49,9 @@ public abstract class LectureListWindowLayout extends CompositePage { // --------- info group with title and text ------------------------- JPanel infoPanel = new JPanel(new BorderLayout()); - QLabel infoTitle = new QLabel(infoTitleString); + QLabel infoTitle = new QLabel(I18n.WINDOW_LAYOUT.getString("LectureList.Label.title.text")); infoTitle.setFont(infoTitle.getFont().deriveFont(Font.BOLD)); - QLabel infoText = new QLabel(infoTextString); + QLabel infoText = new QLabel(I18n.WINDOW_LAYOUT.getString("LectureList.Label.info.text")); infoPanel.add(infoTitle, BorderLayout.NORTH); infoPanel.add(infoText, BorderLayout.CENTER); // ---------------- end group of title ------------------------------ @@ -69,7 +62,8 @@ public abstract class LectureListWindowLayout extends CompositePage { // filterPanel with filter text field and filter combo JPanel filterPanel = new JPanel(); - filterPanel.setBorder(new TitledBorder(filterPanelLabel)); + filterPanel.setBorder(new TitledBorder( + I18n.WINDOW_LAYOUT.getString("LectureList.TitledBorder.filterPanel.title"))); filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.LINE_AXIS)); txtSearch = new JTextField(); cboFilter = new JComboBox<FilterType>(); @@ -82,7 +76,7 @@ public abstract class LectureListWindowLayout extends CompositePage { // Panel for itemCount JPanel lectureCountPanel = new JPanel(); lblVisibleLectureCount = new QLabel(); - lectureCountPanel.add(new JLabel("Sichtbar:")); + lectureCountPanel.add(new JLabel(I18n.WINDOW_LAYOUT.getString("LectureList.Label.visibleLectureCount.text"))); lectureCountPanel.add(lblVisibleLectureCount); filterPanel.add(lectureCountPanel); @@ -104,10 +98,22 @@ public abstract class LectureListWindowLayout extends CompositePage { buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS)); buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); - btnNewLecture = new JButton(newButtonLabel, Gui.getScaledIconResource("/img/new-lecture-icon.png", "New Lecture", ICON_SIZE_Y, buttonPanel)); - btnEditLecture = new JButton(editButtonLabel, Gui.getScaledIconResource("/img/edit-icon.png", "Edit Lecture", ICON_SIZE_Y, buttonPanel)); - btnDeleteLecture = new JButton(deleteButtonLabel, Gui.getScaledIconResource("/img/delete-icon.png", "Delete Lecture", ICON_SIZE_Y, buttonPanel)); - btnSwitchView = new JButton(switchViewButtonLabel, Gui.getScaledIconResource("/img/switch-icon.png", "Switch", ICON_SIZE_Y, buttonPanel)); + btnNewLecture = new JButton(I18n.WINDOW_LAYOUT.getString("LectureList.Button.newLecture.text"), + Gui.getScaledIconResource("/img/new-lecture-icon.png", + I18n.WINDOW_LAYOUT.getString("LectureList.Button.newLecture.description"), + ICON_SIZE_Y, buttonPanel)); + btnEditLecture = new JButton(I18n.WINDOW_LAYOUT.getString("LectureList.Button.editLecture.text"), + Gui.getScaledIconResource("/img/edit-icon.png", + I18n.WINDOW_LAYOUT.getString("LectureList.Button.editLecture.description"), + ICON_SIZE_Y, buttonPanel)); + btnDeleteLecture = new JButton(I18n.WINDOW_LAYOUT.getString("LectureList.Button.deleteLecture.text"), + Gui.getScaledIconResource("/img/delete-icon.png", + I18n.WINDOW_LAYOUT.getString("LectureList.Button.deleteLecture.description"), + ICON_SIZE_Y, buttonPanel)); + btnSwitchView = new JButton(I18n.WINDOW_LAYOUT.getString("LectureList.Button.switchView.text"), + Gui.getScaledIconResource("/img/switch-icon.png", + I18n.WINDOW_LAYOUT.getString("LectureList.Button.switchView.description"), + ICON_SIZE_Y, buttonPanel)); buttonPanel.add(btnNewLecture); buttonPanel.add(btnEditLecture); buttonPanel.add(Box.createHorizontalStrut(5)); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LocationSelectionWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LocationSelectionWindowLayout.java index f8640c19..2e44139b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LocationSelectionWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LocationSelectionWindowLayout.java @@ -17,6 +17,7 @@ import org.openslx.dozmod.gui.control.LocationSelector; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.control.WordWrapLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; public class LocationSelectionWindowLayout extends JDialog { @@ -35,8 +36,7 @@ public class LocationSelectionWindowLayout extends JDialog { getRootPane().setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); GridManager grid = new GridManager(this, 1); - WordWrapLabel header = new WordWrapLabel( - "Hier können Sie die Räume auswählen, in denen diese Veranstaltung sichtbar sein soll."); + WordWrapLabel header = new WordWrapLabel(I18n.WINDOW_LAYOUT.getString("LocationSelection.Label.info.text")); ctlLocationSelector = new LocationSelector(); grid.add(header).fill(true, false).expand(true, false); grid.nextRow(); @@ -49,8 +49,8 @@ public class LocationSelectionWindowLayout extends JDialog { buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS)); lblError = new QLabel(); lblError.setForeground(Color.RED); - btnClose = new JButton("Abbrechen"); - btnSaveChanges = new JButton("Übernehmen"); + btnClose = new JButton(I18n.WINDOW_LAYOUT.getString("LocationSelection.Button.close.text")); + btnSaveChanges = new JButton(I18n.WINDOW_LAYOUT.getString("LocationSelection.Button.saveChanges.text")); buttonPanel.add(lblError); buttonPanel.add(Box.createHorizontalGlue()); buttonPanel.add(btnClose); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java index 0264da11..0486c616 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java @@ -26,6 +26,7 @@ import org.openslx.dozmod.gui.control.ComboBox; import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.util.ResourceLoader; @SuppressWarnings("serial") @@ -49,11 +50,6 @@ public abstract class LoginWindowLayout extends JDialog { // authentication method to use for login attempts protected LOGIN_TYPE loginType = null; - private static final String TITLE = Branding.getApplicationName() + " - Login"; - private static final String AUTH_TYPE_LABEL = "Authentifizierungsart"; - private static final String LOGIN_FORM_LABEL = "Zugangsdaten"; - private static final String ADVANCED_LABEL = "Erweitert"; - // login type panel protected final JRadioButton[] rdoLoginType = new JRadioButton[3]; @@ -80,7 +76,8 @@ public abstract class LoginWindowLayout extends JDialog { * The shell it should be added to */ public LoginWindowLayout(Frame modalParent) { - super(modalParent, TITLE, ModalityType.APPLICATION_MODAL); + super(modalParent, I18n.WINDOW_LAYOUT.getString("Login.Dialog.title", Branding.getApplicationName()), + ModalityType.APPLICATION_MODAL); setResizable(false); GridManager grid = new GridManager(this, 2); @@ -88,11 +85,12 @@ public abstract class LoginWindowLayout extends JDialog { grid.add(new QLabel(getScaledLogo()), 2); grid.nextRow(); - rdoLoginType[0] = new JRadioButton("Authentifizierung über " + Branding.getMasterServerIdm()); - rdoLoginType[1] = new JRadioButton("Test-Zugang mit festem Benutzer"); - rdoLoginType[2] = new JRadioButton("Direkter Zugang zum Satelliten"); - btnSettings = new JButton("Einstellungen"); - btnLogDir = new JButton("Logverzeichnis"); + rdoLoginType[0] = new JRadioButton( + I18n.WINDOW_LAYOUT.getString("Login.RadioButton.loginType.text.0", Branding.getMasterServerIdm())); + rdoLoginType[1] = new JRadioButton(I18n.WINDOW_LAYOUT.getString("Login.RadioButton.loginType.text.1")); + rdoLoginType[2] = new JRadioButton(I18n.WINDOW_LAYOUT.getString("Login.RadioButton.loginType.text.2")); + btnSettings = new JButton(I18n.WINDOW_LAYOUT.getString("Login.Button.settings.text")); + btnLogDir = new JButton(I18n.WINDOW_LAYOUT.getString("Login.Button.logDir.text")); cboOrganization = new ComboBox<>(new ComboBoxRenderer<Organization>() { @Override @@ -104,14 +102,14 @@ public abstract class LoginWindowLayout extends JDialog { @Override public String getEmptyText() { - return "Wird geladen..."; + return I18n.WINDOW_LAYOUT.getString("Login.ComboBox.organization.emptyText"); } }); txtUsername = new JTextField(); txtPassword = new JPasswordField(); - btnLogin = new JButton("Login"); - chkSaveUsername = new JCheckBox("Benutzername speichern"); - btnOpenRegistration = new JButton("Registrieren"); + btnLogin = new JButton(I18n.WINDOW_LAYOUT.getString("Login.Button.login.text")); + chkSaveUsername = new JCheckBox(I18n.WINDOW_LAYOUT.getString("Login.CheckBox.saveUsername.text")); + btnOpenRegistration = new JButton(I18n.WINDOW_LAYOUT.getString("Login.Button.openRegistration.text")); pnlLoginType = makeLoginTypePanel(); grid.add(pnlLoginType).expand(0.25, 1).fill(true, true); @@ -137,20 +135,21 @@ public abstract class LoginWindowLayout extends JDialog { // login form panel JPanel loginFormPanel = new JPanel(); - loginFormPanel.setBorder(new TitledBorder(LOGIN_FORM_LABEL)); + loginFormPanel.setBorder(new TitledBorder( + I18n.WINDOW_LAYOUT.getString("Login.TitledBorder.loginFormPanel.title"))); GridManager grid = new GridManager(loginFormPanel, 4); - grid.add(new QLabel("Identity Provider")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("Login.Label.organization.text"))); grid.add(cboOrganization, 3).expand(true, false).fill(true, false); grid.nextRow(); // label + field for username - grid.add(new QLabel("Benutzername")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("Login.Label.username.text"))); grid.add(txtUsername, 3).expand(true, false).fill(true, false); grid.nextRow(); // label + field for password - grid.add(new QLabel("Passwort")); + grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("Login.Label.password.text"))); grid.add(txtPassword, 3).expand(true, false).fill(true, false); grid.nextRow(); @@ -166,7 +165,8 @@ public abstract class LoginWindowLayout extends JDialog { private JPanel makeLoginTypePanel() { JPanel loginTypePanel = new JPanel(); loginTypePanel.setLayout(new BoxLayout(loginTypePanel, BoxLayout.PAGE_AXIS)); - loginTypePanel.setBorder(new TitledBorder(AUTH_TYPE_LABEL)); + loginTypePanel.setBorder(new TitledBorder( + I18n.WINDOW_LAYOUT.getString("Login.TitledBorder.loginTypePanel.title"))); ButtonGroup loginTypeButtonGroup = new ButtonGroup(); for (int i = 0; i < rdoLoginType.length; i++) { loginTypeButtonGroup.add(rdoLoginType[i]); @@ -179,7 +179,7 @@ public abstract class LoginWindowLayout extends JDialog { private JPanel makeAdvancedPanel() { JPanel p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.LINE_AXIS)); - p.setBorder(new TitledBorder(ADVANCED_LABEL)); + p.setBorder(new TitledBorder(I18n.WINDOW_LAYOUT.getString("Login.TitledBorder.advancedPanel.title"))); p.add(btnSettings); p.add(btnLogDir); return p; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/MainMenuWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/MainMenuWindowLayout.java index 88b49bae..8448659e 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/MainMenuWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/MainMenuWindowLayout.java @@ -7,23 +7,16 @@ import javax.swing.JLabel; import org.openslx.dozmod.Branding; import org.openslx.dozmod.gui.helper.CompositePage; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.util.ResourceLoader; @SuppressWarnings("serial") public abstract class MainMenuWindowLayout extends CompositePage { // text for info for the vms selection - protected String vmInfo = "<html><b>Übersicht Virtueller Maschinen</b><br>" - + "Zur Übersicht über die verfügbaren Virtuellen Maschinen wechseln.<br>Hier können Sie:<br><br>" - + "1) Veranstaltungen auf Basis einer Virtuellen Maschine erstellen<br>" - + "2) Neue Virtuelle Maschinen hochladen<br>" - + "3) Virtuelle Maschinen herunterladen<br>" - + "4) Virtuelle Maschinen bearbeiten und löschen</html>"; + protected String vmInfo = I18n.WINDOW_LAYOUT.getString("MainMenu.Label.vmInfo.text"); // text for the info for the lecture selection - protected String lecturesInfo = "<html><b>Übersicht Veranstaltungen</b><br>" - + "Zur Übersicht über verfügbare Veranstaltungen wechseln.<br>Hier können Sie:<br><br>" - + "1) Veranstaltungen bearbeiten oder löschen<br>" - + "2) Zu Veranstaltungen gehörende Virtuelle Maschinen herunterladen<br> </html>"; + protected String lecturesInfo = I18n.WINDOW_LAYOUT.getString("MainMenu.Label.lecturesInfo.text"); // buttons protected final JLabel lblVirtualMachinesLogo; @@ -32,17 +25,20 @@ public abstract class MainMenuWindowLayout extends CompositePage { protected final JButton btnShowLectures; public MainMenuWindowLayout() { - this.setBorder(BorderFactory.createTitledBorder(Branding.getApplicationName() + " Hauptmenü")); + this.setBorder(BorderFactory.createTitledBorder( + I18n.WINDOW_LAYOUT.getString("MainMenu.TitledBorder.title", Branding.getApplicationName()))); GridManager grid = new GridManager(this, 2); - lblVirtualMachinesLogo = new JLabel(ResourceLoader.getIcon("/img/virtualization.png", "VM-Übersicht")); + lblVirtualMachinesLogo = new JLabel(ResourceLoader.getIcon("/img/virtualization.png", + I18n.WINDOW_LAYOUT.getString("MainMenu.Label.vmLogo.description"))); JLabel vmInfoLabel = new JLabel(vmInfo); vmInfoLabel.setVerticalAlignment(JLabel.TOP); - lblLectureLogo = new JLabel(ResourceLoader.getIcon("/img/lecture.png", "Veranstaltungen")); + lblLectureLogo = new JLabel(ResourceLoader.getIcon("/img/lecture.png", + I18n.WINDOW_LAYOUT.getString("MainMenu.Label.lecturesLogo.description"))); JLabel lecturesInfoLabel = new JLabel(lecturesInfo); lecturesInfoLabel.setVerticalAlignment(JLabel.TOP); - btnShowVirtualMachines = new JButton("Zu den VMs"); - btnShowLectures = new JButton("Zu den Veranstaltungen"); + btnShowVirtualMachines = new JButton(I18n.WINDOW_LAYOUT.getString("MainMenu.Button.showVMs.text")); + btnShowLectures = new JButton(I18n.WINDOW_LAYOUT.getString("MainMenu.Button.showLectures.text")); grid.add(lblVirtualMachinesLogo).fill(true, false).expand(true, false); grid.add(lblLectureLogo).fill(true, false).expand(true, false); grid.nextRow(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/SatelliteListWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/SatelliteListWindowLayout.java index 2e28a4b9..457c39d3 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/SatelliteListWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/SatelliteListWindowLayout.java @@ -19,6 +19,7 @@ import javax.swing.JTextField; import org.openslx.bwlp.thrift.iface.Satellite; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; @SuppressWarnings("serial") public class SatelliteListWindowLayout extends JDialog { @@ -29,11 +30,9 @@ public class SatelliteListWindowLayout extends JDialog { protected final JRadioButton rdoCusomAddress; protected final Map<JRadioButton, Satellite> radioToSat = new HashMap<>(); - private static String title = "Satellitenserver wählen"; - protected SatelliteListWindowLayout(Window modalParent, List<Satellite> satList) { - super(modalParent, title, modalParent != null ? ModalityType.APPLICATION_MODAL - : ModalityType.MODELESS); + super(modalParent, I18n.WINDOW_LAYOUT.getString("SatelliteList.Dialog.title"), modalParent != null + ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS); JPanel radioPanel = new JPanel(); radioPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); GridManager selectionPanelGrid = new GridManager(radioPanel, 2); @@ -41,7 +40,7 @@ public class SatelliteListWindowLayout extends JDialog { // --------------- radio buttons sat selection -------------------------------------- if (satList != null && !satList.isEmpty()) { - selectionPanelGrid.add(new JLabel("Vorgegebene Server"), 2); + selectionPanelGrid.add(new JLabel(I18n.WINDOW_LAYOUT.getString("SatelliteList.Label.satList.text")), 2); selectionPanelGrid.nextRow(); // create the radioButtons, add them to the map, button group and the selection grid. for (Satellite sat : satList) { @@ -56,7 +55,7 @@ public class SatelliteListWindowLayout extends JDialog { // --------------- end radio buttons for sat selection ------------------------------------ // --------------- custom ip button and field -------------------------------------- - selectionPanelGrid.add(new JLabel("Server-Adresse selbst eingeben"), 2); + selectionPanelGrid.add(new JLabel(I18n.WINDOW_LAYOUT.getString("SatelliteList.Label.customAddress.text")), 2); selectionPanelGrid.nextRow(); rdoCusomAddress = new JRadioButton(""); btnGroup.add(rdoCusomAddress); @@ -71,10 +70,10 @@ public class SatelliteListWindowLayout extends JDialog { JPanel buttonPane = new JPanel(); buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); buttonPane.setBorder(BorderFactory.createEmptyBorder(1, 3, 3, 3)); - btnCancel = new JButton("Abbrechen"); + btnCancel = new JButton(I18n.WINDOW_LAYOUT.getString("SatelliteList.Button.cancel.text")); buttonPane.add(btnCancel); buttonPane.add(Box.createHorizontalGlue()); - btnContinue = new JButton("Weiter"); + btnContinue = new JButton(I18n.WINDOW_LAYOUT.getString("SatelliteList.Button.continue.text")); buttonPane.add(btnContinue); // --------------- end button panel ---------------------------------- diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/UserListWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/UserListWindowLayout.java index 2cb55271..c82791d7 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/UserListWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/UserListWindowLayout.java @@ -17,6 +17,7 @@ import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.control.table.UserTable; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; @SuppressWarnings("serial") public class UserListWindowLayout extends JDialog { @@ -27,11 +28,9 @@ public class UserListWindowLayout extends JDialog { protected final JButton btnCancel; protected final JTextField txtSearch; - private static String title = "Benutzerliste"; - protected UserListWindowLayout(Window modalParent, String buttonCaption) { - super(modalParent, title, modalParent != null ? ModalityType.APPLICATION_MODAL - : ModalityType.MODELESS); + super(modalParent, I18n.WINDOW_LAYOUT.getString("UserList.Dialog.title"), modalParent != null + ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS); GridManager grid = new GridManager(this, 1); @@ -39,7 +38,7 @@ public class UserListWindowLayout extends JDialog { JPanel filterPanel = new JPanel(); filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.LINE_AXIS)); filterPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); - filterPanel.add(new QLabel("Suchen: ")); + filterPanel.add(new QLabel(I18n.WINDOW_LAYOUT.getString("UserList.Label.filterPanel.text"))); txtSearch = new JTextField(); filterPanel.add(txtSearch); // --------------- end filter field -------------------------------- @@ -59,7 +58,7 @@ public class UserListWindowLayout extends JDialog { buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); buttonPane.add(Box.createHorizontalGlue()); - btnCancel = new JButton("Schließen"); + btnCancel = new JButton(I18n.WINDOW_LAYOUT.getString("UserList.Button.cancel.text")); buttonPane.add(btnCancel); buttonPane.add(Box.createRigidArea(new Dimension(10, 0))); btnConfirm = new JButton(buttonCaption); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtConfigEditorWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtConfigEditorWindowLayout.java index c8cc7f62..cfa25564 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtConfigEditorWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtConfigEditorWindowLayout.java @@ -16,25 +16,25 @@ import javax.swing.JScrollPane; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; @SuppressWarnings("serial") public class VirtConfigEditorWindowLayout extends JDialog { - private static String title = "VM-Konfiguration Editor"; protected final JScrollPane pnlScrollPane; protected final JEditorPane pnlEditor; protected final JButton btnSave; protected final JButton btnCancel; protected VirtConfigEditorWindowLayout(Window modalParent) { - super(modalParent, title, + super(modalParent, I18n.WINDOW_LAYOUT.getString("VirtConfigEditor.Dialog.title"), modalParent != null ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS); GridManager grid = new GridManager(this, 1, true, new Insets(2, 2, 2, 2)); JPanel pnlWarning = new JPanel(); - pnlWarning.setBorder(BorderFactory.createTitledBorder("WARNUNG")); - pnlWarning.add(new JLabel( - "<html>Änderungen an der VM-Konfiguration können zu Funktionsstörungen führen.<br>Benutzung auf eigene Gefahr!</html>")); + pnlWarning.setBorder(BorderFactory.createTitledBorder( + I18n.WINDOW_LAYOUT.getString("VirtConfigEditor.TitledBorder.pnlWarning.title"))); + pnlWarning.add(new JLabel(I18n.WINDOW_LAYOUT.getString("VirtConfigEditor.Label.pnlWarning.text"))); pnlEditor = new JEditorPane("text/plain", null); pnlScrollPane = new JScrollPane(pnlEditor, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); @@ -47,10 +47,10 @@ public class VirtConfigEditorWindowLayout extends JDialog { buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); buttonPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); buttonPane.add(Box.createHorizontalGlue()); - btnCancel = new JButton("Abbrechen"); + btnCancel = new JButton(I18n.WINDOW_LAYOUT.getString("VirtConfigEditor.Button.cancel.text")); buttonPane.add(btnCancel); buttonPane.add(Box.createRigidArea(new Dimension(10, 0))); - btnSave = new JButton("Speichern"); + btnSave = new JButton(I18n.WINDOW_LAYOUT.getString("VirtConfigEditor.Button.save.text")); buttonPane.add(btnSave); grid.add(buttonPane).fill(true, false).expand(true, false); ; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtDropDownConfigEditorWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtDropDownConfigEditorWindowLayout.java index d8200578..1703e77e 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtDropDownConfigEditorWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtDropDownConfigEditorWindowLayout.java @@ -22,6 +22,7 @@ import org.openslx.dozmod.gui.control.ComboBox; import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; import org.openslx.dozmod.gui.control.WordWrapLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.thrift.Session; import org.openslx.sat.thrift.version.Feature; import org.openslx.util.vm.VmMetaData.DDAcceleration; @@ -33,7 +34,6 @@ import org.openslx.util.vm.VmMetaData.UsbSpeed; @SuppressWarnings("serial") public class VirtDropDownConfigEditorWindowLayout extends JDialog { - private static String title = "VM-Konfiguration Editor"; protected final JScrollPane pnlScrollPane; protected final JEditorPane pnlEditor; protected final JButton btnSave; @@ -46,7 +46,7 @@ public class VirtDropDownConfigEditorWindowLayout extends JDialog { protected final JComboBox<UsbSpeed> cboMaxUsbSpeed; protected VirtDropDownConfigEditorWindowLayout(Window modalParent) { - super(modalParent, title, + super(modalParent, I18n.WINDOW_LAYOUT.getString("VirtDropDownConfigEditor.Dialog.title"), modalParent != null ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS); GridManager grid = new GridManager(getContentPane(), 2, true, new Insets(2, 2, 2, 2)); @@ -55,14 +55,11 @@ public class VirtDropDownConfigEditorWindowLayout extends JDialog { * extra JPanel for the Warning message */ JPanel pnlWarning = new JPanel(); - pnlWarning.setBorder(BorderFactory.createTitledBorder("WARNUNG")); + pnlWarning.setBorder(BorderFactory.createTitledBorder( + I18n.WINDOW_LAYOUT.getString("VirtDropDownConfigEditor.TitledBorder.pnlWarning.title"))); pnlWarning.setLayout(new BorderLayout()); - pnlWarning.add(new WordWrapLabel("Hier können Sie einige Einstellungen bzgl. der" - + " verwendeten virtuallen Hardware ändern. Bitte beachten Sie," - + " dass Änderungen erfordern können, dass in der VM neue Treiber" - + " vorhanden sein müssen. In diesem Fall ist es notwendig, dass" - + " Sie die Änderung nach dem Herunterladen einer VM lokal" - + " durchführen, die notwendigen Treiber installieren, und die VM wieder hochladen."), + pnlWarning.add(new WordWrapLabel( + I18n.WINDOW_LAYOUT.getString("VirtDropDownConfigEditor.Label.pnlWarning.text")), BorderLayout.CENTER); /* @@ -113,20 +110,25 @@ public class VirtDropDownConfigEditorWindowLayout extends JDialog { grid.add(pnlWarning, 2).fill(true, false).expand(true, false); grid.nextRow(); - grid.add(new JLabel("Soundkarte")).fill(true, false).expand(false, false); + grid.add(new JLabel(I18n.WINDOW_LAYOUT.getString("VirtDropDownConfigEditor.Label.sound.text"))) + .fill(true, false).expand(false, false); grid.add(cboSound).fill(true, false).expand(false, false); grid.nextRow(); - grid.add(new JLabel("3D-Beschleunigung")).fill(true, false).expand(false, false); + grid.add(new JLabel(I18n.WINDOW_LAYOUT.getString("VirtDropDownConfigEditor.Label.3DAcceleration.text"))) + .fill(true, false).expand(false, false); grid.add(cbo3DAcceleration).fill(true, false).expand(true, false); grid.nextRow(); - grid.add(new JLabel("VMWare HW-Version")).fill(true, false).expand(false, false); + grid.add(new JLabel(I18n.WINDOW_LAYOUT.getString("VirtDropDownConfigEditor.Label.HWVersion.text"))) + .fill(true, false).expand(false, false); grid.add(cboHWVersion).fill(true, false).expand(true, false); grid.nextRow(); - grid.add(new JLabel("Netzwerkkarte")).fill(true, false).expand(false, false); + grid.add(new JLabel(I18n.WINDOW_LAYOUT.getString("VirtDropDownConfigEditor.Label.E0VirtDev.text"))) + .fill(true, false).expand(false, false); grid.add(cboE0VirtDev).fill(true, false).expand(true, false); grid.nextRow(); if (Session.hasFeature(Feature.CONFIGURE_USB)) { - grid.add(new JLabel("USB")).fill(true, false).expand(false, false); + grid.add(new JLabel(I18n.WINDOW_LAYOUT.getString("VirtDropDownConfigEditor.Label.maxUSBSpeed.text"))) + .fill(true, false).expand(false, false); grid.add(cboMaxUsbSpeed).fill(true, false).expand(true, false); grid.nextRow(); } @@ -138,13 +140,13 @@ public class VirtDropDownConfigEditorWindowLayout extends JDialog { buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); buttonPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); buttonPane.add(Box.createHorizontalGlue()); - btnMore = new JButton("Expertenmodus"); + btnMore = new JButton(I18n.WINDOW_LAYOUT.getString("VirtDropDownConfigEditor.Button.more.text")); buttonPane.add(btnMore); buttonPane.add(Box.createRigidArea(new Dimension(10, 0))); - btnCancel = new JButton("Abbrechen"); + btnCancel = new JButton(I18n.WINDOW_LAYOUT.getString("VirtDropDownConfigEditor.Button.cancel.text")); buttonPane.add(btnCancel); buttonPane.add(Box.createRigidArea(new Dimension(10, 0))); - btnSave = new JButton("Speichern"); + btnSave = new JButton(I18n.WINDOW_LAYOUT.getString("VirtDropDownConfigEditor.Button.save.text")); buttonPane.add(btnSave); grid.add(buttonPane, 2).fill(true, false).expand(true, false); grid.finish(false); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java index 05397d70..7256dd69 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java @@ -11,6 +11,7 @@ import org.apache.thrift.TException; import org.openslx.bwlp.thrift.iface.ImageBaseWrite; import org.openslx.bwlp.thrift.iface.ImageVersionWrite; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.QuitNotification; import org.openslx.dozmod.gui.helper.UiFeedback; @@ -91,7 +92,7 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif @Override public String getWindowTitle() { - return "Neue VM erzeugen"; + return I18n.WIZARD.getString("ImageCreation.Wizard.title"); } @Override @@ -102,7 +103,7 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif // check state if (!isStateValid()) { // TODO: Show what went wrong - Gui.showMessageBox(this, "Ein interner Fehler ist aufgetreten.\n\nDetails in der Logdatei.", + Gui.showMessageBox(this, I18n.WIZARD.getString("ImageCreation.Message.error.stateInvalid"), MessageType.ERROR, null, null); return false; } @@ -112,7 +113,7 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif ThriftActions.updateImageBase(state.uuid, imageBaseWriteFromState()); } catch (TException e) { ThriftError.showMessage(null, LOGGER, e, - "Konnte die Metadaten der VM nicht auf dem Satelliten speichern!"); + I18n.WIZARD.getString("ImageCreation.Message.error.baseNotWritten")); return false; } baseWritten = true; @@ -123,7 +124,7 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif try { ThriftActions.writeImagePermissions(state.uuid, state.permissionMap); } catch (TException e) { - Gui.showMessageBox(this, "Konnte die Berechtigungen nicht auf dem Satelliten speichern!", + Gui.showMessageBox(this, I18n.WIZARD.getString("ImageCreation.Message.error.permissionsNotWritten"), MessageType.ERROR, null, null); ThriftActions.deleteImageBase(JOptionPane.getFrameForComponent(this), state.uuid); return false; @@ -141,8 +142,8 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif new ImageVersionWrite(state.isRestricted)); } catch (TException e) { if (state.isRestricted) { - Gui.showMessageBox(null, "Unerwarteter Fehler beim Setzen der Option" - + " 'Enthält lizenzpflichtige Software' für diese Virtuelle Maschine.", + Gui.showMessageBox(null, + I18n.WIZARD.getString("ImageCreation.Message.error.updateImageVersionFailed"), MessageType.WARNING, LOGGER, e); } } @@ -248,7 +249,7 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif protected boolean onCancelRequest() { if (state.uuid == null) return true; - boolean confirmed = Gui.showMessageBox(this, "Möchten Sie den Vorgang wirklich abbrechen?", + boolean confirmed = Gui.showMessageBox(this, I18n.WIZARD.getString("ImageCreation.Message.yesNo.cancelRequest"), MessageType.QUESTION_YESNO, null, null); if (confirmed) { QuickTimer.scheduleOnce(new Task() { diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java index 3b606f57..6f911894 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java @@ -7,6 +7,7 @@ import org.apache.thrift.TException; import org.openslx.bwlp.thrift.iface.ImageDetailsRead; import org.openslx.bwlp.thrift.iface.ImageVersionWrite; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.QuitNotification; import org.openslx.dozmod.gui.helper.UiFeedback; @@ -64,8 +65,7 @@ public class ImageUpdateWizard extends Wizard implements UiFeedback, QuitNotific if (state.isRestricted) { Gui.showMessageBox( null, - "Unerwarteter Fehler beim Setzen der Option" - + " 'Enthält lizenzpflichtige Software' für diese Virtuelle Maschine.", + I18n.WIZARD.getString("ImageUpdate.Message.error.updateImageVersionFailed"), MessageType.WARNING, LOGGER, e); } } @@ -85,7 +85,7 @@ public class ImageUpdateWizard extends Wizard implements UiFeedback, QuitNotific protected boolean onCancelRequest() { if (state.uuid == null) return true; - boolean confirmed = Gui.showMessageBox(this, "Möchten Sie den Vorgang wirklich abbrechen?", + boolean confirmed = Gui.showMessageBox(this, I18n.WIZARD.getString("ImageUpdate.Message.yesNo.cancelRequest"), MessageType.QUESTION_YESNO, null, null); if (confirmed && state.upload != null) { QuickTimer.scheduleOnce(new Task() { @@ -110,7 +110,7 @@ public class ImageUpdateWizard extends Wizard implements UiFeedback, QuitNotific @Override public String getWindowTitle() { - return "Neue VM-Version"; + return I18n.WIZARD.getString("ImageUpdate.Wizard.title"); } @Override diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/LectureWizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/LectureWizard.java index 577cd16e..a5b235a9 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/LectureWizard.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/LectureWizard.java @@ -9,6 +9,7 @@ import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.bwlp.thrift.iface.LectureWrite; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.gui.window.LectureListWindow; @@ -61,12 +62,12 @@ public class LectureWizard extends Wizard implements UiFeedback { @Override public String getWindowTitle() { - return "Neue Veranstaltung erzeugen"; + return I18n.WIZARD.getString("Lecture.Wizard.title"); } @Override protected boolean onCancelRequest() { - return Gui.showMessageBox(this, "Möchten Sie den Vorgang wirklich abbrechen?", + return Gui.showMessageBox(this, I18n.WIZARD.getString("Lecture.Message.yesNo.cancelRequest"), MessageType.QUESTION_YESNO, null, null); } @@ -109,7 +110,7 @@ public class LectureWizard extends Wizard implements UiFeedback { } // all good, refresh cache and change to LectureList - Gui.showMessageBox(this, "Veranstaltung erstellt!", MessageType.INFO, null, null); + Gui.showMessageBox(this, I18n.WIZARD.getString("Lecture.Message.info.finish"), MessageType.INFO, null, null); LectureCache.get(true); MainWindow.showPage(LectureListWindow.class); return true; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/Wizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/Wizard.java index 35cacd2f..2907ebc4 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/Wizard.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/Wizard.java @@ -25,6 +25,7 @@ import javax.swing.SwingConstants; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.util.ResourceLoader; @SuppressWarnings("serial") @@ -78,10 +79,10 @@ public abstract class Wizard extends JDialog { footer.setLayout(new BoxLayout(footer, BoxLayout.LINE_AXIS)); footer.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); footer.add(Box.createHorizontalGlue()); - btnPrev = new JButton("< Zurück"); - btnNext = new JButton("Weiter >"); - btnCancel = new JButton("Abbrechen"); - btnFinish = new JButton("Fertigstellen"); + btnPrev = new JButton(I18n.WIZARD.getString("Wizard.Button.prev.text")); + btnNext = new JButton(I18n.WIZARD.getString("Wizard.Button.next.text")); + btnCancel = new JButton(I18n.WIZARD.getString("Wizard.Button.cancel.text")); + btnFinish = new JButton(I18n.WIZARD.getString("Wizard.Button.finish.text.0")); footer.add(btnPrev); footer.add(btnNext); footer.add(Box.createRigidArea(new Dimension(10, 10))); @@ -342,7 +343,7 @@ public abstract class Wizard extends JDialog { isPostFinish = true; btnPrev.setVisible(false); btnNext.setVisible(false); - btnFinish.setText("Schließen"); + btnFinish.setText(I18n.WIZARD.getString("Wizard.Button.finish.text.1")); postFinishPage.setVisible(false); contentPanel.add(postFinishPage); showPage(-1); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageCustomPermissionPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageCustomPermissionPageLayout.java index e833090b..c4e94f88 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageCustomPermissionPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageCustomPermissionPageLayout.java @@ -10,6 +10,7 @@ import javax.swing.JPanel; import org.openslx.dozmod.gui.configurator.ImagePermissionConfigurator; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; @@ -30,8 +31,8 @@ public class ImageCustomPermissionPageLayout extends WizardPage { * @param wizard */ public ImageCustomPermissionPageLayout(Wizard wizard) { - super(wizard, "Berechtigungen festlegen"); - setDescription("Legen Sie hier die gewünschten Berechtigungen fest."); + super(wizard, I18n.PAGE_LAYOUT.getString("ImageCustomPermission.WizardPage.title")); + setDescription(I18n.PAGE_LAYOUT.getString("ImageCustomPermission.WizardPage.description")); GridManager grid = new GridManager(this, 1, false); // custom permissions @@ -40,25 +41,29 @@ public class ImageCustomPermissionPageLayout extends WizardPage { grid.nextRow(); // -- default permissions -- - JLabel defaultPermLabel = new JLabel("Standardberechtigungen"); + JLabel defaultPermLabel = new JLabel( + I18n.PAGE_LAYOUT.getString("ImageCustomPermission.Label.defaultPerm.text")); defaultPermLabel.setBorder(BorderFactory.createEmptyBorder(10, 5, 0, 0)); defaultPermLabel.setFont(defaultPermLabel.getFont().deriveFont(Font.BOLD)); grid.add(defaultPermLabel); - JLabel defaultDescriptionLabel = new JLabel("<html><body style ='width:100%'> " - + "Legen Sie hier die Berechtigungen für alle anderen (nicht in der Liste " - + "angezeigten) Benutzer fest.</body></html>"); + JLabel defaultDescriptionLabel = new JLabel( + I18n.PAGE_LAYOUT.getString("ImageCustomPermission.Label.defaultDesc.text")); defaultDescriptionLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); grid.add(defaultDescriptionLabel).fill(true, false).expand(true, false); JPanel permissionsPanel = new JPanel(); permissionsPanel.setLayout(new BoxLayout(permissionsPanel, BoxLayout.LINE_AXIS)); - chkPermissionLink = new JCheckBox("Verlinken"); + chkPermissionLink = new JCheckBox( + I18n.PAGE_LAYOUT.getString("ImageCustomPermission.CheckBox.permissionLink.text")); chkPermissionLink.setSelected(true); - chkPermissionRead = new JCheckBox("Download"); + chkPermissionRead = new JCheckBox( + I18n.PAGE_LAYOUT.getString("ImageCustomPermission.CheckBox.permissionRead.text")); chkPermissionRead.setSelected(true); - chkPermissionEdit = new JCheckBox("Bearbeiten"); - chkPermissionAdmin = new JCheckBox("Admin"); + chkPermissionEdit = new JCheckBox( + I18n.PAGE_LAYOUT.getString("ImageCustomPermission.CheckBox.permissionEdit.text")); + chkPermissionAdmin = new JCheckBox( + I18n.PAGE_LAYOUT.getString("ImageCustomPermission.CheckBox.permissionAdmin.text")); permissionsPanel.add(chkPermissionLink); permissionsPanel.add(chkPermissionRead); permissionsPanel.add(chkPermissionEdit); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java index 358fdd0d..707959f3 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java @@ -11,6 +11,7 @@ import org.openslx.dozmod.gui.control.ComboBox; import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; import org.openslx.thrifthelper.Comparators; @@ -32,12 +33,12 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { * @param wizard */ public ImageMetaDataPageLayout(Wizard wizard) { - super(wizard, "Metadaten"); - setDescription("Geben Sie bitte einen aussagekräftigen Namen für die neue VM ein."); + super(wizard, I18n.PAGE_LAYOUT.getString("ImageMetaData.WizardPage.title")); + setDescription(I18n.PAGE_LAYOUT.getString("ImageMetaData.WizardPage.description")); GridManager grid = new GridManager(this, 2, false); - QLabel osCaption = new QLabel("Betriebssystem"); + QLabel osCaption = new QLabel(I18n.PAGE_LAYOUT.getString("ImageMetaData.Label.OS.text")); cboOperatingSystem = new ComboBox<>(Comparators.operatingSystem, new ComboBoxRenderer<OperatingSystem>() { @Override public String renderItem(OperatingSystem item) { @@ -50,7 +51,7 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { grid.add(osCaption); grid.add(cboOperatingSystem); - sCommandCaption = new QLabel("Startbefehl"); + sCommandCaption = new QLabel(I18n.PAGE_LAYOUT.getString("ImageMetaData.Label.startCommand.text")); startCommand = new JTextArea(1, 50); startCommand.setMinimumSize(Gui.getScaledDimension(0, 35)); startCommand.setLineWrap(true); @@ -62,7 +63,7 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { grid.add(startCommandPane).fill(true, false).expand(true, false); grid.nextRow(); - QLabel descriptionCaption = new QLabel("Beschreibung"); + QLabel descriptionCaption = new QLabel(I18n.PAGE_LAYOUT.getString("ImageMetaData.Label.description.text")); txtDescription = new JTextArea(5, 50); txtDescription.setMinimumSize(Gui.getScaledDimension(0, 70)); txtDescription.setLineWrap(true); @@ -74,13 +75,14 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { grid.add(descPane).fill(true, false).expand(true, false); grid.nextRow(); - chkLicenseRestricted = new JCheckBox("VM enthält lizenzpflichtige Software"); + chkLicenseRestricted = new JCheckBox( + I18n.PAGE_LAYOUT.getString("ImageMetaData.CheckBox.licenseRestricted.text")); chkLicenseRestricted.setSelected(true); grid.add(chkLicenseRestricted, 2); grid.nextRow(); // -- end permissions group -- - chkIsTemplate = new JCheckBox("Vorlage erstellen"); + chkIsTemplate = new JCheckBox(I18n.PAGE_LAYOUT.getString("ImageMetaData.CheckBox.isTemplate.text")); grid.add(chkIsTemplate, 2); grid.nextRow(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadPageLayout.java index 6f0e0afc..ceb1ed58 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadPageLayout.java @@ -11,6 +11,7 @@ import javax.swing.JTextField; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; @@ -28,29 +29,30 @@ public abstract class ImageUploadPageLayout extends WizardPage { * Page for uploading an imagefile */ public ImageUploadPageLayout(Wizard wizard) { - super(wizard, "Neue VM anlegen"); - setDescription("Bitte wählen Sie eine Virtuelle Maschine zum Hochladen aus."); + super(wizard, I18n.PAGE_LAYOUT.getString("ImageUpload.WizardPage.title")); + setDescription(I18n.PAGE_LAYOUT.getString("ImageUpload.WizardPage.description")); GridManager grid = new GridManager(this, 3, false); // -- Browse for VM -- - QLabel imageFileCaption = new QLabel("Virtuelle Maschine"); + QLabel imageFileCaption = new QLabel(I18n.PAGE_LAYOUT.getString("ImageUpload.Label.imageFile.text")); txtImageFile = new JTextField(); txtImageFile.setEditable(false); - btnBrowseForImage = new JButton("Durchsuchen"); + btnBrowseForImage = new JButton(I18n.PAGE_LAYOUT.getString("ImageUpload.Button.browseForImage.text")); btnBrowseForImage.setMnemonic(KeyEvent.VK_B); grid.add(imageFileCaption); grid.add(txtImageFile).fill(true, false).expand(true, false); grid.add(btnBrowseForImage); grid.nextRow(); - lblImageName = new QLabel("Name"); + lblImageName = new QLabel(I18n.PAGE_LAYOUT.getString("ImageUpload.Label.imageName.text")); txtImageName = new JTextField(); grid.add(lblImageName); grid.add(txtImageName, 2, 1).fill(true, false).expand(true, false); grid.nextRow(); // -- Software license changed - shown only in UploadWizard -- - chkLicenseRestricted = new JCheckBox("enthält lizenzpflichtige Software"); + chkLicenseRestricted = new JCheckBox( + I18n.PAGE_LAYOUT.getString("ImageUpload.CheckBox.licenseRestricted.text")); chkLicenseRestricted.setVisible(false); grid.skip(); grid.add(chkLicenseRestricted, 2, 1).fill(false, false).expand(true, false); @@ -59,18 +61,14 @@ public abstract class ImageUploadPageLayout extends WizardPage { grid.add(Box.createVerticalGlue(), 3).expand(true, true); txtInfoText = new JTextArea(); - txtInfoText.setBorder(BorderFactory.createTitledBorder("Hinweis")); + txtInfoText.setBorder(BorderFactory.createTitledBorder( + I18n.PAGE_LAYOUT.getString("ImageUpload.TextArea.info.title"))); txtInfoText.setLineWrap(true); txtInfoText.setWrapStyleWord(true); txtInfoText.setEditable(false); txtInfoText.setFocusable(false); txtInfoText.setOpaque(false); - txtInfoText.setText("Haben Sie noch keine eigene Virtuelle Maschine erstellt," - + " können Sie sich in der Übersicht eine Virtuelle Maschine als Vorlage herunterladen," - + " diese an Ihre Bedürfnisse anpassen und anschließend über diesen Assistenten hochladen." - + "\n\nWenn Sie die VM einer bestehenden Veranstaltung aktualisieren möchten," - + " öffnen Sie die Detailansicht der bestehenden VM und wählen Sie 'Neue VM-Version hochladen'." - + " Dadurch bleiben bestehende Berechtigungen, sowie Verknüpfungen zu Veranstaltungen erhalten."); + txtInfoText.setText(I18n.PAGE_LAYOUT.getString("ImageUpload.TextArea.info.text")); grid.add(txtInfoText, 3).fill(true, false).expand(true, false); grid.nextRow(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadSummaryPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadSummaryPageLayout.java index c53fd907..1781a1d9 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadSummaryPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadSummaryPageLayout.java @@ -6,6 +6,7 @@ import javax.swing.JLabel; import org.openslx.dozmod.gui.control.BlockProgressBar; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; @@ -17,8 +18,8 @@ public class ImageUploadSummaryPageLayout extends WizardPage { protected final JLabel lblHelpText; public ImageUploadSummaryPageLayout(Wizard wizard) { - super(wizard, "Fertig!"); - setDescription("Assistent abgeschlossen"); + super(wizard, I18n.PAGE_LAYOUT.getString("ImageUploadSummary.WizardPage.title")); + setDescription(I18n.PAGE_LAYOUT.getString("ImageUploadSummary.WizardPage.description")); GridManager grid = new GridManager(this, 1); ctlUploadProgressBar = new BlockProgressBar(null); @@ -36,7 +37,7 @@ public class ImageUploadSummaryPageLayout extends WizardPage { grid.add(Box.createVerticalGlue()).expand(true, true); grid.nextRow(); - chkCreateLecture = new JCheckBox("Veranstaltung zu dieser VM erstellen"); + chkCreateLecture = new JCheckBox(I18n.PAGE_LAYOUT.getString("ImageUploadSummary.CheckBox.createLecture.text")); chkCreateLecture.setVisible(false); grid.add(chkCreateLecture); grid.nextRow(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java index 5df21c1d..91abcf92 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java @@ -13,6 +13,7 @@ import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.QDatePickerImpl; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; @@ -35,12 +36,12 @@ public abstract class LectureCreationPageLayout extends WizardPage { */ public LectureCreationPageLayout(Wizard wizard, String title) { super(wizard, title); - setDescription("Geben Sie bitte einen aussagekräftigen Namen für die neue Veranstaltung ein."); + setDescription(I18n.PAGE_LAYOUT.getString("LectureCreation.WizardPage.description")); GridManager grid = new GridManager(this, 3); // lecture name txtName = new JTextField(); - grid.add(new QLabel("Veranstaltungsname")); + grid.add(new QLabel(I18n.PAGE_LAYOUT.getString("LectureCreation.Label.name.text"))); grid.add(txtName, 2).fill(true, false).expand(true, false); grid.nextRow(); @@ -51,26 +52,26 @@ public abstract class LectureCreationPageLayout extends WizardPage { JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); txtDescription.setMinimumSize(Gui.getScaledDimension(0, 60)); descPane.setMinimumSize(txtDescription.getMinimumSize()); - grid.add(new QLabel("Beschreibung")); + grid.add(new QLabel(I18n.PAGE_LAYOUT.getString("LectureCreation.Label.description.text"))); grid.add(descPane, 2).fill(true, false).expand(true, false); grid.nextRow(); // Start date/time dtpStartDate = new QDatePickerImpl(); spnStartTime = makeTimeSpinner(0, 0); - grid.add(new QLabel("Startdatum")); + grid.add(new QLabel(I18n.PAGE_LAYOUT.getString("LectureCreation.Label.startTime.text"))); grid.add(dtpStartDate).fill(true, false).expand(true, false); grid.add(spnStartTime); grid.nextRow(); dtpEndDate = new QDatePickerImpl(); spnEndTime = makeTimeSpinner(23, 59); - grid.add(new QLabel("Enddatum")); + grid.add(new QLabel(I18n.PAGE_LAYOUT.getString("LectureCreation.Label.endTime.text"))); grid.add(dtpEndDate).fill(true, false).expand(true, false); grid.add(spnEndTime); grid.nextRow(); - grid.add(new QLabel("Dauer der Veranstaltung: ")); + grid.add(new QLabel(I18n.PAGE_LAYOUT.getString("LectureCreation.Label.period.text"))); lblCalcPeriod = new QLabel(); grid.add(lblCalcPeriod, 2); grid.nextRow(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCustomPermissionPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCustomPermissionPageLayout.java index 64afc4df..0615fb0b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCustomPermissionPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCustomPermissionPageLayout.java @@ -10,6 +10,7 @@ import javax.swing.JPanel; import org.openslx.dozmod.gui.configurator.LecturePermissionConfigurator; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; @@ -26,8 +27,8 @@ public abstract class LectureCustomPermissionPageLayout extends WizardPage { * Page for setting custom permissions of a lecture */ public LectureCustomPermissionPageLayout(Wizard wizard) { - super(wizard, "Berechtigungen festlegen"); - setDescription("Legen Sie hier die gewünschten Berechtigungen fest."); + super(wizard, I18n.PAGE_LAYOUT.getString("LectureCustomPermission.WizardPage.title")); + setDescription(I18n.PAGE_LAYOUT.getString("LectureCustomPermission.WizardPage.description")); GridManager grid = new GridManager(this, 1, false); lectureCustomPermissionManager = new LecturePermissionConfigurator(); @@ -35,21 +36,23 @@ public abstract class LectureCustomPermissionPageLayout extends WizardPage { grid.nextRow(); // -- default permissions -- - JLabel defaultPermLabel = new JLabel("Standardberechtigungen"); + JLabel defaultPermLabel = new JLabel( + I18n.PAGE_LAYOUT.getString("LectureCustomPermission.Label.defaultPerm.text")); defaultPermLabel.setBorder(BorderFactory.createEmptyBorder(10, 5, 0, 0)); defaultPermLabel.setFont(defaultPermLabel.getFont().deriveFont(Font.BOLD)); grid.add(defaultPermLabel); - JLabel defaultDescriptionLabel = new JLabel("<html><body style ='width:100%'> " - + "Legen Sie hier die Berechtigungen für alle anderen (nicht in der Liste " - + "angezeigten) Benutzer fest.</body></html>"); + JLabel defaultDescriptionLabel = new JLabel( + I18n.PAGE_LAYOUT.getString("LectureCustomPermission.Label.defaultDesc.text")); defaultDescriptionLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); grid.add(defaultDescriptionLabel).fill(true, false).expand(true, false); JPanel permissionsPanel = new JPanel(); permissionsPanel.setLayout(new BoxLayout(permissionsPanel, BoxLayout.LINE_AXIS)); - chkPermissionEdit = new JCheckBox("Bearbeiten"); - chkPermissionAdmin = new JCheckBox("Admin"); + chkPermissionEdit = new JCheckBox( + I18n.PAGE_LAYOUT.getString("LectureCustomPermission.CheckBox.permissionEdit.text")); + chkPermissionAdmin = new JCheckBox( + I18n.PAGE_LAYOUT.getString("LectureCustomPermission.CheckBox.permissionAdmin.text")); permissionsPanel.add(chkPermissionEdit); permissionsPanel.add(chkPermissionAdmin); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureImageListPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureImageListPageLayout.java index 7461df1e..ef7baf36 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureImageListPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureImageListPageLayout.java @@ -3,6 +3,7 @@ package org.openslx.dozmod.gui.wizard.layout; import org.openslx.dozmod.gui.control.ImageListViewer; import org.openslx.dozmod.gui.control.ImageListViewer.FilterType; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; @@ -15,8 +16,8 @@ public abstract class LectureImageListPageLayout extends WizardPage { * Page for setting custom permissions of a lecture */ public LectureImageListPageLayout(Wizard wizard) { - super(wizard, "VM verknüpfen"); - setDescription("Wählen Sie eine VM für diese Veranstaltung aus"); + super(wizard, I18n.PAGE_LAYOUT.getString("LectureImageList.WizardPage.title")); + setDescription(I18n.PAGE_LAYOUT.getString("LectureImageList.WizardPage.description")); GridManager grid = new GridManager(this, 1, false); ctlImageList = new ImageListViewer(FilterType.USABLE); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureLocationSelectionPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureLocationSelectionPageLayout.java index 929b55b8..bd86e86c 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureLocationSelectionPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureLocationSelectionPageLayout.java @@ -3,6 +3,7 @@ package org.openslx.dozmod.gui.wizard.layout; import org.apache.log4j.Logger; import org.openslx.dozmod.gui.control.LocationSelector; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; @@ -14,8 +15,8 @@ public class LectureLocationSelectionPageLayout extends WizardPage { protected final LocationSelector ctlLocationSelector; public LectureLocationSelectionPageLayout(Wizard wizard) { - super(wizard, "Raumauswahl"); - setDescription("Bitte wählen Sie die Räume für diese Veranstaltung aus"); + super(wizard, I18n.PAGE_LAYOUT.getString("LectureLocationSelection.WizardPage.title")); + setDescription(I18n.PAGE_LAYOUT.getString("LectureLocationSelection.WizardPage.description")); ctlLocationSelector = new LocationSelector(); GridManager grid = new GridManager(this, 1); grid.add(ctlLocationSelector).fill(true, true).expand(true, true); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureOptionsPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureOptionsPageLayout.java index 86c68e44..28c04d81 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureOptionsPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureOptionsPageLayout.java @@ -5,13 +5,14 @@ import javax.swing.JCheckBox; import javax.swing.JLabel; import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; @SuppressWarnings("serial") public abstract class LectureOptionsPageLayout extends WizardPage { - protected static String title = "Zusätzliche Optionen"; + protected static String title = I18n.PAGE_LAYOUT.getString("LectureOptions.WizardPage.title"); protected final JCheckBox chkUsbEnabled; protected final JCheckBox chkInternetEnabled; @@ -24,23 +25,23 @@ public abstract class LectureOptionsPageLayout extends WizardPage { */ public LectureOptionsPageLayout(Wizard wizard) { super(wizard, title); - setDescription("Bitte wählen Sie aus folgenden Optionen aus:"); + setDescription(I18n.PAGE_LAYOUT.getString("LectureOptions.WizardPage.description")); GridManager grid = new GridManager(this, 2); // first column for labels hopefully clearing up some of the mess... // first category for general options - JLabel lblGeneral = new JLabel("Allgemeines"); + JLabel lblGeneral = new JLabel(I18n.PAGE_LAYOUT.getString("LectureOptions.Label.general.text")); grid.add(lblGeneral); - chkAutoUpdate = new JCheckBox("Immer auf aktuellste VM-Version updaten", true); + chkAutoUpdate = new JCheckBox(I18n.PAGE_LAYOUT.getString("LectureOptions.CheckBox.autoUpdate.text"), true); grid.add(chkAutoUpdate); grid.nextRow(); - chkIsActive = new JCheckBox("Veranstaltung ist aktiv", true); + chkIsActive = new JCheckBox(I18n.PAGE_LAYOUT.getString("LectureOptions.CheckBox.isActive.text"), true); grid.skip(); grid.add(chkIsActive); grid.nextRow(); - chkIsExam = new JCheckBox("Veranstaltung ist eine Prüfung", false); + chkIsExam = new JCheckBox(I18n.PAGE_LAYOUT.getString("LectureOptions.CheckBox.isExam.text"), false); grid.skip(); grid.add(chkIsExam); grid.nextRow(); @@ -48,15 +49,16 @@ public abstract class LectureOptionsPageLayout extends WizardPage { grid.add(Box.createVerticalStrut(10), 2); grid.nextRow(); // second category for restrictions options - JLabel lblRestriction = new JLabel("Beschränkungen"); + JLabel lblRestriction = new JLabel(I18n.PAGE_LAYOUT.getString("LectureOptions.Label.restrictions.text")); grid.add(lblRestriction); - chkInternetEnabled = new JCheckBox("Netzwerk-/Internetzugriff zulassen", true); + chkInternetEnabled = new JCheckBox(I18n.PAGE_LAYOUT.getString("LectureOptions.CheckBox.internetEnabled.text"), + true); // TODO: Hint at exception editor in lecture details window, or include here... grid.add(chkInternetEnabled).fill(true, false).expand(true, false); grid.nextRow(); - chkUsbEnabled = new JCheckBox("Speichermedien zulassen", true); + chkUsbEnabled = new JCheckBox(I18n.PAGE_LAYOUT.getString("LectureOptions.CheckBox.USBEnabled.text"), true); grid.skip(); grid.add(chkUsbEnabled); grid.nextRow(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureRestrictionPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureRestrictionPageLayout.java index 85c508ae..02e9d7b4 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureRestrictionPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureRestrictionPageLayout.java @@ -1,5 +1,6 @@ package org.openslx.dozmod.gui.wizard.layout; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; @@ -7,7 +8,7 @@ import org.openslx.dozmod.gui.wizard.WizardPage; public class LectureRestrictionPageLayout extends WizardPage { public LectureRestrictionPageLayout(Wizard wizard) { - super(wizard, "Beschränkungen"); + super(wizard, I18n.PAGE_LAYOUT.getString("LectureRestriction.WizardPage.title")); } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java index 1ec57fce..6394ef79 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java @@ -9,6 +9,7 @@ import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.OperatingSystem; import org.openslx.bwlp.thrift.iface.ShareMode; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.TextChangeListener; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.layout.ImageMetaDataPageLayout; @@ -113,7 +114,7 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { private void reactToUserInput() { if (cboOperatingSystem.getSelectedIndex() == -1) { // OS empty, description input present - setWarningMessage("Wählen Sie das Betriebssystem aus."); + setWarningMessage(I18n.PAGE.getString("ImageMetaData.WizardPage.warningMessage.noOS")); setPageComplete(false); return; } @@ -127,11 +128,11 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { state.description = txtDescription.getText(); if (state.description == null || state.description.isEmpty()) { // OS set, no description - setWarningMessage("Fügen Sie eine Beschreibung hinzu."); + setWarningMessage(I18n.PAGE.getString("ImageMetaData.WizardPage.warningMessage.noDescription")); setPageComplete(false); return; } - setDescription("Klicken Sie auf 'Weiter' um Berechtigungen festzulegen oder 'Fertigstellen'"); + setDescription(I18n.PAGE.getString("ImageMetaData.WizardPage.description")); setPageComplete(true); } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java index d8d8b17e..cf42ed82 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java @@ -20,6 +20,7 @@ import org.openslx.bwlp.thrift.iface.Virtualizer; import org.openslx.dozmod.Branding; import org.openslx.dozmod.Config; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.QFileChooser; import org.openslx.dozmod.gui.wizard.Wizard; @@ -161,7 +162,9 @@ public class ImageUploadPage extends ImageUploadPageLayout { // gets the metadata object of the selected VM depending on its type state.meta = VmMetaData.getInstance(MetaDataCache.getOperatingSystems(), file); } catch (IOException e) { - Gui.showMessageBox(this, "Konnte " + file.getPath() + " nicht lesen", MessageType.ERROR, LOGGER, e); + Gui.showMessageBox(this, + I18n.PAGE.getString("ImageUpload.Message.error.couldNotGetMetadata", file.getPath()), + MessageType.ERROR, LOGGER, e); setPageComplete(false); return; } @@ -174,7 +177,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { } if (state.meta == null || state.meta.getDisplayName() == null) { - setErrorMessage("Ungültige Konfigurationsdatei ausgewählt!"); + setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.invalidConfigFile")); setPageComplete(false); return; } @@ -182,8 +185,8 @@ public class ImageUploadPage extends ImageUploadPageLayout { final String fileformat = state.meta.getVirtualizer().virtName; // bail if multiple hypervisors are not supported if (!(state.meta instanceof VmwareMetaData) && !Session.hasFeature(Feature.MULTIPLE_HYPERVISORS)) { - setErrorMessage("Der Hypervisor der gewählten VM (" + fileformat - + ") wird vom aktuellen Satellitenserver nicht unterstützt."); + setErrorMessage( + I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.hypervisorNotSupported", fileformat)); setPageComplete(false); return; } @@ -193,19 +196,20 @@ public class ImageUploadPage extends ImageUploadPageLayout { String existingImageVirtualizerName = "<error>"; if (existingImageVirtualizer != null) existingImageVirtualizerName = existingImageVirtualizer.virtName; - setErrorMessage("Neue Versionen müssen vom Typ " + existingImageVirtualizerName + " sein."); + setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.VMTypeChanged", + existingImageVirtualizerName)); setPageComplete(false); return; } List<HardDisk> hdds = state.meta.getHdds(); if (hdds.size() == 0 || hdds.get(0).diskImage == null) { - setErrorMessage("Die gewählte " + fileformat + "-Datei enthält keine virtuelle Festplatte!"); + setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.noHDD", fileformat)); setPageComplete(false); return; } if (hdds.size() > 1) { - setErrorMessage("Die gewählte " + fileformat + "-Datei enthält mehr als eine virtuelle Festplatte!"); + setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.moreThanOneHDD", fileformat)); setPageComplete(false); return; // Allow to continue!? @@ -222,15 +226,18 @@ public class ImageUploadPage extends ImageUploadPageLayout { try { diskImage = new DiskImage(vmDiskFileInfo); } catch (FileNotFoundException e) { - setErrorMessage("'" + vmDiskFileInfo.getName() + "' kann nicht gefunden werden!"); + setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageNotFound", + vmDiskFileInfo.getName())); setPageComplete(false); return; } catch (IOException e) { - setErrorMessage("'" + vmDiskFileInfo.getName() + "' kann nicht gelesen werden!"); + setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageNotReadable", + vmDiskFileInfo.getName())); setPageComplete(false); return; } catch (UnknownImageFormatException e) { - setErrorMessage("'" + vmDiskFileInfo.getName() + "' hat unbekanntes Dateiformat!"); + setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageHasUnknownFormat", + vmDiskFileInfo.getName())); LOGGER.debug("Selected disk file has unknown format.", e); setPageComplete(false); return; @@ -238,20 +245,17 @@ public class ImageUploadPage extends ImageUploadPageLayout { // Warn user about snapshot if (diskImage.isSnapshot || state.meta.isMachineSnapshot()) { - Gui.showMessageBox("Von der ausgewählten VM wurde ein Snapshot erstellt. In diesem Zustand kann\n" - + "die VM leider nicht ins " + Branding.getServiceName() - + "-System geladen werden. Bitte konsolidieren Sie zunächst\n" - + "den Snapshot und versuchen Sie es erneut.", MessageType.WARNING, null, null); - setErrorMessage("Die gewählte VM befindet sich im Snapshot-Zustand."); + Gui.showMessageBox( + I18n.PAGE.getString("ImageUpload.Message.warning.diskImageSnapshot", Branding.getServiceName()), + MessageType.WARNING, null, null); + setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageSnapshot")); setPageComplete(false); return; } if (!diskImage.isStandalone) { - Gui.showMessageBox("Die zu dieser VM gehörige Virtuelle Festplatte ist im Format '" + diskImage.subFormat - + "'.\n" + "Dieses Format wird von " + Branding.getApplicationName() - + " nicht unterstützt. Bitte konvertieren Sie die VM\n" + "in das Format 'monolithicSparse'.", - MessageType.WARNING, null, null); - setErrorMessage("Die VMDK Datei der VM hat ein inkompatibles Format"); + Gui.showMessageBox(I18n.PAGE.getString("ImageUpload.Message.warning.diskImageStandalone", + diskImage.subFormat, Branding.getApplicationName()), MessageType.WARNING, null, null); + setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageStandalone")); setPageComplete(false); return; } @@ -272,7 +276,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { txtImageFile.setText(file.getAbsolutePath()); // let the user know the upload is ready setErrorMessage(null); - setDescription("Sie können jetzt den Upload starten."); + setDescription(I18n.PAGE.getString("ImageUpload.WizardPage.description")); setPageComplete(true); } @@ -281,12 +285,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { File file = new File(lockFile); if (!file.exists()) continue; - return !Gui.showMessageBox(this, - "Die gewählte VM scheint noch in Verwendung zu sein. Bitte fahren Sie die VM\n" - + "vor dem Hochladen herunter und schließen Sie den VMware Player, ansonsten\n" - + "kann die VM nach dem Hochladen beschädigt sein.\n\n" - + "Möchten Sie diese Warnung ignorieren und trotzdem fortfahren?\n" - + "(Sie sollten sich sicher sein, was sie tun, wenn Sie hier 'Ja' wählen)", + return !Gui.showMessageBox(this, I18n.PAGE.getString("ImageUpload.Message.yesNo.cancelLockFile"), MessageType.QUESTION_YESNO, null, null); } return false; @@ -311,7 +310,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { // Check for vmware player lock files - warn user if found, might corrupt upload if (askCancelLockFile(state.descriptionFile.getAbsolutePath() + ".lck", state.diskFile.getAbsolutePath() + ".lck")) { - setErrorMessage("Die gewählte VM wird noch verwendet"); + setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.cancelLockFile")); return false; } @@ -342,7 +341,8 @@ public class ImageUploadPage extends ImageUploadPageLayout { ThriftError.showMessage(this, LOGGER, e.exception, e.displayMessage); return false; } catch (IOException e) { - Gui.showMessageBox(this, "Upload-Initialisierung fehlgeschlagen", MessageType.ERROR, LOGGER, e); + Gui.showMessageBox(this, I18n.PAGE.getString("ImageUpload.Message.error.uploadInitiatorFailed"), + MessageType.ERROR, LOGGER, e); return false; } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java index 9b564979..73b158c0 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java @@ -11,6 +11,7 @@ import org.openslx.dozmod.filetransfer.TransferEvent; import org.openslx.dozmod.filetransfer.TransferEventListener; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.LectureWizard; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.layout.ImageUploadSummaryPageLayout; @@ -73,35 +74,28 @@ public class ImageUploadSummaryPage extends ImageUploadSummaryPageLayout { private void updateInfoText(final UploadInitState initState) { String text; if (state.upload.getUploadTask() != null && state.upload.getUploadTask().isComplete()) { - text = "Die Virtuelle Maschine wurde erfolgreich auf den Server hochgeladen."; + text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.completed"); } else if (initState == null) { return; } else { switch (initState) { case REQUESTING: - text = "Der Upload-Vorgang wird mit dem Server ausgehandelt..."; + text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.requesting"); break; case WAITING_FOR_SLOT: - text = "Der Server ist zur Zeit überlastet, da zu viele Uploads gleichzeitig laufen." - + " Es wird gewartet, bis der Server wieder Kapazitäten frei hat." - + " Bitte schließen Sie dieses Fenster nicht."; + text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.waitingForSlot"); break; case UPLOAD_STARTING: - text = "Die Verbindung zur Übertragung der VM wird aufgebaut..."; + text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.uploadStarting"); break; case UPLOAD_STARTED: - text = "Der Upload Ihrer Virtuellen Maschine wurde gestartet." - + " Wenn Sie möchten, können Sie diesen Assistenten schließen," - + " und die Anwendung weiterverwenden." - + " Die Übertragung läuft dabei im Hintergrund weiter."; + text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.uploadStarted"); break; case ERROR: - text = "Die Initialisierung des Uploads auf den Server ist fehlgeschlagen." - + " Sie können versuchen, den Vorgang erneut zu starten." - + " Falls das Problem weiterhin besteht," - + " kontaktieren Sie den " + Branding.getServiceName() + "-Support Ihrer Einrichtung."; + text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.error", Branding.getServiceName()); if (state.upload.getErrorMessage() != null) { - text += "<br><br>Weitere Informationen:<br>" + state.upload.getErrorMessage(); + text += I18n.PAGE.getString("ImageUploadSummary.UploadInitState.errorMoreInfo", + state.upload.getErrorMessage()); } break; default: diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureCreationPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureCreationPage.java index 9bb91409..17d71312 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureCreationPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureCreationPage.java @@ -10,6 +10,7 @@ import javax.swing.event.ChangeListener; import org.apache.log4j.Logger; import org.openslx.dozmod.gui.helper.DateTimeHelper; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.TextChangeListener; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.layout.LectureCreationPageLayout; @@ -32,7 +33,8 @@ public class LectureCreationPage extends LectureCreationPageLayout { * Page for creating lectures */ public LectureCreationPage(Wizard wizard, LectureWizardState state) { - super(wizard, state.image != null ? state.image.imageName : "Neu"); + super(wizard, state.image != null ? state.image.imageName + : I18n.PAGE.getString("LectureCreation.WizardPage.title")); this.state = state; // listener for the text fields @@ -92,23 +94,23 @@ public class LectureCreationPage extends LectureCreationPageLayout { Date start = DateTimeHelper.getDateFrom(dtpStartDate, spnStartTime); Date end = DateTimeHelper.getDateFrom(dtpEndDate, spnEndTime); if (end.before(start)) { - lblCalcPeriod.setText("Endzeitpunkt ist vor Startzeitpunkt!"); + lblCalcPeriod.setText(I18n.PAGE.getString("LectureCreation.Label.endBeforeStart.text")); } else { int numberOfDays = DateTimeHelper.calculatePeriodInDays(start, end); - lblCalcPeriod.setText(numberOfDays + "Tag(e)"); + lblCalcPeriod.setText(I18n.PAGE.getString("LectureCreation.Label.calcPeriod.text", numberOfDays)); lblCalcPeriod.setForeground(numberOfDays < 7 ? Color.RED : null); } } private boolean isPageValid() { if (txtName.getText().isEmpty()) { - setWarningMessage("Geben Sie einen Veranstaltungsnamen ein."); + setWarningMessage(I18n.PAGE.getString("LectureCreation.WizardPage.warningMessage.noName")); return false; } else { state.name = txtName.getText(); } if (txtDescription.getText().isEmpty()) { - setWarningMessage("Fügen Sie eine Beschreibung hinzu."); + setWarningMessage(I18n.PAGE.getString("LectureCreation.WizardPage.warningMessage.noDesc")); return false; } else { state.description = txtDescription.getText(); @@ -118,17 +120,18 @@ public class LectureCreationPage extends LectureCreationPageLayout { final Date end = DateTimeHelper.getDateFrom(dtpEndDate, spnEndTime); if (start.after(end)) { - setWarningMessage("Startzeit ist nach Endzeit!"); + setWarningMessage(I18n.PAGE.getString("LectureCreation.WizardPage.warningMessage.startAfterEnd")); return false; } else if (now.after(end)) { - setWarningMessage("Endzeit liegt in die Vergangenheit!"); + setWarningMessage(I18n.PAGE.getString("LectureCreation.WizardPage.warningMessage.nowAfterEnd")); return false; } else { int validityPeriod = Session.getSatelliteConfig().getMaxLectureValidityDays(); Date validityPeriodEnd = DateTimeHelper.addDaysTo(start, validityPeriod); // all good, save them both if (end.after(validityPeriodEnd)) { - setWarningMessage("Endzeit liegt nach dem spätest möglichen Datum: " - + FormatHelper.shortDate(validityPeriodEnd.getTime() / 1000L)); + setWarningMessage( + I18n.PAGE.getString("LectureCreation.WizardPage.warningMessage.endAfterLatestPossibleDate", + FormatHelper.shortDate(validityPeriodEnd.getTime() / 1000L))); return false; } else { state.start = start; @@ -136,9 +139,9 @@ public class LectureCreationPage extends LectureCreationPageLayout { } } String nextText; - nextText = state.image == null ? ", um eine Virtuelle Maschine auszuwählen" - : " für Berechtigungen oder 'Fertigstellen'."; - setDescription("Klicken Sie auf 'Weiter' " + nextText); + nextText = state.image == null ? I18n.PAGE.getString("LectureCreation.WizardPage.description.0") + : I18n.PAGE.getString("LectureCreation.WizardPage.description.1"); + setDescription(nextText); return true; } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureImageListPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureImageListPage.java index f19ab593..01f179c2 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureImageListPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureImageListPage.java @@ -10,6 +10,7 @@ import javax.swing.event.ListSelectionListener; import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.dozmod.gui.control.table.ImageTable; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.layout.LectureImageListPageLayout; import org.openslx.dozmod.permissions.ImagePerms; @@ -91,13 +92,13 @@ public class LectureImageListPage extends LectureImageListPageLayout { if (selected != null && selected.isValid && ImagePerms.canLink(selected)) { state.image = selected; state.imageVersionId = selected.getLatestVersionId(); - setDescription("Klicken Sie auf 'Weiter'"); + setDescription(I18n.PAGE.getString("LectureImageList.WizardPage.description")); return true; } if (selected != null && ImagePerms.canLink(selected)) { - setErrorMessage("Unzureichende Berechtigungen um auf diese VM zu verlinken."); + setErrorMessage(I18n.PAGE.getString("LectureImageList.WizardPage.errorMessage.noPerms")); } else { - setErrorMessage("Ungültige VM ausgewählt"); + setErrorMessage(I18n.PAGE.getString("LectureImageList.WizardPage.errorMessage.invalidVM")); } return false; } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureLocationSelectionPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureLocationSelectionPage.java index 7adf10d3..bcad47f8 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureLocationSelectionPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureLocationSelectionPage.java @@ -3,6 +3,7 @@ package org.openslx.dozmod.gui.wizard.page; import java.util.List; import org.apache.log4j.Logger; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.layout.LectureLocationSelectionPageLayout; import org.openslx.dozmod.state.LectureWizardState; @@ -30,7 +31,7 @@ public class LectureLocationSelectionPage extends LectureLocationSelectionPageLa List<Integer> locations = ctlLocationSelector.getSelectedLocationsAsIds(); boolean locationExclusive = ctlLocationSelector.getOnlyInSelection(); if (locations != null && locations.size() > Session.getSatelliteConfig().maxLocationsPerLecture) { - setErrorMessage("Zu viele Räume/Orte ausgewählt"); + setErrorMessage(I18n.PAGE.getString("LectureLocationSelection.WizardPage.errorMessage.tooManyLocations")); ctlLocationSelector.setSelectedLocationsAsIds(locations); return false; } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureOptionsPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureOptionsPage.java index a9d5bcef..45ca1d88 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureOptionsPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureOptionsPage.java @@ -3,6 +3,7 @@ package org.openslx.dozmod.gui.wizard.page; import java.util.List; import org.openslx.bwlp.thrift.iface.NetRule; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.layout.LectureOptionsPageLayout; import org.openslx.dozmod.state.LectureWizardState; @@ -49,7 +50,7 @@ public class LectureOptionsPage extends LectureOptionsPageLayout { state.netRules = currentNetrules; state.runScriptText = currentRunscript; - setDescription("Klicken Sie auf 'Weiter' für Berechtigungen oder 'Fertigstellen'."); + setDescription(I18n.PAGE.getString("LectureOptions.WizardPage.description")); return true; } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/GuiErrorCallback.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/GuiErrorCallback.java index 4267ea31..07146ead 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/GuiErrorCallback.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/GuiErrorCallback.java @@ -10,6 +10,7 @@ import org.openslx.bwlp.thrift.iface.TAuthorizationException; import org.openslx.dozmod.Config; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.Gui.GuiCallable; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.thrifthelper.ThriftManager.ErrorCallback; @@ -44,9 +45,9 @@ public class GuiErrorCallback implements ErrorCallback { return Gui.syncExec(new GuiCallable<Boolean>() { @Override public Boolean run() { - if (Gui.showMessageBox(parent, "Ungültiges Sitzungstoken oder fehlerhafte Authentifizierung am " + serverString + "!" + - //"\n" + errMsg + "\n" + - "\nBitte starten Sie das Programm neu. Jetzt beenden?", MessageType.ERROR_RETRY, LOGGER, t)) { + if (Gui.showMessageBox(parent, + I18n.THRIFT.getString("GuiErrorCallback.Message.error.notAuthenticatedOrInvalidToken", + serverString), MessageType.ERROR_RETRY, LOGGER, t)) { // user confirmed exit Config.saveCurrentSession("", "", ""); Gui.exit(0); @@ -64,11 +65,11 @@ public class GuiErrorCallback implements ErrorCallback { public Boolean run() { String errMsg = null; if (tex != null) { - errMsg = " (Fehler " + tex.getType() + ")"; + errMsg = I18n.THRIFT.getString("GuiErrorCallback.thriftError.String.errMsg", tex.getType()); } - return Gui.showMessageBox(parent, "Die Kommunikation mit " + serverString + " ist" - + " gestört. Der Aufruf der Funktion " + method + " ist fehlgeschlagen" + errMsg - + ".\n\n" + "Möchten Sie den Aufruf wiederholen?", MessageType.ERROR_RETRY, LOGGER, t); + return Gui.showMessageBox(parent, + I18n.THRIFT.getString("GuiErrorCallback.Message.error.transportException", + serverString, method, errMsg), MessageType.ERROR_RETRY, LOGGER, t); } }); } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageLocalDetailsActions.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageLocalDetailsActions.java index 11feba74..0bf1bfcb 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageLocalDetailsActions.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageLocalDetailsActions.java @@ -15,6 +15,7 @@ import org.openslx.bwlp.thrift.iface.TInvocationException; import org.openslx.bwlp.thrift.iface.TNotFoundException; import org.openslx.bwlp.thrift.iface.UserInfo; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.thrift.ThriftActions.DeleteCallback; import org.openslx.dozmod.thrift.ThriftActions.ImageMetaCallback; import org.openslx.thrifthelper.ThriftManager; @@ -74,7 +75,8 @@ public class ImageLocalDetailsActions implements ImageDetailsActions { try { ThriftActions.writeImagePermissions(imageBaseId, customPermissions); } catch (TException e) { - ThriftError.showMessage(parent, LOGGER, e, "Could not write permissions"); + ThriftError.showMessage(parent, LOGGER, e, + I18n.THRIFT.getString("ImageLocalDetailsActions.Message.error.writeImagePermissionsFailed")); } } }); @@ -105,7 +107,8 @@ public class ImageLocalDetailsActions implements ImageDetailsActions { ThriftManager.getSatClient().setImageVersionVirtConfig(Session.getSatelliteToken(), imageVersionId, machineDescription); success = true; } catch (TException e) { - ThriftError.showMessage(parent, LOGGER, e, "Fehler beim Speichern der VM-Konfiguration!"); + ThriftError.showMessage(parent, LOGGER, e, + I18n.THRIFT.getString("ImageLocalDetailsActions.Message.error.setVirtualizerConfigFailed")); } Gui.asyncExec(new Runnable() { @Override diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java index 27a77322..96c4d1f6 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java @@ -4,6 +4,7 @@ import java.awt.Frame; import java.awt.Window; import java.io.File; import java.io.FileNotFoundException; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -18,6 +19,7 @@ import org.apache.thrift.transport.TTransportException; import org.openslx.bwlp.thrift.iface.*; import org.openslx.bwlp.thrift.iface.SatelliteServer.Client; import org.openslx.dozmod.App; +import org.openslx.dozmod.Branding; import org.openslx.dozmod.Config; import org.openslx.dozmod.Config.SavedSession; import org.openslx.dozmod.authentication.Authenticator.AuthenticationData; @@ -27,6 +29,7 @@ import org.openslx.dozmod.filetransfer.TransferEventListener; import org.openslx.dozmod.gui.GraphicalCertHandler; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.QFileChooser; import org.openslx.dozmod.gui.window.SatelliteListWindow; @@ -37,10 +40,13 @@ import org.openslx.dozmod.thrift.cache.UserCache; import org.openslx.dozmod.util.FormatHelper; import org.openslx.dozmod.util.ImageWrapper; import org.openslx.dozmod.util.VmWrapper; +import org.openslx.dozmod.util.VmWrapper.MetaDataMissingException; import org.openslx.sat.thrift.version.Version; import org.openslx.thrifthelper.ThriftManager; import org.openslx.util.QuickTimer; import org.openslx.util.QuickTimer.Task; +import org.openslx.util.vm.DiskImage; +import org.openslx.util.vm.DiskImage.UnknownImageFormatException; public class ThriftActions { @@ -74,9 +80,8 @@ public class ThriftActions { long remoteVersion = -1; if (interactive && !forceCustomSatellite && (data.satellites == null || data.satellites.isEmpty())) { - Gui.asyncMessageBox("Login erfolgreich, aber es wurde kein Satellitenserver gefunden.\n" - + " Bitte geben Sie die Adresse Ihres Servers manuell an.", MessageType.ERROR, LOGGER, - null); + Gui.asyncMessageBox(I18n.THRIFT.getString("ThriftActions.Message.error.satellitesNullOrEmpty"), + MessageType.ERROR, LOGGER, null); } do { @@ -126,10 +131,8 @@ public class ThriftActions { } } if (sat.addressList == null || sat.addressList.isEmpty()) { - Gui.asyncMessageBox( - "Login erfolgreich, aber für den ausgewählten Satellitenserver ist\n" - + "keine Adresse hinterlegt. Kann nicht verbinden.", MessageType.ERROR, - LOGGER, null); + Gui.asyncMessageBox(I18n.THRIFT.getString("ThriftActions.Message.error.addressListNullOrEmpty"), + MessageType.ERROR, LOGGER, null); continue; } address = sat.addressList.get(0); @@ -155,9 +158,7 @@ public class ThriftActions { if (client == null || remoteVersion == -1) { if (interactive) { - Gui.asyncMessageBox( - "Authentifizierung erfolgreich, die Verbindung zum Satellitenserver ist jedoch nicht möglich.\n\n" - + "Möglicherweise ist der Server nicht verfügbar, oder die Netzwerkverbindung gestört.", + Gui.asyncMessageBox(I18n.THRIFT.getString("ThriftActions.Message.error.couldNotGetNewClient"), MessageType.ERROR, null, null); if (data.satellites.size() == 1) { return false; @@ -169,10 +170,8 @@ public class ThriftActions { if (remoteVersion < Version.MIN_VERSION || remoteVersion > Version.VERSION) { if (interactive) { - Gui.asyncMessageBox("Das von Ihnen verwendete Dozentenmodul ist nicht mit dem" - + " gewählten Satellitenserver kompatibel.\n" + "Ihre Version: " - + Version.VERSION + "\n" + "Satelliten-Version: " + remoteVersion, - MessageType.ERROR, LOGGER, null); + Gui.asyncMessageBox(I18n.THRIFT.getString("ThriftActions.Message.error.versionNotCompatible", + Version.VERSION, remoteVersion), MessageType.ERROR, LOGGER, null); continue; } return false; @@ -184,21 +183,19 @@ public class ThriftActions { } catch (TAuthorizationException e) { if (interactive) { ThriftError.showMessage(window, LOGGER, e, - "Authentifizierung erfolgreich, der Satellitenserver verweigert jedoch die Verbindung.\n" - + "Versuchen Sie, sich erneut anzumelden.\n"); + I18n.THRIFT.getString("ThriftActions.Message.error.authorizationException")); } return false; } catch (TException e) { if (interactive) { ThriftError.showMessage(window, LOGGER, e, - "Authentifizierung erfolgreich, bei der Kommunikation mit" - + " dem Satellitenserver trat jedoch ein interner Fehler auf."); + I18n.THRIFT.getString("ThriftActions.Message.error.sessionInternalError")); continue; } return false; } catch (Exception e) { if (interactive) { - Gui.asyncMessageBox("Unbekannter Fehler beim Verbinden mit dem Satellitenserver.", + Gui.asyncMessageBox(I18n.THRIFT.getString("ThriftActions.Message.error.sessionUnknownError"), MessageType.ERROR, LOGGER, e); continue; } @@ -247,10 +244,11 @@ public class ThriftActions { try { uuid = ThriftManager.getSatClient().createImage(Session.getSatelliteToken(), name); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Erstellen der VM fehlgeschlagen"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.createImageFailed")); } catch (Exception e) { - Gui.showMessageBox(frame, "Unbekannter Fehler beim Erstellen der VM", MessageType.ERROR, LOGGER, - e); + Gui.showMessageBox(frame, I18n.THRIFT.getString("ThriftActions.Message.error.createImageUnknownError"), + MessageType.ERROR, LOGGER, e); } return uuid; } @@ -350,7 +348,7 @@ public class ThriftActions { final String virtualizerId, final int osId, final long imageSize, final DownloadCallback callback) { // TODO: Return value? Callback? QFileChooser fc = new QFileChooser(Config.getDownloadPath(), true); - fc.setDialogTitle("Bitte wählen Sie einen Speicherort"); + fc.setDialogTitle(I18n.THRIFT.getString("ThriftActions.FileChooser.fc.dialogTitle")); int action = fc.showSaveDialog(frame); File selected = fc.getSelectedFile(); if (action != JFileChooser.APPROVE_OPTION || selected == null) { @@ -364,9 +362,8 @@ public class ThriftActions { null) + ".part"); if (destDir.exists()) { - boolean ret = Gui.showMessageBox(frame, "Verzeichnis '" + destDir.getAbsolutePath() - + "' existiert bereits, wollen Sie die VM darin überschreiben?", - MessageType.QUESTION_YESNO, LOGGER, null); + boolean ret = Gui.showMessageBox(frame, I18n.THRIFT.getString("ThriftActions.Message.yesNo.destDirExists", + destDir.getAbsolutePath()), MessageType.QUESTION_YESNO, LOGGER, null); if (!ret) { // user aborted if (callback != null) @@ -375,8 +372,8 @@ public class ThriftActions { } // delete it if (!tmpDiskFile.delete() && tmpDiskFile.exists()) { - Gui.showMessageBox(frame, "Datei konnte nicht überschrieben werden!", MessageType.ERROR, - LOGGER, null); + Gui.showMessageBox(frame, I18n.THRIFT.getString("ThriftActions.Message.error.couldNotDeleteDiskFile"), + MessageType.ERROR, LOGGER, null); if (callback != null) callback.downloadInitialized(false); return; @@ -387,10 +384,9 @@ public class ThriftActions { // Check the free space on disk if (destDir.getUsableSpace() < imageSize + SIZE_CHECK_EXTRA_DL) { - Gui.showMessageBox(frame, "Nicht genügend Speicherplatz im ausgewählten Verzeichnis verfügbar.\n" - + "Brauche: " + FormatHelper.bytes(imageSize + SIZE_CHECK_EXTRA_DL, false) + "\n" - + "Habe: " + FormatHelper.bytes(destDir.getUsableSpace(), false), MessageType.ERROR, - LOGGER, null); + Gui.showMessageBox(frame, I18n.THRIFT.getString("ThriftActions.Message.error.destDirHasNotEnoughFreeSpace", + FormatHelper.bytes(imageSize + SIZE_CHECK_EXTRA_DL, false), + FormatHelper.bytes(destDir.getUsableSpace(), false)), MessageType.ERROR, LOGGER, null); if (callback != null) callback.downloadInitialized(false); return; @@ -426,7 +422,8 @@ public class ThriftActions { } if (transInf == null) { // both download request failed, show user feedback - ThriftError.showMessage(frame, LOGGER, transEx, "Die Download-Anfrage ist gescheitert"); + ThriftError.showMessage(frame, LOGGER, transEx, + I18n.THRIFT.getString("ThriftActions.Message.error.downloadRequestFailed")); if (callback != null) callback.downloadInitialized(false); return; @@ -438,8 +435,7 @@ public class ThriftActions { dlTask = new DownloadTask(fTransHost, transInf.getPlainPort(), transInf.getToken(), tmpDiskFile, imageSize, null); } catch (FileNotFoundException e) { - Gui.asyncMessageBox( - "Konnte Download nicht vorbereiten: Der gewählte Zielort ist nicht beschreibbar", + Gui.asyncMessageBox(I18n.THRIFT.getString("ThriftActions.Message.error.destinationNotWritable"), MessageType.ERROR, LOGGER, e); if (callback != null) callback.downloadInitialized(false); @@ -454,6 +450,37 @@ public class ThriftActions { return; ImageWrapper.unpack(virtualizerId, tmpDiskFile, imageName, destDir, osId, fTransInf.getMachineDescription()); + DiskImage diskImage = null; + String ext = virtualizerId; + try { + diskImage = new DiskImage(tmpDiskFile); + } catch (IOException | UnknownImageFormatException e) { + LOGGER.warn("Could not open downloaded image for analyze step", e); + } + if (diskImage != null) { + if (diskImage.format != null) { + ext = diskImage.format.extension; + } + if (diskImage.isCompressed) { + Gui.asyncMessageBox( + I18n.THRIFT.getString("ThriftActions.Message.warning.diskImageCompressed", + imageName, Branding.getServiceFAQWebsite()), + MessageType.WARNING, null, null); + } + } + File destImage = new File(destDir.getAbsolutePath(), VmWrapper.generateFilename( + imageName, ext)); + destImage.delete(); + if (!tmpDiskFile.renameTo(destImage)) { + destImage = tmpDiskFile; // Must be Windows... + } + try { + VmWrapper.wrapVm(destImage, imageName, fTransInf.getMachineDescription(), + virtualizerId, osId, diskImage); + } catch (MetaDataMissingException | IOException e) { + Gui.asyncMessageBox(I18n.THRIFT.getString("ThriftActions.Message.warning.couldNotWrapVM"), + MessageType.WARNING, LOGGER, e); + } } }); @@ -520,7 +547,8 @@ public class ThriftActions { try { details = ThriftManager.getSatClient().getImageDetails(Session.getSatelliteToken(), imageBaseId); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Fehler beim Lesen der Metadaten"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.getImageDetailsFailed")); } return details; } @@ -612,7 +640,8 @@ public class ThriftActions { permissionMap = ThriftManager.getSatClient().getImagePermissions(Session.getSatelliteToken(), imageBaseId); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Fehler beim Lesen der Metadaten"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.getImagePermissionsFailed")); } return permissionMap; } @@ -630,7 +659,8 @@ public class ThriftActions { ThriftManager.getSatClient().setImageOwner(Session.getSatelliteToken(), lectureId, newOwner.getUserId()); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Fehler beim Übertragen der Besitzrechte"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.setImageOwnerFailed")); return false; } return true; @@ -690,12 +720,12 @@ public class ThriftActions { } catch (TException e) { ThriftError.showMessage(frame, LOGGER, e, - "Fehler beim Holen der Versionen/Veranstaltung zu folgender VM: " + imageBaseId); + I18n.THRIFT.getString("ThriftActions.Message.error.couldNotGetImageBase", imageBaseId)); return; } String questionText; if (versionToBeDeleted != null && !versionToBeDeleted.isEmpty()) { - questionText = "Die VM \"" + details.getImageName() + "\" hat folgende gültige Versionen:\n"; + questionText = I18n.THRIFT.getString("ThriftActions.deleteImageBase.String.questionText.0", details.getImageName()); for (ImageVersionDetails version : versionToBeDeleted) { questionText += version.getVersionId() + "\n"; } @@ -704,19 +734,20 @@ public class ThriftActions { questionText = ""; } if (lecturesToBeDeleted != null && !lecturesToBeDeleted.isEmpty()) { - questionText += "Folgende Veranstaltungen sind mit dieser VM verknüpft: \n"; + questionText += I18n.THRIFT.getString("ThriftActions.deleteImageBase.String.questionText.1"); for (LectureSummary lecture : lecturesToBeDeleted) { questionText += lecture.getLectureName() + "\n"; } questionText += "\n"; } - questionText += "Wollen Sie wirklich mit dem Löschen fortfahren?"; + questionText += I18n.THRIFT.getString("ThriftActions.deleteImageBase.String.questionText.2"); if (!userConfirmed(frame, questionText)) return; try { ThriftManager.getSatClient().deleteImageBase(Session.getSatelliteToken(), imageBaseId); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Konnte VM-Daten nicht löschen!"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.couldNotDeleteImageBase")); } } @@ -744,7 +775,8 @@ public class ThriftActions { // fetch lectures lectureList = ThriftManager.getSatClient().getLectureList(Session.getSatelliteToken(), 100); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Fehler beim Holen der Liste der Veranstaltungen"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.couldNotGetImageVersion")); if (callback != null) callback.isDeleted(success); return; @@ -757,17 +789,17 @@ public class ThriftActions { for (LectureSummary lecture : lectureList) { if (versionId.equals(lecture.getImageVersionId())) { if (!matches) - questionText = "Diese Version ist zu folgende Veranstaltungen verknüpft:\n"; + questionText = I18n.THRIFT.getString("ThriftActions.deleteImageVersion.String.questionText.0"); matches = true; questionText += lecture.getLectureName() + "\n"; } } if (matches) - questionText += "\nWollen Sie diese Version samt Veranstaltungen löschen?\n"; + questionText += I18n.THRIFT.getString("ThriftActions.deleteImageVersion.String.questionText.1"); } if (!matches) - questionText = "Wollen Sie die VM-Image-Version vom " - + FormatHelper.shortDate(version.createTime) + " Uhr wirklich löschen?"; + questionText = I18n.THRIFT.getString("ThriftActions.deleteImageVersion.String.questionText.2", + FormatHelper.shortDate(version.createTime)); if (!userConfirmed(frame, questionText)) return; @@ -776,7 +808,8 @@ public class ThriftActions { LOGGER.info("Deleted version '" + versionId + "'."); success = true; } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Fehler beim Löschen der Version"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.couldNotDeleteImageVersion")); if (callback != null) callback.isDeleted(success); return; @@ -811,7 +844,8 @@ public class ThriftActions { // push to sat uuid = ThriftManager.getSatClient().createLecture(Session.getSatelliteToken(), meta); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Failed to create lecture"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.createLectureFailed")); } return uuid; } @@ -830,7 +864,8 @@ public class ThriftActions { ThriftManager.getSatClient().writeLecturePermissions(Session.getSatelliteToken(), lectureId, permissions); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Failed to write lecture permissions"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.writeLecturePermissionsFailed")); return false; } return true; @@ -895,7 +930,8 @@ public class ThriftActions { try { lecture = ThriftManager.getSatClient().getLectureDetails(Session.getSatelliteToken(), lectureId); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Konnte Veranstaltungdaten nicht abrufen"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.getLectureDetailsFailed")); } return lecture; } @@ -913,7 +949,8 @@ public class ThriftActions { try { ThriftManager.getSatClient().updateLecture(Session.getSatelliteToken(), lectureId, lectureWrite); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Fehler beim Updaten der Veranstaltung"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.updateLectureFailed")); return false; } return true; @@ -937,7 +974,8 @@ public class ThriftActions { permissions = ThriftManager.getSatClient().getLecturePermissions(Session.getSatelliteToken(), lectureId); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Konnte Veranstaltungdaten nicht abrufen"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.getLecturePermissionsFailed")); } return permissions; @@ -956,7 +994,8 @@ public class ThriftActions { ThriftManager.getSatClient().setLectureOwner(Session.getSatelliteToken(), lectureId, newOwner.getUserId()); } catch (TException e) { - ThriftError.showMessage(frame, LOGGER, e, "Fehler beim Übertragen der Besitzrechte"); + ThriftError.showMessage(frame, LOGGER, e, + I18n.THRIFT.getString("ThriftActions.Message.error.setLectureOwnerFailed")); return false; } return true; @@ -986,8 +1025,9 @@ public class ThriftActions { final DeleteLectureCallback callback) { if (lectures == null) return; - String messageText = lectures.size() == 1 ? "Wollen Sie diese Veranstaltung wirklich löschen?" - : "Wollen Sie die " + lectures.size() + " Veranstaltungen wirklich löschen?"; + String messageText = lectures.size() == 1 + ? I18n.THRIFT.getString("ThriftActions.deleteLecture.String.messageText.0") + : I18n.THRIFT.getString("ThriftActions.deleteLecture.String.messageText.1", lectures.size()); if (!userConfirmed(frame, messageText)) return; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftError.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftError.java index 773b941f..dd69d55c 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftError.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftError.java @@ -14,25 +14,29 @@ import org.openslx.bwlp.thrift.iface.TInvocationException; import org.openslx.bwlp.thrift.iface.TNotFoundException; import org.openslx.bwlp.thrift.iface.TTransferRejectedException; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.helper.MessageType; public class ThriftError { public static void showMessage(final Component parent, Logger logger, TException ex, String messageText) { if (ex instanceof TNotFoundException) { - messageText += "\n\nNicht gefunden"; + messageText += I18n.THRIFT.getString("ThriftError.Message.error.notFoundException"); } else if (ex instanceof TAuthorizationException) { String reason = getString(((TAuthorizationException) ex).getNumber()); - messageText += "\n\nZugriff verweigert: " + reason + "\n" + ex.getMessage(); + messageText += I18n.THRIFT.getString("ThriftError.Message.error.authorizationException", + reason, ex.getMessage()); } else if (ex instanceof TInvocationException) { - messageText += "\n\nDer Funktionsaufruf konnte nicht durchgeführt werden: " - + getString(((TInvocationException) ex).getNumber()) + "\n" + ex.getMessage(); + messageText += I18n.THRIFT.getString("ThriftError.Message.error.invocationException", + getString(((TInvocationException) ex).getNumber()), ex.getMessage()); } else if (ex instanceof TInvalidDateParam) { - messageText += "\n\nEin angegebenes Datum ist ungültig:\n" + ex.getMessage(); + messageText += I18n.THRIFT.getString("ThriftError.Message.error.invalidDateParam", ex.getMessage()); } else if (ex instanceof TTransferRejectedException) { - messageText += "\n\nDie Transferanfrage wurde vom Server abgelehnt:\n" + ex.getMessage(); + messageText += I18n.THRIFT.getString("ThriftError.Message.error.transferRejectedException", + ex.getMessage()); } else { - messageText += "\n\nUnerwartete Ausnahme " + ex.getClass().getSimpleName() + " ist aufgetreten."; + messageText += I18n.THRIFT.getString("ThriftError.Message.error.unexpectedException", + ex.getClass().getSimpleName()); } if (logger != null) { logger.warn("A thrift call raised an exception", ex); @@ -52,55 +56,55 @@ public class ThriftError { private static String getString(InvocationError error) { if (error == null) - return "Interner serverseitiger Fehler"; + return I18n.THRIFT.getString("ThriftError.InvocationError.null"); switch (error) { case INTERNAL_SERVER_ERROR: - return "Interner serverseitiger Fehler"; + return I18n.THRIFT.getString("ThriftError.InvocationError.internalServerError"); case INVALID_DATA: - return "Ein Parameter hat einen ungültigen Wert"; + return I18n.THRIFT.getString("ThriftError.InvocationError.invalidData"); case INVALID_SHARE_MODE: - return "Ungültiger Share-Mode"; + return I18n.THRIFT.getString("ThriftError.InvocationError.invalidShareMode"); case MISSING_DATA: - return "Ein Parameter fehlt (null?)"; + return I18n.THRIFT.getString("ThriftError.InvocationError.missingData"); case UNKNOWN_IMAGE: - return "Unbekannte VM/Image"; + return I18n.THRIFT.getString("ThriftError.InvocationError.unknownImage"); case UNKNOWN_LECTURE: - return "Unbekannte Veranstaltung"; + return I18n.THRIFT.getString("ThriftError.InvocationError.unknownLecture"); case UNKNOWN_USER: - return "Unbekannter Benutzer"; + return I18n.THRIFT.getString("ThriftError.InvocationError.unknownUser"); default: - return "Unbekannter Fehlercode: " + error.toString(); + return I18n.THRIFT.getString("ThriftError.InvocationError.default", error.toString()); } } public static String getString(AuthorizationError error) { if (error == null) - return "(AuthorizationError=null)"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.null"); switch (error) { case ACCOUNT_SUSPENDED: - return "Das Benutzerkonto ist gesperrt"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.accountSuspended"); case BANNED_NETWORK: - return "Das Netzwerk, aus dem Sie operieren, ist gesperrt"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.bannedNetwork"); case CHALLENGE_FAILED: - return "Challenge fehlgeschlagen"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.challengeFailed"); case GENERIC_ERROR: - return "Generischer Fehler"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.genericError"); case INVALID_CREDENTIALS: - return "Ungültige Zugangsdaten\nStellen Sie sicher, dass Benutzername und Passwort korrekt sind"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.invalidCredentials"); case INVALID_KEY: - return "Ungültiger Schlüssel"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.invalidKey"); case INVALID_ORGANIZATION: - return "Ungültige oder unbekannte Organisation"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.invalidOrganization"); case INVALID_TOKEN: - return "Ungültiges Sitzungstoken"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.invalidToken"); case NOT_AUTHENTICATED: - return "Nicht authentifiziert"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.notAuthenticated"); case NO_PERMISSION: - return "Keine ausreichenden Berechtigungen"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.noPermission"); case ORGANIZATION_SUSPENDED: - return "Ihre zugehörige Organisation ist gesperrt"; + return I18n.THRIFT.getString("ThriftError.AuthorizationError.organizationSuspended"); default: - return "Unbekannter Fehlercode: " + error.toString(); + return I18n.THRIFT.getString("ThriftError.AuthorizationError.default", error.toString()); } } diff --git a/dozentenmodul/src/main/properties/i18n/activity.properties b/dozentenmodul/src/main/properties/i18n/activity.properties new file mode 100644 index 00000000..2d0b0e5c --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/activity.properties @@ -0,0 +1,27 @@ +# DownloadPanel +DownloadPanel.Button.openFolder.text=Open folder +DownloadPanel.Message.yesNo.cancelTransfer=Do you really want to cancel this transfer? + +# PassiveUploadPanel +PassiveUploadPanel.TransferPanel.fileName=<Transfer between master server and satellite server> +PassiveUploadPanel.Button.close.text=Hide + +# TransferPanel +TransferPanel.TransferState.initialize=Initialize +TransferPanel.Button.close.text.0=Cancel +TransferPanel.TransferState.error=Error +TransferPanel.TransferState.finished=Completed +TransferPanel.TransferState.idle=Inactive +TransferPanel.TransferState.working=Transfer in progress +TransferPanel.Button.close.text.1=Close + +# UpdatePanel +UpdatePanel.Label.info.text=New version available: {0} +UpdatePanel.Button.link.text=Open in browser +UpdatePanel.Button.details.text=Changelog +UpdatePanel.Button.close.text=Close + +# UploadPanel +UploadPanel.CheckBox.serverSideCopy.text=ServerSide Copy +UploadPanel.Message.yesNo.cancelTransfer=Do you really want to cancel this transfer? +UploadPanel.Message.error.setUploadOptions=Unexpected error while setting the transfer options
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/activity_de_DE.properties b/dozentenmodul/src/main/properties/i18n/activity_de_DE.properties new file mode 100644 index 00000000..739bf806 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/activity_de_DE.properties @@ -0,0 +1,27 @@ +# DownloadPanel +DownloadPanel.Button.openFolder.text=Ordner öffnen +DownloadPanel.Message.yesNo.cancelTransfer=Wollen Sie diesen Transfer wirklich abbrechen? + +# PassiveUploadPanel +PassiveUploadPanel.TransferPanel.fileName=<Transfer zwischen Masterserver und Satellitenserver> +PassiveUploadPanel.Button.close.text=Ausblenden + +# TransferPanel +TransferPanel.TransferState.initialize=Initialisiere +TransferPanel.Button.close.text.0=Abbrechen +TransferPanel.TransferState.error=Fehler +TransferPanel.TransferState.finished=Beendet +TransferPanel.TransferState.idle=Inaktiv +TransferPanel.TransferState.working=Übertragung läuft +TransferPanel.Button.close.text.1=Schließen + +# UpdatePanel +UpdatePanel.Label.info.text=Neue Version verfügbar: {0} +UpdatePanel.Button.link.text=Im Browser öffnen +UpdatePanel.Button.details.text=Changelog +UpdatePanel.Button.close.text=Schließen + +# UploadPanel +UploadPanel.CheckBox.serverSideCopy.text=ServerSide Copy +UploadPanel.Message.yesNo.cancelTransfer=Wollen Sie diesen Transfer wirklich abbrechen? +UploadPanel.Message.error.setUploadOptions=Unerwarteter Fehler beim Setzen der Transferoptionen
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/activity_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/activity_tr_TR.properties new file mode 100644 index 00000000..6bd6495d --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/activity_tr_TR.properties @@ -0,0 +1,27 @@ +# DownloadPanel +DownloadPanel.Button.openFolder.text=Klasörü aç +DownloadPanel.Message.yesNo.cancelTransfer=Bu transferi iptal etmek istediğinizden emin misiniz? + +# PassiveUploadPanel +PassiveUploadPanel.TransferPanel.fileName=<Master ve satelit sunucuları arasında transfer> +PassiveUploadPanel.Button.close.text=Gizle + +# TransferPanel +TransferPanel.TransferState.initialize=Başlatılıyor +TransferPanel.Button.close.text.0=İptal +TransferPanel.TransferState.error=Hata +TransferPanel.TransferState.finished=Tamamlandı +TransferPanel.TransferState.idle=Aktif değil +TransferPanel.TransferState.working=Transfer devam ediyor +TransferPanel.Button.close.text.1=Kapat + +# UpdatePanel +UpdatePanel.Label.info.text=Yeni sürüm mevcut: {0} +UpdatePanel.Button.link.text=Tarayıcıda aç +UpdatePanel.Button.details.text=Değişiklik kaydı +UpdatePanel.Button.close.text=Kapat + +# UploadPanel +UploadPanel.CheckBox.serverSideCopy.text=Sunucu taraflı kopyalama +UploadPanel.Message.yesNo.cancelTransfer=Bu transferi iptal etmek istediğinizden emin misiniz? +UploadPanel.Message.error.setUploadOptions=Transfer seçenekleri ayarlanırken hata oluştu
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/app.properties b/dozentenmodul/src/main/properties/i18n/app.properties new file mode 100644 index 00000000..125a330e --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/app.properties @@ -0,0 +1,6 @@ +# App +App.Message.error.loadingConfigurationFailed=Error loading configuration +App.Message.yesNo.SSLNotAvailable=SSL not available. Do you still want to connect without encryption? +App.Message.warning.uncaughtException=Uncaught exception in thread {0}\n\n\ + The application may run unstable.\n\ + To be on the safe side, you should restart it.
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/app_de_DE.properties b/dozentenmodul/src/main/properties/i18n/app_de_DE.properties new file mode 100644 index 00000000..2719ff64 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/app_de_DE.properties @@ -0,0 +1,6 @@ +# App +App.Message.error.loadingConfigurationFailed=Fehler beim Laden der Konfiguration +App.Message.yesNo.SSLNotAvailable=SSL nicht verfügbar. Wollen Sie sich trotzdem unverschlüsselt verbinden? +App.Message.warning.uncaughtException=Ungefangene Ausnahme im Thread {0}\n\n\ + Die Anwendung könnte instabil laufen.\n\ + Zur Sicherheit sollten Sie sie neustarten.
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/app_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/app_tr_TR.properties new file mode 100644 index 00000000..aee0fdb0 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/app_tr_TR.properties @@ -0,0 +1,6 @@ +# App +App.Message.error.loadingConfigurationFailed=Yapılandırma yüklenirken hata oluştu +App.Message.yesNo.SSLNotAvailable=SSL mevcut değil. Şifreleme olmadan yine de bağlanmak istiyor musunuz? +App.Message.warning.uncaughtException=İş parçacığında yakalanmamış hata {0}\n\n\ + Uygulama kararsız çalışabilir.\n\ + Sorun yaşamamak için uygulamayı yeniden başlatın.
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/configurator.properties b/dozentenmodul/src/main/properties/i18n/configurator.properties new file mode 100644 index 00000000..109a7ad5 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/configurator.properties @@ -0,0 +1,126 @@ +# ImagePermissionConfigurator +ImagePermission.Button.addUser.text=Add user +ImagePermission.Button.removeUser.text=Remove user +ImagePermission.Button.addUser.caption=Add + +# LdapFilterConfigurator +LdapFilter.Button.add.text.0=Change +LdapFilter.Message.error.noAttribute=No attribute given +LdapFilter.Message.error.entryAlreadyExists=Entry already exists + +# LdapFilterConfiguratorLayout +LdapFilter.Label.info.text=Enter LDAP filters here, that restrict the visibility \ + of the lecture depending on the logged-in user. A lecture \ + is visible as soon as one of the given filters applies. Additional room restrictions \ + still apply. +LdapFilter.Button.delete.text=Delete +LdapFilter.TitledBorder.newShare.title=Define own filters +LdapFilter.Label.attribute.text=Attribute +LdapFilter.Label.value.text=Value +LdapFilter.Button.add.text.1=Add + +# LecturePermissionConfigurator +LecturePermission.Button.addUser.text=Add user +LecturePermission.Button.removeUser.text=Remove user +LecturePermission.Button.addUser.caption=Add + +# NetRulesConfigurator +NetRules.Message.error.noPredefinedRules=Wah wah wah! Null preset list +NetRules.Dialog.dialog.title=Selection +NetRules.Label.predefinedRules.text=Predefined rules: +NetRules.Button.cancel.text=Cancel +NetRules.Button.ok.text=Save +NetRules.Message.error.tooManyFields=Line {0}: too many fields.\n +NetRules.Message.error.tooFewFields=Line {0}: too few fields.\n +NetRules.Message.error.invalidNetDirection=Line {0}: Invalid direction. Please use ''IN'' or ''OUT''.\n +NetRules.Message.error.invalidPort=Line {0}: Invalid port. Valid range is 0-65535.\n +NetRules.Message.error.checkResWithLineNo=Line {0}: {1}\n +NetRules.Message.error.evaluatingNetRules=Error while evaluating the given network rules.\n\n{0}\ + \nPlease enter the rules line by line in the following format\n\ + <host> <port> <IN|OUT>\n +NetRules.Message.error.hostnameTooLong=Hostname too long. +NetRules.Message.error.invalidNetmask=Invalid netmask. +NetRules.Message.error.IPv6BeginOrEndWithColon=IPv6 address must not begin or end with a colon. +NetRules.Message.error.IPv6MoreThanOneCompressedPart=IPv6 address must not contain more than one \ + compressed part. +NetRules.Message.error.IPv6GreaterThan128Bits=IPv6 netmask cannot be greater than 128 Bits. +NetRules.Message.error.IPv6TooManyHextets=IPv6 address contains too many hextets. +NetRules.Message.error.IPv6InvalidHextet=IPv6 address contains invalid hextet. +NetRules.Message.error.IPv6NonHexadecimalCharacters=IPv6 address contains non-hexadecimal characters. +NetRules.Message.error.incorrectIPv6AddressOrNetmask=Incorrect IPv6 address/netmask. +NetRules.Message.error.IPv4GreaterThan32Bits=IPv4 netmask cannot be greater then 32 Bits. +NetRules.Message.error.domainLabelLongerThan63Characters=Domain label {0} longer than 63 characters. +NetRules.Message.error.incorrectIPv4AddressOrNetmask=Incorrect IPv4 address/netmask. + +# NetRulesConfiguratorLayout +NetRules.TitledBorder.title=Network rules +NetRules.Label.description.text=If you have disabled internet access, \ + you can define exceptions here (Whitelist). \ + Please define your rules in the following format\n<host> <port> <in|out>.\n\ + You can specify port 0, which corresponds to all TCP and UDP ports \ + of a host. +NetRules.Label.add.text=If you enable internet access, \ + this list has the opposite effect (Blacklist). +NetRules.Button.checkRules.text=Check rules +NetRules.Button.showPresets.text=Predefined rules... + +# NetShareConfigurator +NetShare.Button.add.text.0=Change +NetShare.Label.error.noPath=No path given! +NetShare.Label.error.noAuth=No authentication type given! +NetShare.Label.error.noUsername=No username given! +NetShare.Label.error.incorrectInput=Incorrect input +NetShare.Label.error.noMountPoint=No mount point given! +NetShare.Message.yesNo.password=The entered password will be stored in plain text \ + and will be visible in the VM for all users.\n\ + Please do not use any security critical passwords here!\ + \n\nDo you want to add this network drive anyway? +NetShare.Label.error.changeFailed=Change failed! +NetShare.Label.error.alreadyExists=Already exists! +NetShare.Button.add.text.1=Add + +# NetShareConfiguratorLayout +NetShare.Label.description.text=<html>Here you can specify network drives \ + that are to be included automatically when the lecture starts. \ + The placeholder <em>%loginuser%</em> will be replaced in the path by the login name of the user.</html> +NetShare.TitledBorder.newShare.title=Define own network drive +NetShare.Label.sharePath.text=Path +NetShare.CheckBox.isPrinter.text=Printer +NetShare.Label.shareMountPoint.text=Mount point +NetShare.Label.shareName.text=Display name +NetShare.Label.shareAuth.text=Authentication +NetShare.Label.username.text=Username +NetShare.Label.password.text=Password +NetShare.CheckBox.showPassword.text=Show password +NetShare.Button.delete.text=Delete + +# StartupConfigurator +Startup.Message.error.noScripts=Wah wah wah! Null scripts +Startup.Dialog.title=Selection +Startup.Label.predefinedScripts.text=Predefined scripts: +Startup.Label.greyedOutElements.text=Greyed out elements are not compatible with the \ + operating system belonging to the lecture. +Startup.Button.cancel.text=Cancel +Startup.Button.ok.text=Save + +# StartupConfiguratorLayout +Startup.Label.audio.text=Audio +Startup.Label.description.text=A script entered here is executed automatically \ + after the start of the VM. +Startup.Label.scriptType.text=Filename extension: +Startup.Label.visibility.text=Visibility: +Startup.Button.predefinedScripts.text=Predefined scripts... + +# RunscriptType +Startup.ScriptType.shell=Shell script +Startup.ScriptType.batch=Windows batch + +# RunscriptVisibility +Startup.ScriptVisibility.normal=Normal +Startup.ScriptVisibility.minimized=Minimized +Startup.ScriptVisibility.hidden=Hidden + +# SoundState +Startup.SoundState.default=Default of the pool +Startup.SoundState.muted=Mute +Startup.SoundState.unmuted=Unmute
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/configurator_de_DE.properties b/dozentenmodul/src/main/properties/i18n/configurator_de_DE.properties new file mode 100644 index 00000000..187345f9 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/configurator_de_DE.properties @@ -0,0 +1,126 @@ +# ImagePermissionConfigurator +ImagePermission.Button.addUser.text=Benutzer hinzufügen +ImagePermission.Button.removeUser.text=Benutzer entfernen +ImagePermission.Button.addUser.caption=Hinzufügen + +# LdapFilterConfigurator +LdapFilter.Button.add.text.0=Ändern +LdapFilter.Message.error.noAttribute=Kein Attribut angegeben +LdapFilter.Message.error.entryAlreadyExists=Eintrag bereits vorhanden + +# LdapFilterConfiguratorLayout +LdapFilter.Label.info.text=Geben Sie hier LDAP Filter ein, die die Sichtbarkeit \ + der Veranstaltung abhängig vom angemeldeten Benutzer einschränken. Eine Veranstaltung \ + ist sichtbar, sobald einer der angegebenen Filter zutrifft. Zusätzliche Raumbeschränkungen \ + greifen weiterhin. +LdapFilter.Button.delete.text=Entfernen +LdapFilter.TitledBorder.newShare.title=Eigene Filter definieren +LdapFilter.Label.attribute.text=Attribut +LdapFilter.Label.value.text=Wert +LdapFilter.Button.add.text.1=Hinzufügen + +# LecturePermissionConfigurator +LecturePermission.Button.addUser.text=Benutzer hinzufügen +LecturePermission.Button.removeUser.text=Benutzer entfernen +LecturePermission.Button.addUser.caption=Hinzufügen + +# NetRulesConfigurator +NetRules.Message.error.noPredefinedRules=Wah wah wah! Null preset list +NetRules.Dialog.dialog.title=Auswahl +NetRules.Label.predefinedRules.text=Vordefinierte Regelsets: +NetRules.Button.cancel.text=Abbrechen +NetRules.Button.ok.text=Speichern +NetRules.Message.error.tooManyFields=Zeile {0}: Zu viele Felder.\n +NetRules.Message.error.tooFewFields=Zeile {0}: Zu wenig Felder.\n +NetRules.Message.error.invalidNetDirection=Zeile {0}: Ungültige Richtung. Bitte nutzen Sie ''IN'' bzw. ''OUT''.\n +NetRules.Message.error.invalidPort=Zeile {0}: Ungültiger Port. Gültiger Bereich ist 0-65535.\n +NetRules.Message.error.checkResWithLineNo=Zeile {0}: {1}\n +NetRules.Message.error.evaluatingNetRules=Fehler beim Auswerten der angegebenen Netzwerkregeln.\n\n{0}\ + \nBitte geben Sie die Regeln zeilenweise im Format\n\ + <host> <port> <IN|OUT>\nan. +NetRules.Message.error.hostnameTooLong=Hostname ist zu lang. +NetRules.Message.error.invalidNetmask=Ungültige Netzmaske. +NetRules.Message.error.IPv6BeginOrEndWithColon=IPv6-Adresse darf nicht mit einem Doppelpunkt beginnen oder enden. +NetRules.Message.error.IPv6MoreThanOneCompressedPart=IPv6-Adresse darf nicht mehr als einen komprimierten Teil \ + enthalten. +NetRules.Message.error.IPv6GreaterThan128Bits=IPv6 Netzmaske kann nicht größer als 128 Bits sein. +NetRules.Message.error.IPv6TooManyHextets=IPv6-Adresse enthält zu viele Hextets. +NetRules.Message.error.IPv6InvalidHextet=IPv6-Adresse enthält ungültiges Hextet. +NetRules.Message.error.IPv6NonHexadecimalCharacters=IPv6-Adresse enthält nicht-hexadezimale Zeichen. +NetRules.Message.error.incorrectIPv6AddressOrNetmask=Fehlerhafte IPv6-Adresse/Netzmaske. +NetRules.Message.error.IPv4GreaterThan32Bits=IPv4 Netzmaske kann nicht größer als 32 Bits sein. +NetRules.Message.error.domainLabelLongerThan63Characters=Domain-Ebene {0} länger als 63 Zeichen. +NetRules.Message.error.incorrectIPv4AddressOrNetmask=Fehlerhafte IPv4-Adresse/Netzmaske. + +# NetRulesConfiguratorLayout +NetRules.TitledBorder.title=Netzwerkregeln +NetRules.Label.description.text=Wenn Sie den Internetzugriff deaktiviert haben, \ + können Sie hier Ausnahmen definieren (Whitelist). \ + Bitte definieren Sie Ihre Regeln im Format\n<host> <port> <in|out>.\n\ + Sie können Port 0 angeben, was sämtlichen TCP und UDP Ports \ + eines Hosts entspricht. +NetRules.Label.add.text=Wenn Sie Internetzugriff aktivieren, \ + hat diese Liste den gegenteiligen Effekt (Blacklist). +NetRules.Button.checkRules.text=Regeln überprüfen +NetRules.Button.showPresets.text=Vordefinierte Regelsets... + +# NetShareConfigurator +NetShare.Button.add.text.0=Ändern +NetShare.Label.error.noPath=Kein Pfad angegeben! +NetShare.Label.error.noAuth=Kein Authentifizierungstyp angegeben! +NetShare.Label.error.noUsername=Kein Nutzername angegeben! +NetShare.Label.error.incorrectInput=Fehlerhafte Eingabe +NetShare.Label.error.noMountPoint=Kein Laufwerk angegeben! +NetShare.Message.yesNo.password=Das eingegebene Passwort wird im Klartext gespeichert \ + und ist in der VM für jeden Nutzer sichtbar.\n\ + Verwenden Sie auf keinen Fall sicherheitskritische Passwörter!\ + \n\nMöchten Sie diesen Netzlaufwerk trotzdem hinzufügen? +NetShare.Label.error.changeFailed=Änderung fehlgeschlagen! +NetShare.Label.error.alreadyExists=Existiert bereits! +NetShare.Button.add.text.1=Hinzufügen + +# NetShareConfiguratorLayout +NetShare.Label.description.text=<html>Hier können Sie Netzlaufwerke angeben, \ + die automatisch beim Start der Veranstaltung eingebunden werden sollen. \ + Der Platzhalter <em>%loginuser%</em> wird im Pfad durch den Loginnamen des Nutzers ersetzt.</html> +NetShare.TitledBorder.newShare.title=Eigenes Netzlaufwerk definieren +NetShare.Label.sharePath.text=Pfad +NetShare.CheckBox.isPrinter.text=Drucker +NetShare.Label.shareMountPoint.text=Laufwerk +NetShare.Label.shareName.text=Anzeigename +NetShare.Label.shareAuth.text=Authentifizierung +NetShare.Label.username.text=Benutzername +NetShare.Label.password.text=Passwort +NetShare.CheckBox.showPassword.text=Passwort anzeigen +NetShare.Button.delete.text=Entfernen + +# StartupConfigurator +Startup.Message.error.noScripts=Wah wah wah! Null scripts +Startup.Dialog.title=Auswahl +Startup.Label.predefinedScripts.text=Vordefinierte Startskripte: +Startup.Label.greyedOutElements.text=Ausgegraute Elemente sind mit dem zur \ + Veranstaltung gehörenden Betriebssystem nicht kompatibel. +Startup.Button.cancel.text=Abbrechen +Startup.Button.ok.text=Speichern + +# StartupConfiguratorLayout +Startup.Label.audio.text=Audio +Startup.Label.description.text=Ein hier eingetragenes Skript wird nach dem Start \ + der VM automatisch ausgeführt. +Startup.Label.scriptType.text=Dateinamenserweiterung: +Startup.Label.visibility.text=Sichtbarkeit: +Startup.Button.predefinedScripts.text=Vordefinierte Skripte... + +# RunscriptType +Startup.ScriptType.shell=Shellskript +Startup.ScriptType.batch=Windows-Batch + +# RunscriptVisibility +Startup.ScriptVisibility.normal=Normal +Startup.ScriptVisibility.minimized=Minimiert +Startup.ScriptVisibility.hidden=Versteckt + +# SoundState +Startup.SoundState.default=Vorgabe des Pools +Startup.SoundState.muted=Stummschalten +Startup.SoundState.unmuted=Aktivieren
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/configurator_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/configurator_tr_TR.properties new file mode 100644 index 00000000..d458e8d4 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/configurator_tr_TR.properties @@ -0,0 +1,126 @@ +# ImagePermissionConfigurator +ImagePermission.Button.addUser.text=Kullanıcı ekle +ImagePermission.Button.removeUser.text=Kullanıcıyı kaldır +ImagePermission.Button.addUser.caption=Ekle + +# LdapFilterConfigurator +LdapFilter.Button.add.text.0=Değiştir +LdapFilter.Message.error.noAttribute=Hiçbir nitelik girilmedi +LdapFilter.Message.error.entryAlreadyExists=Giriş zaten var + +# LdapFilterConfiguratorLayout +LdapFilter.Label.info.text=Oturum açmış kullanıcıya bağlı olarak etkinliğin görünürlüğünü kısıtlayan \ + LDAP filtrelerini burada tanımlayabilirsiniz. Bir etkinlik \ + tanımlanmış filtrelerden biri uygulanır uygulanmaz görünür olur. İlave oda kısıtlamaları \ + geçerliliğini korur. +LdapFilter.Button.delete.text=Kaldır +LdapFilter.TitledBorder.newShare.title=Kendi filtrelerinizi tanımlayın +LdapFilter.Label.attribute.text=Nitelik +LdapFilter.Label.value.text=Değer +LdapFilter.Button.add.text.1=Ekle + +# LecturePermissionConfigurator +LecturePermission.Button.addUser.text=Kullanıcı ekle +LecturePermission.Button.removeUser.text=Kullanıcıyı kaldır +LecturePermission.Button.addUser.caption=Ekle + +# NetRulesConfigurator +NetRules.Message.error.noPredefinedRules=Wah wah wah! Null preset list +NetRules.Dialog.dialog.title=Seçim +NetRules.Label.predefinedRules.text=Tanımlı kurallar: +NetRules.Button.cancel.text=İptal +NetRules.Button.ok.text=Kaydet +NetRules.Message.error.tooManyFields=Satır {0}: Çok fazla alan.\n +NetRules.Message.error.tooFewFields=Satır {0}: Çok az alan.\n +NetRules.Message.error.invalidNetDirection=Satır {0}: Geçersiz yön. Lütfen ''IN'' veya ''OUT'' kullanın.\n +NetRules.Message.error.invalidPort=Satır {0}: Geçersiz port. Geçerli aralık 0-65535.\n +NetRules.Message.error.checkResWithLineNo=Satır {0}: {1}\n +NetRules.Message.error.evaluatingNetRules=Tanımlanan ağ kuralları değerlendirilirken hata oluştu.\n\n{0}\ + \nLütfen kuralları aşağıdaki formatta ve satır satır girin\n\ + <host> <port> <IN|OUT>\n +NetRules.Message.error.hostnameTooLong=Sunucu adı çok uzun. +NetRules.Message.error.invalidNetmask=Geçersiz ağ maskesi. +NetRules.Message.error.IPv6BeginOrEndWithColon=IPv6 adresi iki nokta üst üste ile başlayamaz veya bitemez. +NetRules.Message.error.IPv6MoreThanOneCompressedPart=IPv6 adresi birden fazla sıkıştırılmış parça \ + içeremez. +NetRules.Message.error.IPv6GreaterThan128Bits=IPv6 ağ maskesi 128 Bit''ten büyük olamaz. +NetRules.Message.error.IPv6TooManyHextets=IPv6 adresi çok fazla hekstet içeriyor. +NetRules.Message.error.IPv6InvalidHextet=IPv6 adresi geçersiz hekstet içeriyor. +NetRules.Message.error.IPv6NonHexadecimalCharacters=IPv6 adresi heksadesimal olmayan karakterler içeriyor. +NetRules.Message.error.incorrectIPv6AddressOrNetmask=Hatalı IPv6 adresi/ağ maskesi. +NetRules.Message.error.IPv4GreaterThan32Bits=IPv4 ağ maskesi 32 Bit''ten büyük olamaz. +NetRules.Message.error.domainLabelLongerThan63Characters={0} alan adı 63 karakterden uzun. +NetRules.Message.error.incorrectIPv4AddressOrNetmask=Hatalı IPv4 adresi/ağ maskesi. + +# NetRulesConfiguratorLayout +NetRules.TitledBorder.title=Ağ kuralları +NetRules.Label.description.text=Eğer internet erişimini devre dışı bıraktıysanız, \ + burada istisnalar tanımlayabilirsiniz (Whitelist). \ + Lütfen kurallarınızı aşağıdaki biçimde tanımlayın\n<host> <port> <in|out>.\n\ + Bir ana bilgisayarın tüm TCP ve UDP bağlantı noktalarına karşılık gelen 0 numaralı \ + bağlantı noktasını belirtebilirsiniz. +NetRules.Label.add.text=İnternet erişimini etkinleştirirseniz, \ + bu liste tam tersi bir etkiye sahip olur (Blacklist). +NetRules.Button.checkRules.text=Kuralları kontrol et +NetRules.Button.showPresets.text=Tanımlı kurallar... + +# NetShareConfigurator +NetShare.Button.add.text.0=Değiştir +NetShare.Label.error.noPath=Yol belirtilmedi! +NetShare.Label.error.noAuth=Kimlik doğrulama türü belirtilmedi! +NetShare.Label.error.noUsername=Kullanıcı adı belirtilmedi! +NetShare.Label.error.incorrectInput=Yanlış giriş +NetShare.Label.error.noMountPoint=Sürücü belirtilmedi! +NetShare.Message.yesNo.password=Girilen şifre düz metin olarak kaydedilir \ + ve sanal makinede her kullanıcı için görünür olur.\n\ + Lütfen burada güvenlik açısından kritik parolalar kullanmayın!\ + \n\nYine de bu ağ sürücüsünü eklemek istiyor musunuz? +NetShare.Label.error.changeFailed=Değiştirme işlemi başarısız! +NetShare.Label.error.alreadyExists=Zaten var! +NetShare.Button.add.text.1=Ekle + +# NetShareConfiguratorLayout +NetShare.Label.description.text=<html>Burada, etkinlik başladığında otomatik olarak \ + entegre edilmesi gereken ağ sürücülerini tanımlayabilirsiniz. \ + <em>%loginuser%</em> yer tutucusu, kullanıcının oturum açma adıyla değiştirilir.</html> +NetShare.TitledBorder.newShare.title=Kendi ağ sürücünüzü tanımlayın +NetShare.Label.sharePath.text=Yol +NetShare.CheckBox.isPrinter.text=Yazıcı +NetShare.Label.shareMountPoint.text=Bağlantı noktası +NetShare.Label.shareName.text=Görünür isim +NetShare.Label.shareAuth.text=Kimlik doğrulama +NetShare.Label.username.text=Kullanıcı adı +NetShare.Label.password.text=Parola +NetShare.CheckBox.showPassword.text=Parolayı göster +NetShare.Button.delete.text=Kaldır + +# StartupConfigurator +Startup.Message.error.noScripts=Wah wah wah! Null scripts +Startup.Dialog.title=Seçim +Startup.Label.predefinedScripts.text=Tanımlı başlangıç komutları: +Startup.Label.greyedOutElements.text=Gri renkteki öğeler, \ + etkinliğe ait işletim sistemiyle uyumlu değildir. +Startup.Button.cancel.text=İptal +Startup.Button.ok.text=Kaydet + +# StartupConfiguratorLayout +Startup.Label.audio.text=Ses +Startup.Label.description.text=Burada girilen bir komut, \ + sanal makine başlatıldıktan sonra otomatik olarak çalıştırılır. +Startup.Label.scriptType.text=Dosya adı uzantısı: +Startup.Label.visibility.text=Görünürlük: +Startup.Button.predefinedScripts.text=Tanımlı komutlar... + +# RunscriptType +Startup.ScriptType.shell=Shell script +Startup.ScriptType.batch=Windows batch + +# RunscriptVisibility +Startup.ScriptVisibility.normal=Normal +Startup.ScriptVisibility.minimized=Minimize edilmiş +Startup.ScriptVisibility.hidden=Gizli + +# SoundState +Startup.SoundState.default=Varsayılan +Startup.SoundState.muted=Sessiz +Startup.SoundState.unmuted=Etkin
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/control.properties b/dozentenmodul/src/main/properties/i18n/control.properties new file mode 100644 index 00000000..f82dc4e6 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/control.properties @@ -0,0 +1,76 @@ +# ImagePermissionTable +ImagePermissionTable.ListTableColumn.user.colName=User +ImagePermissionTable.ListTableColumn.link.colName=Link +ImagePermissionTable.ListTableColumn.download.colName=Download +ImagePermissionTable.ListTableColumn.edit.colName=Edit +ImagePermissionTable.ListTableColumn.admin.colName=Admin + +# ImagePublishedTable +ImagePublishedTable.ListTableColumn.name.colName=Name +ImagePublishedTable.ListTableColumn.OS.colName=OS +ImagePublishedTable.ListTableColumn.owner.colName=Owner +ImagePublishedTable.ListTableColumn.uploader.colName=Uploaded by +ImagePublishedTable.ListTableColumn.organization.colName=Organization + +# ImageTable +ImageTable.ListTableColumn.template.colName=Template +ImageTable.ListTableColumn.usable.colName=Usable +ImageTable.ListTableColumn.size.colName=Size +ImageTable.ListTableColumn.lastChange.colName=Last change +ImageTable.ListTableColumn.expiring.colName=Expiring +ImageTable.ListTableColumn.owner.colName=Owner +ImageTable.ListTableColumn.OS.colName=OS +ImageTable.ListTableColumn.name.colName=Name +ImageTable.ListTableColumn.hypervisor.colName= +ImageTable.ListTableColumn.versionCount.colName=Version count +ImageTable.ListTableColumn.totalSize.colName=Total size + +# ImageVersionTable +ImageVersionTable.ListTableColumn.created.colName=Creation date +ImageVersionTable.ListTableColumn.expiring.colName=Expiry date +ImageVersionTable.ListTableColumn.uploader.colName=Created by +ImageVersionTable.ListTableColumn.valid.colName=Usable +ImageVersionTable.ListTableColumn.size.colName=Size +ImageVersionTable.ListTableColumn.ID.colName=Internal ID + +# LectureLdapFilterTable +LectureLdapFilterTable.ListTableColumn.title.colName=Name +LectureLdapFilterTable.ListTableColumn.attribute.colName=Attribute +LectureLdapFilterTable.ListTableColumn.value.colName=Value + +# LecturePermissionTable +LecturePermissionTable.ListTableColumn.user.colName=User +LecturePermissionTable.ListTableColumn.edit.colName=Edit +LecturePermissionTable.ListTableColumn.admin.colName=Admin + +# LectureTable +LectureTable.ListTableColumn.name.colName=Name +LectureTable.ListTableColumn.owner.colName=Owner +LectureTable.ListTableColumn.startTime.colName=Start date +LectureTable.ListTableColumn.endTime.colName=Expiry date +LectureTable.ListTableColumn.enabled.colName=Activated +LectureTable.ListTableColumn.valid.colName=VM valid + +# NetShareTable +NetShareTable.ListTableColumn.name.colName=Name +NetShareTable.ListTableColumn.mount.colName=Target +NetShareTable.ListTableColumn.path.colName=Path +NetShareTable.ListTableColumn.auth.colName=Authentication +NetShareTable.ListTableColumn.user.colName=Username +NetShareTable.ListTableColumn.password.colName=Password + +# UserTable +UserTable.ListTableColumn.name.colName=Name +UserTable.ListTableColumn.mail.colName=Mail + +# ImageListViewer +ImageListViewer.FilterType.all=Show all +ImageListViewer.FilterType.own=Show own/assigned ones only +ImageListViewer.FilterType.usable=Show usable/linkable only +ImageListViewer.FilterType.editable=Show editable only +ImageListViewer.FilterType.templates=Show templates only +ImageListViewer.TitledBorder.filterPanel.title=Search +ImageListViewer.Label.imageCount.text=Visible: + +# PersonLabel +PersonLabel.Label.toolTipText=Click to send a mail to this person
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/control_de_DE.properties b/dozentenmodul/src/main/properties/i18n/control_de_DE.properties new file mode 100644 index 00000000..bbb24041 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/control_de_DE.properties @@ -0,0 +1,76 @@ +# ImagePermissionTable +ImagePermissionTable.ListTableColumn.user.colName=Benutzer +ImagePermissionTable.ListTableColumn.link.colName=Verlinken +ImagePermissionTable.ListTableColumn.download.colName=Download +ImagePermissionTable.ListTableColumn.edit.colName=Bearbeiten +ImagePermissionTable.ListTableColumn.admin.colName=Admin + +# ImagePublishedTable +ImagePublishedTable.ListTableColumn.name.colName=Name +ImagePublishedTable.ListTableColumn.OS.colName=OS +ImagePublishedTable.ListTableColumn.owner.colName=Besitzer +ImagePublishedTable.ListTableColumn.uploader.colName=Hochgeladen von +ImagePublishedTable.ListTableColumn.organization.colName=Organisation + +# ImageTable +ImageTable.ListTableColumn.template.colName=Vorlage +ImageTable.ListTableColumn.usable.colName=Verwendbar +ImageTable.ListTableColumn.size.colName=Größe +ImageTable.ListTableColumn.lastChange.colName=Geändert +ImageTable.ListTableColumn.expiring.colName=Ablaufdatum +ImageTable.ListTableColumn.owner.colName=Besitzer +ImageTable.ListTableColumn.OS.colName=OS +ImageTable.ListTableColumn.name.colName=Name +ImageTable.ListTableColumn.hypervisor.colName= +ImageTable.ListTableColumn.versionCount.colName=Versionen +ImageTable.ListTableColumn.totalSize.colName=Gesamtgröße + +# ImageVersionTable +ImageVersionTable.ListTableColumn.created.colName=Erstellungszeitpunkt +ImageVersionTable.ListTableColumn.expiring.colName=Ablaufszeitpunkt +ImageVersionTable.ListTableColumn.uploader.colName=Ersteller +ImageVersionTable.ListTableColumn.valid.colName=Verwendbar +ImageVersionTable.ListTableColumn.size.colName=Größe +ImageVersionTable.ListTableColumn.ID.colName=Interne ID + +# LectureLdapFilterTable +LectureLdapFilterTable.ListTableColumn.title.colName=Name +LectureLdapFilterTable.ListTableColumn.attribute.colName=Attribut +LectureLdapFilterTable.ListTableColumn.value.colName=Wert + +# LecturePermissionTable +LecturePermissionTable.ListTableColumn.user.colName=Benutzer +LecturePermissionTable.ListTableColumn.edit.colName=Bearbeiten +LecturePermissionTable.ListTableColumn.admin.colName=Admin + +# LectureTable +LectureTable.ListTableColumn.name.colName=Name +LectureTable.ListTableColumn.owner.colName=Besitzer +LectureTable.ListTableColumn.startTime.colName=Startdatum +LectureTable.ListTableColumn.endTime.colName=Ablaufdatum +LectureTable.ListTableColumn.enabled.colName=Aktiviert +LectureTable.ListTableColumn.valid.colName=VM gültig + +# NetShareTable +NetShareTable.ListTableColumn.name.colName=Name +NetShareTable.ListTableColumn.mount.colName=Ziel +NetShareTable.ListTableColumn.path.colName=Pfad +NetShareTable.ListTableColumn.auth.colName=Authentifizierung +NetShareTable.ListTableColumn.user.colName=Username +NetShareTable.ListTableColumn.password.colName=Passwort + +# UserTable +UserTable.ListTableColumn.name.colName=Name +UserTable.ListTableColumn.mail.colName=Mail + +# ImageListViewer +ImageListViewer.FilterType.all=Alle anzeigen +ImageListViewer.FilterType.own=Nur eigene/zugewiesene anzeigen +ImageListViewer.FilterType.usable=Nur verwendbare/linkbare anzeigen +ImageListViewer.FilterType.editable=Nur editierbare anzeigen +ImageListViewer.FilterType.templates=Nur Vorlagen zeigen +ImageListViewer.TitledBorder.filterPanel.title=Suchen +ImageListViewer.Label.imageCount.text=Sichtbar: + +# PersonLabel +PersonLabel.Label.toolTipText=Klicken, um eine Mail an diese Person zu senden
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/control_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/control_tr_TR.properties new file mode 100644 index 00000000..d284613a --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/control_tr_TR.properties @@ -0,0 +1,76 @@ +# ImagePermissionTable +ImagePermissionTable.ListTableColumn.user.colName=Kullanıcı +ImagePermissionTable.ListTableColumn.link.colName=Bağlantı ekleme +ImagePermissionTable.ListTableColumn.download.colName=İndirme +ImagePermissionTable.ListTableColumn.edit.colName=Düzenleme +ImagePermissionTable.ListTableColumn.admin.colName=Yönetim + +# ImagePublishedTable +ImagePublishedTable.ListTableColumn.name.colName=İsim +ImagePublishedTable.ListTableColumn.OS.colName=İşletim sistemi +ImagePublishedTable.ListTableColumn.owner.colName=Sahibi +ImagePublishedTable.ListTableColumn.uploader.colName=Yükleyen +ImagePublishedTable.ListTableColumn.organization.colName=Organizasyon + +# ImageTable +ImageTable.ListTableColumn.template.colName=Şablon +ImageTable.ListTableColumn.usable.colName=Kullanılabilir +ImageTable.ListTableColumn.size.colName=Boyut +ImageTable.ListTableColumn.lastChange.colName=Son değişiklik +ImageTable.ListTableColumn.expiring.colName=Geçerlilik tarihi +ImageTable.ListTableColumn.owner.colName=Sahibi +ImageTable.ListTableColumn.OS.colName=İşletim sistemi +ImageTable.ListTableColumn.name.colName=İsim +ImageTable.ListTableColumn.hypervisor.colName= +ImageTable.ListTableColumn.versionCount.colName=Sürüm sayısı +ImageTable.ListTableColumn.totalSize.colName=Toplam boyut + +# ImageVersionTable +ImageVersionTable.ListTableColumn.created.colName=Oluşturulma tarihi +ImageVersionTable.ListTableColumn.expiring.colName=Geçerlilik tarihi +ImageVersionTable.ListTableColumn.uploader.colName=Oluşturan +ImageVersionTable.ListTableColumn.valid.colName=Kullanılabilir +ImageVersionTable.ListTableColumn.size.colName=Boyut +ImageVersionTable.ListTableColumn.ID.colName=Dahili ID + +# LectureLdapFilterTable +LectureLdapFilterTable.ListTableColumn.title.colName=İsim +LectureLdapFilterTable.ListTableColumn.attribute.colName=Nitelik +LectureLdapFilterTable.ListTableColumn.value.colName=Değer + +# LecturePermissionTable +LecturePermissionTable.ListTableColumn.user.colName=Kullanıcı +LecturePermissionTable.ListTableColumn.edit.colName=Düzenleme +LecturePermissionTable.ListTableColumn.admin.colName=Yönetim + +# LectureTable +LectureTable.ListTableColumn.name.colName=İsim +LectureTable.ListTableColumn.owner.colName=Sahibi +LectureTable.ListTableColumn.startTime.colName=Başlangıç tarihi +LectureTable.ListTableColumn.endTime.colName=Bitiş tarihi +LectureTable.ListTableColumn.enabled.colName=Aktif +LectureTable.ListTableColumn.valid.colName=VM geçerli + +# NetShareTable +NetShareTable.ListTableColumn.name.colName=İsim +NetShareTable.ListTableColumn.mount.colName=Hedef +NetShareTable.ListTableColumn.path.colName=Yol +NetShareTable.ListTableColumn.auth.colName=Doğrulama +NetShareTable.ListTableColumn.user.colName=Kullanıcı adı +NetShareTable.ListTableColumn.password.colName=Şifre + +# UserTable +UserTable.ListTableColumn.name.colName=İsim +UserTable.ListTableColumn.mail.colName=E-posta + +# ImageListViewer +ImageListViewer.FilterType.all=Tümünü göster +ImageListViewer.FilterType.own=Yalnızca kendimin/bana atanmış olanları göster +ImageListViewer.FilterType.usable=Yalnızca kullanılabilir/bağlantı eklenebilir olanları göster +ImageListViewer.FilterType.editable=Yalnızca düzenlenebilir olanları göster +ImageListViewer.FilterType.templates=Yalnızca şablonları göster +ImageListViewer.TitledBorder.filterPanel.title=Arama +ImageListViewer.Label.imageCount.text=Görüntülenen: + +# PersonLabel +PersonLabel.Label.toolTipText=Bu kişiye e-posta göndermek için tıklayın
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/gui.properties b/dozentenmodul/src/main/properties/i18n/gui.properties new file mode 100644 index 00000000..633cda75 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/gui.properties @@ -0,0 +1,40 @@ +# GraphicalCertHandler +GraphicalCertHandler.Message.warning.noCertificate=The satellite has no certificate. \ + Encrypted connection not possible.\n\nDo you still want to continue? +GraphicalCertHandler.Message.yesNo.fingerprintChanged=!!! ALARM !!!! ALARM !!!\n\nThe fingerprint of {0} \ + has changed.\nExpected: {1}\nFound: {2}\n\n\ + Do you still want to connect to this satellite? +GraphicalCertHandler.Message.error.couldNotGetSSLContext=Could not get TLSv1.2 SSL context +GraphicalCertHandler.Message.error.couldNotInitializeSSLContext=Could not initialize TLSv1.2 SSL context + +# MainWindow +MainWindow.GuiErrorCallback.master.serverString=the {0} master server +MainWindow.GuiErrorCallback.satellite.serverString=the satellite server +MainWindow.Message.warning.couldNotSaveConfig=Could not save program settings +MainWindow.Message.yesNo.applicationQuit=Do you really want to exit the program? +MainWindow.Menu.session.s=Session +MainWindow.MenuItem.config.text=Settings +MainWindow.MenuItem.logDir.text=Open log directory +MainWindow.MenuItem.logout.text=Logout and exit +MainWindow.MenuItem.exit.text=Exit +MainWindow.Menu.view.s=View +MainWindow.MenuItem.home.text=Home +MainWindow.MenuItem.images.text=Virtual machines +MainWindow.MenuItem.lectures.text=Lectures +MainWindow.Menu.about.s=About +MainWindow.MenuItem.disclaimer.text=Disclaimer +MainWindow.MenuItem.privacyNotice.text=Privacy notice +MainWindow.MenuItem.virtualizer.text=Virtualizer +MainWindow.MenuItem.updateCheck.text=Software update +MainWindow.Message.warning.incorrectTime=ATTENTION: The time on your computer differs \ + from the time on the satellite server.\n\ + Please make sure that the clock of your computer is set correctly.\n\ + If your system time is set correctly, the time on the\n\ + satellite server may not be set correctly.\n\ + In this case - depending on the difference - unexpected problems\n\ + with the start and end times of lectures may occur. Contact the responsible administrator\n\ + in this case so that the time on the satellite server\n\ + can be corrected.\n\n\ + Your computer: {0}\n\ + Satellite server: {1} +MainWindow.Label.pleaseWait.text=Please wait, looking for proxy configuration...
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/gui_de_DE.properties b/dozentenmodul/src/main/properties/i18n/gui_de_DE.properties new file mode 100644 index 00000000..9041b221 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/gui_de_DE.properties @@ -0,0 +1,40 @@ +# GraphicalCertHandler +GraphicalCertHandler.Message.warning.noCertificate=Der Satellit besitzt kein Zertifikat. \ + Verschlüsselte Verbindung nicht möglich.\n\nMöchten Sie trotzdem fortfahren? +GraphicalCertHandler.Message.yesNo.fingerprintChanged=!!! ALARM !!!! ALARM !!!\n\nDer Fingerabdruck von {0} \ + hat sich verändert.\nErwartet: {1}\nVorgefunden: {2}\n\n\ + Möchten Sie trotzdem zu diesem Satelliten verbinden? +GraphicalCertHandler.Message.error.couldNotGetSSLContext=SSL-Kontext TLSv1.2 konnte nicht geladen werden +GraphicalCertHandler.Message.error.couldNotInitializeSSLContext=SSL-Kontext TLSv1.2 konnte nicht initialisiert werden + +# MainWindow +MainWindow.GuiErrorCallback.master.serverString=dem {0}-Zentralserver +MainWindow.GuiErrorCallback.satellite.serverString=dem Satellitenserver +MainWindow.Message.warning.couldNotSaveConfig=Konnte Programmeinstellungen nicht speichern +MainWindow.Message.yesNo.applicationQuit=Möchten Sie das Programm wirklich beenden? +MainWindow.Menu.session.s=Sitzung +MainWindow.MenuItem.config.text=Einstellungen +MainWindow.MenuItem.logDir.text=Logverzeichnis öffnen +MainWindow.MenuItem.logout.text=Abmelden und beenden +MainWindow.MenuItem.exit.text=Beenden +MainWindow.Menu.view.s=Ansicht +MainWindow.MenuItem.home.text=Startseite +MainWindow.MenuItem.images.text=Virtuelle Maschinen +MainWindow.MenuItem.lectures.text=Veranstaltungen +MainWindow.Menu.about.s=Über +MainWindow.MenuItem.disclaimer.text=Nutzungsvereinbarung +MainWindow.MenuItem.privacyNotice.text=Datenschutzerklärung +MainWindow.MenuItem.virtualizer.text=Virtualisierer +MainWindow.MenuItem.updateCheck.text=Software-Aktualisierung +MainWindow.Message.warning.incorrectTime=ACHTUNG: Die Uhrzeit Ihres Computers weicht von der Uhrzeit \ + auf dem Satellitenserver ab.\n\ + Bitte stellen Sie sicher, dass die Uhr Ihres Computers richtig gestellt ist.\n\ + Falls Ihre Systemzeit korrekt gesetzt ist, ist möglicherweise die Uhrzeit auf\n\ + dem Satellitenserver nicht korrekt eingestellt.\n\ + In diesem Fall kann es - je nach Abweichung - zu unerwarteten Problemen mit den\n\ + Start- und Endzeiten von Veranstaltungen kommen. Kontaktieren Sie in diesem\n\ + Fall den zuständigen Administrator, damit die Uhrzeit auf dem Satellitenserver\n\ + korrigiert werden kann.\n\n\ + Ihr Computer: {0}\n\ + Satellitenserver: {1} +MainWindow.Label.pleaseWait.text=Bitte warten, suche Proxy-Konfiguration...
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/gui_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/gui_tr_TR.properties new file mode 100644 index 00000000..ac1d3cb4 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/gui_tr_TR.properties @@ -0,0 +1,40 @@ +# GraphicalCertHandler +GraphicalCertHandler.Message.warning.noCertificate=Satelit sunucusunun sertifikası yok. \ + Şifreli bağlantı mümkün değil.\n\nYine de devam etmek istiyor musunuz? +GraphicalCertHandler.Message.yesNo.fingerprintChanged=!!! ALARM !!!! ALARM !!!\n\n{0} adresinin parmak izi \ + değişti.\nBeklenen: {1}\nBulunan: {2}\n\n\ + Bu satelit sunucusuna yine de bağlanmak istiyor musunuz? +GraphicalCertHandler.Message.error.couldNotGetSSLContext=TLSv1.2 SSL içeriği alınamadı +GraphicalCertHandler.Message.error.couldNotInitializeSSLContext=TLSv1.2 SSL içeriği başlatılamadı + +# MainWindow +MainWindow.GuiErrorCallback.master.serverString={0} master sunucusu +MainWindow.GuiErrorCallback.satellite.serverString=satelit sunucusu +MainWindow.Message.warning.couldNotSaveConfig=Program ayarları kaydedilemedi +MainWindow.Message.yesNo.applicationQuit=Programı sonlandırmak istediğinizden emin misiniz? +MainWindow.Menu.session.s=Oturum +MainWindow.MenuItem.config.text=Ayarlar +MainWindow.MenuItem.logDir.text=Günlük dizinini aç +MainWindow.MenuItem.logout.text=Oturumu kapat ve sonlandır +MainWindow.MenuItem.exit.text=Sonlandır +MainWindow.Menu.view.s=Görünüm +MainWindow.MenuItem.home.text=Anasayfa +MainWindow.MenuItem.images.text=Sanal makineler +MainWindow.MenuItem.lectures.text=Etkinlikler +MainWindow.Menu.about.s=Hakkında +MainWindow.MenuItem.disclaimer.text=Kullanıcı sözleşmesi +MainWindow.MenuItem.privacyNotice.text=Gizlilik politikası +MainWindow.MenuItem.virtualizer.text=Sanallaştırıcı +MainWindow.MenuItem.updateCheck.text=Yazılım güncellemesi +MainWindow.Message.warning.incorrectTime=DİKKAT: Bilgisayar saatiniz satelit sunucusu \ + saati ile eşleşmiyor.\n\ + Lütfen bilgisayarınızın saatinin doğru ayarlandığından emin olun.\n\ + Eğer sistem saatiniz doğru ayarlandıysa, satelit sunucusundaki saat\n\ + doğru ayarlanmamış olabilir.\n\ + Bu durumda, - sapmaya bağlı olarak - derslerin başlangıç ve bitiş zamanlarında\n\ + beklenmedik sorunlar ortaya çıkabilir. Bu durumda,\n\ + satelit sunucusundaki saatin düzeltilebilmesi için\n\ + sorumlu yöneticiye başvurun.\n\n\ + Bilgisayarınız: {0}\n\ + Satelit sunucusu: {1} +MainWindow.Label.pleaseWait.text=Lütfen bekleyin, proxy yapılandırması aranıyor...
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/helper.properties b/dozentenmodul/src/main/properties/i18n/helper.properties new file mode 100644 index 00000000..91fafdad --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/helper.properties @@ -0,0 +1,18 @@ +# ExpiryDateChooser +ExpiryDateChooser.Label.newDate.text=New expiry date: +ExpiryDateChooser.Label.daysToExtend.text=Enter by how many days this version(s) should be extended: +ExpiryDateChooser.ConfirmDialog.ret.title=Extend expiry date + +# MessageType +MessageType.debug=Debug +MessageType.info=Info +MessageType.warning=Warning +MessageType.warningRetry=Error +MessageType.error=Error +MessageType.errorRetry=Error +MessageType.questionYesNo=Question + +# Language +Language.german=Deutsch +Language.english=English +Language.turkish=Türkçe
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/helper_de_DE.properties b/dozentenmodul/src/main/properties/i18n/helper_de_DE.properties new file mode 100644 index 00000000..a19ff009 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/helper_de_DE.properties @@ -0,0 +1,18 @@ +# ExpiryDateChooser +ExpiryDateChooser.Label.newDate.text=Neues Ablaufdatum: +ExpiryDateChooser.Label.daysToExtend.text=Geben Sie ein, um wie viele Tage diese Version(en) verlängert werden soll(en): +ExpiryDateChooser.ConfirmDialog.ret.title=Ablaufdatum verlängern + +# MessageType +MessageType.debug=Debug +MessageType.info=Hinweis +MessageType.warning=Warnung +MessageType.warningRetry=Fehler +MessageType.error=Fehler +MessageType.errorRetry=Fehler +MessageType.questionYesNo=Frage + +# Language +Language.german=Deutsch +Language.english=English +Language.turkish=Türkçe
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/helper_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/helper_tr_TR.properties new file mode 100644 index 00000000..6538f6da --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/helper_tr_TR.properties @@ -0,0 +1,18 @@ +# ExpiryDateChooser +ExpiryDateChooser.Label.newDate.text=Yeni geçerlilik tarihi: +ExpiryDateChooser.Label.daysToExtend.text=Bu sürümün/sürümlerin kaç gün uzatılması gerektiğini girin: +ExpiryDateChooser.ConfirmDialog.ret.title=Geçerlilik tarihi uzatma + +# MessageType +MessageType.debug=Hata ayıklama +MessageType.info=Bilgi +MessageType.warning=Uyarı +MessageType.warningRetry=Hata +MessageType.error=Hata +MessageType.errorRetry=Hata +MessageType.questionYesNo=Soru + +# Language +Language.german=Deutsch +Language.english=English +Language.turkish=Türkçe
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/page.properties b/dozentenmodul/src/main/properties/i18n/page.properties new file mode 100644 index 00000000..1fbefa1a --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/page.properties @@ -0,0 +1,74 @@ +# ImageMetaDataPage +ImageMetaData.WizardPage.warningMessage.noOS=Select the operating system. +ImageMetaData.WizardPage.warningMessage.noDescription=Add a description. +ImageMetaData.WizardPage.description=Click on ''Next'' to set permissions \ + or ''Finish''. + +# ImageUploadPage +ImageUpload.Message.error.couldNotGetMetadata=Could not read {0} +ImageUpload.WizardPage.errorMessage.invalidConfigFile=Invalid configuration file selected! +ImageUpload.WizardPage.errorMessage.hypervisorNotSupported=The hypervisor of the selected VM {0} is not \ + supported by the current satellite server. +ImageUpload.WizardPage.errorMessage.VMTypeChanged=New versions must be of type {0}. +ImageUpload.WizardPage.errorMessage.noHDD=The selected {0} file contains no virtual hard disk! +ImageUpload.WizardPage.errorMessage.moreThanOneHDD=The selected {0} file contains more than \ + one virtual disk! +ImageUpload.WizardPage.errorMessage.diskImageNotFound=''{0}'' cannot be found! +ImageUpload.WizardPage.errorMessage.diskImageNotReadable=''{0}'' cannot be read! +ImageUpload.WizardPage.errorMessage.diskImageHasUnknownFormat=''{0}'' has unknown file format! +ImageUpload.WizardPage.errorMessage.diskImageSnapshot=The selected VM is in snapshot state. +ImageUpload.Message.warning.diskImageSnapshot=A snapshot was taken of the selected VM. \ + In this state\n the VM unfortunately cannot be loaded into the {0} system. Please consolidate\n\ + the snapshot first and try again. +ImageUpload.WizardPage.errorMessage.diskImageStandalone=The VMDK file of the VM has an incompatible format +ImageUpload.Message.warning.diskImageStandalone=The virtual hard disk associated with this VM is in the format ''{0}''.\ + \nThis format is not supported by {1}. Please convert the VM\n\ + into the format ''monolithicSparse''. +ImageUpload.WizardPage.description=You can now start the upload. +ImageUpload.Message.yesNo.cancelLockFile=The selected VM seems to be still in use. Please shut down the VM\n\ + before uploading and close the VMware Player, otherwise\n\ + the VM may be damaged after uploading.\n\n\ + Do you want to ignore this warning and continue anyway?\n\ + (You should be sure what you are doing if you choose ''Yes'' here.) +ImageUpload.WizardPage.errorMessage.cancelLockFile=The selected VM is still in use +ImageUpload.Message.error.uploadInitiatorFailed=Upload initialization failed + +# ImageUploadSummaryPage +ImageUploadSummary.UploadInitState.requesting=The upload process is negotiated with the server... +ImageUploadSummary.UploadInitState.waitingForSlot=The server is currently overloaded, because too many uploads are \ + running at the same time. It waits until the server has free capacity again. \ + Please do not close this window. +ImageUploadSummary.UploadInitState.uploadStarting=The connection to transfer the VM is established... +ImageUploadSummary.UploadInitState.uploadStarted=The upload of your virtual machine has started. \ + If you wish, you can close this wizard and continue using the application. \ + The transfer continues in the background. +ImageUploadSummary.UploadInitState.error=The initialization of the upload to the server has failed. \ + You can try to start the process again. If the problem still persists, \ + contact the {0} support of your institution. +ImageUploadSummary.UploadInitState.errorMoreInfo=<br><br>Further information:<br>{0} +ImageUploadSummary.UploadInitState.completed=The virtual machine was successfully uploaded to the server. + +# LectureCreationPage +LectureCreation.WizardPage.title=New +LectureCreation.Label.endBeforeStart.text=End time is before start time! +LectureCreation.Label.calcPeriod.text={0} day(s) +LectureCreation.WizardPage.warningMessage.noName=Enter a lecture name. +LectureCreation.WizardPage.warningMessage.noDesc=Add a description. +LectureCreation.WizardPage.warningMessage.startAfterEnd=Start time is after end time! +LectureCreation.WizardPage.warningMessage.nowAfterEnd=End time is in the past! +LectureCreation.WizardPage.warningMessage.endAfterLatestPossibleDate=End time is after the latest possible date: {0} +LectureCreation.WizardPage.description.0=Click on ''Next'' to select a virtual machine. +LectureCreation.WizardPage.description.1=Click on ''Next'' to set permissions \ + or ''Finish''. + +# LectureImageListPage +LectureImageList.WizardPage.description=Click on ''Next'' +LectureImageList.WizardPage.errorMessage.noPerms=Insufficient permissions to link to this VM. +LectureImageList.WizardPage.errorMessage.invalidVM=Invalid VM selected + +# LectureLocationSelectionPage +LectureLocationSelection.WizardPage.errorMessage.tooManyLocations=Too many rooms/locations selected + +# LectureOptionsPage +LectureOptions.WizardPage.description=Click on ''Next'' to set permissions \ + or ''Finish''.
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/page_de_DE.properties b/dozentenmodul/src/main/properties/i18n/page_de_DE.properties new file mode 100644 index 00000000..32b885ad --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/page_de_DE.properties @@ -0,0 +1,74 @@ +# ImageMetaDataPage +ImageMetaData.WizardPage.warningMessage.noOS=Wählen Sie das Betriebssystem aus. +ImageMetaData.WizardPage.warningMessage.noDescription=Fügen Sie eine Beschreibung hinzu. +ImageMetaData.WizardPage.description=Klicken Sie auf ''Weiter'', um Berechtigungen festzulegen \ + oder ''Fertigstellen''. + +# ImageUploadPage +ImageUpload.Message.error.couldNotGetMetadata=Konnte {0} nicht lesen +ImageUpload.WizardPage.errorMessage.invalidConfigFile=Ungültige Konfigurationsdatei ausgewählt! +ImageUpload.WizardPage.errorMessage.hypervisorNotSupported=Der Hypervisor der gewählten VM {0} wird vom \ + aktuellen Satellitenserver nicht unterstützt. +ImageUpload.WizardPage.errorMessage.VMTypeChanged=Neue Versionen müssen vom Typ {0} sein. +ImageUpload.WizardPage.errorMessage.noHDD=Die gewählte {0}-Datei enthält keine virtuelle Festplatte! +ImageUpload.WizardPage.errorMessage.moreThanOneHDD=Die gewählte {0}-Datei enthält mehr als \ + eine virtuelle Festplatte! +ImageUpload.WizardPage.errorMessage.diskImageNotFound=''{0}'' kann nicht gefunden werden! +ImageUpload.WizardPage.errorMessage.diskImageNotReadable=''{0}'' kann nicht gelesen werden! +ImageUpload.WizardPage.errorMessage.diskImageHasUnknownFormat=''{0}'' hat unbekanntes Dateiformat! +ImageUpload.WizardPage.errorMessage.diskImageSnapshot=Die gewählte VM befindet sich im Snapshot-Zustand. +ImageUpload.Message.warning.diskImageSnapshot=Von der ausgewählten VM wurde ein Snapshot erstellt. \ + In diesem Zustand kann\n die VM leider nicht ins {0}-System geladen werden. Bitte konsolidieren Sie zunächst\n\ + den Snapshot und versuchen Sie es erneut. +ImageUpload.WizardPage.errorMessage.diskImageStandalone=Die VMDK Datei der VM hat ein inkompatibles Format +ImageUpload.Message.warning.diskImageStandalone=Die zu dieser VM gehörige Virtuelle Festplatte ist im Format ''{0}''.\n\ + Dieses Format wird von {1} nicht unterstützt. Bitte konvertieren Sie die VM\n\ + in das Format ''monolithicSparse''. +ImageUpload.WizardPage.description=Sie können jetzt den Upload starten. +ImageUpload.Message.yesNo.cancelLockFile=Die gewählte VM scheint noch in Verwendung zu sein. Bitte fahren Sie die VM\n\ + vor dem Hochladen herunter und schließen Sie den VMware Player, ansonsten\n\ + kann die VM nach dem Hochladen beschädigt sein.\n\n\ + Möchten Sie diese Warnung ignorieren und trotzdem fortfahren?\n\ + (Sie sollten sich sicher sein, was sie tun, wenn Sie hier ''Ja'' wählen.) +ImageUpload.WizardPage.errorMessage.cancelLockFile=Die gewählte VM wird noch verwendet +ImageUpload.Message.error.uploadInitiatorFailed=Upload-Initialisierung fehlgeschlagen + +# ImageUploadSummaryPage +ImageUploadSummary.UploadInitState.requesting=Der Upload-Vorgang wird mit dem Server ausgehandelt... +ImageUploadSummary.UploadInitState.waitingForSlot=Der Server ist zur Zeit überlastet, da zu viele Uploads gleichzeitig \ + laufen. Es wird gewartet, bis der Server wieder Kapazitäten frei hat. \ + Bitte schließen Sie dieses Fenster nicht. +ImageUploadSummary.UploadInitState.uploadStarting=Die Verbindung zur Übertragung der VM wird aufgebaut... +ImageUploadSummary.UploadInitState.uploadStarted=Der Upload Ihrer Virtuellen Maschine wurde gestartet. \ + Wenn Sie möchten, können Sie diesen Assistenten schließen und die Anwendung weiterverwenden. \ + Die Übertragung läuft dabei im Hintergrund weiter. +ImageUploadSummary.UploadInitState.error=Die Initialisierung des Uploads auf den Server ist fehlgeschlagen. \ + Sie können versuchen, den Vorgang erneut zu starten. Falls das Problem weiterhin besteht, \ + kontaktieren Sie den {0}-Support Ihrer Einrichtung. +ImageUploadSummary.UploadInitState.errorMoreInfo=<br><br>Weitere Informationen:<br>{0} +ImageUploadSummary.UploadInitState.completed=Die Virtuelle Maschine wurde erfolgreich auf den Server hochgeladen. + +# LectureCreationPage +LectureCreation.WizardPage.title=Neu +LectureCreation.Label.endBeforeStart.text=Endzeitpunkt ist vor Startzeitpunkt! +LectureCreation.Label.calcPeriod.text={0} Tag(e) +LectureCreation.WizardPage.warningMessage.noName=Geben Sie einen Veranstaltungsnamen ein. +LectureCreation.WizardPage.warningMessage.noDesc=Fügen Sie eine Beschreibung hinzu. +LectureCreation.WizardPage.warningMessage.startAfterEnd=Startzeit ist nach Endzeit! +LectureCreation.WizardPage.warningMessage.nowAfterEnd=Endzeit liegt in die Vergangenheit! +LectureCreation.WizardPage.warningMessage.endAfterLatestPossibleDate=Endzeit liegt nach dem spätest möglichen Datum: {0} +LectureCreation.WizardPage.description.0=Klicken Sie auf ''Weiter'', um eine Virtuelle Maschine auszuwählen. +LectureCreation.WizardPage.description.1=Klicken Sie auf ''Weiter'', um Berechtigungen festzulegen \ + oder ''Fertigstellen''. + +# LectureImageListPage +LectureImageList.WizardPage.description=Klicken Sie auf ''Weiter'' +LectureImageList.WizardPage.errorMessage.noPerms=Unzureichende Berechtigungen, um auf diese VM zu verlinken. +LectureImageList.WizardPage.errorMessage.invalidVM=Ungültige VM ausgewählt + +# LectureLocationSelectionPage +LectureLocationSelection.WizardPage.errorMessage.tooManyLocations=Zu viele Räume/Orte ausgewählt + +# LectureOptionsPage +LectureOptions.WizardPage.description=Klicken Sie auf ''Weiter'', um Berechtigungen festzulegen \ + oder ''Fertigstellen''.
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/page_layout.properties b/dozentenmodul/src/main/properties/i18n/page_layout.properties new file mode 100644 index 00000000..742d30fa --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/page_layout.properties @@ -0,0 +1,80 @@ +# ImageCustomPermissionPageLayout +ImageCustomPermission.WizardPage.title=Set permissions +ImageCustomPermission.WizardPage.description=Define the desired permissions here. +ImageCustomPermission.Label.defaultPerm.text=Default permissions +ImageCustomPermission.Label.defaultDesc.text=<html><body style='width:100%'> \ + Set the permissions for all other users (not shown \ + in the list) here.</body></html> +ImageCustomPermission.CheckBox.permissionLink.text=Link +ImageCustomPermission.CheckBox.permissionRead.text=Download +ImageCustomPermission.CheckBox.permissionEdit.text=Edit +ImageCustomPermission.CheckBox.permissionAdmin.text=Admin + +# ImageMetaDataPageLayout +ImageMetaData.WizardPage.title=Metadata +ImageMetaData.WizardPage.description=Please enter a meaningful name for the new VM. +ImageMetaData.Label.OS.text=Operating system +ImageMetaData.Label.startCommand.text=Start command +ImageMetaData.Label.description.text=Description +ImageMetaData.CheckBox.licenseRestricted.text=VM contains software requiring a license +ImageMetaData.CheckBox.isTemplate.text=Create template + +# ImageUploadPageLayout +ImageUpload.WizardPage.title=Create new VM +ImageUpload.WizardPage.description=Please select a virtual machine to upload. +ImageUpload.Label.imageFile.text=Virtual Machine +ImageUpload.Button.browseForImage.text=Browse +ImageUpload.Label.imageName.text=Name +ImageUpload.CheckBox.licenseRestricted.text=contains software requiring a license +ImageUpload.TextArea.info.title=Note +ImageUpload.TextArea.info.text=If you have not created your own virtual machine yet, \ + you can download a virtual machine as a template in the overview, \ + customize it to your needs and then upload it using this wizard.\ + \n\nIf you want to update the VM of an existing lecture, \ + open the detail view of the existing VM and select ''Upload new VM version''. \ + This ensures that existing permissions and links to lectures are retained. + +# ImageUploadSummaryPageLayout +ImageUploadSummary.WizardPage.title=Done! +ImageUploadSummary.WizardPage.description=Wizard completed +ImageUploadSummary.CheckBox.createLecture.text=Create a lecture for this VM + +# LectureCreationPageLayout +LectureCreation.WizardPage.description=Please enter a meaningful name for the new lecture. +LectureCreation.Label.name.text=Lecture name +LectureCreation.Label.description.text=Description +LectureCreation.Label.startTime.text=Start date +LectureCreation.Label.endTime.text=End date +LectureCreation.Label.period.text=Duration of the lecture: + +# LectureCustomPermissionPageLayout +LectureCustomPermission.WizardPage.title=Set permissions +LectureCustomPermission.WizardPage.description=Define the desired permissions here. +LectureCustomPermission.Label.defaultPerm.text=Default permissions +LectureCustomPermission.Label.defaultDesc.text=<html><body style='width:100%'> \ + Set the permissions for all other users (not shown \ + in the list) here.</body></html> +LectureCustomPermission.CheckBox.permissionEdit.text=Edit +LectureCustomPermission.CheckBox.permissionAdmin.text=Admin + +# LectureImageListPageLayout +LectureImageList.WizardPage.title=Link VM +LectureImageList.WizardPage.description=Select a VM for this lecture + +# LectureLocationSelection +LectureLocationSelection.WizardPage.title=Room selection +LectureLocationSelection.WizardPage.description=Please select the rooms for this lecture + +# LectureOptionsPageLayout +LectureOptions.WizardPage.title=Additional options +LectureOptions.WizardPage.description=Please choose from the following options: +LectureOptions.Label.general.text=General +LectureOptions.CheckBox.autoUpdate.text=Always update to the latest VM version +LectureOptions.CheckBox.isActive.text=Lecture is active +LectureOptions.CheckBox.isExam.text=Lecture is an exam +LectureOptions.Label.restrictions.text=Restrictions +LectureOptions.CheckBox.internetEnabled.text=Allow network/internet access +LectureOptions.CheckBox.USBEnabled.text=Allow storage media + +# LectureRestrictionPageLayout +LectureRestriction.WizardPage.title=Restrictions
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/page_layout_de_DE.properties b/dozentenmodul/src/main/properties/i18n/page_layout_de_DE.properties new file mode 100644 index 00000000..fb72af4c --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/page_layout_de_DE.properties @@ -0,0 +1,80 @@ +# ImageCustomPermissionPageLayout +ImageCustomPermission.WizardPage.title=Berechtigungen festlegen +ImageCustomPermission.WizardPage.description=Legen Sie hier die gewünschten Berechtigungen fest. +ImageCustomPermission.Label.defaultPerm.text=Standardberechtigungen +ImageCustomPermission.Label.defaultDesc.text=<html><body style='width:100%'> \ + Legen Sie hier die Berechtigungen für alle anderen (nicht in der Liste \ + angezeigten) Benutzer fest.</body></html> +ImageCustomPermission.CheckBox.permissionLink.text=Verlinken +ImageCustomPermission.CheckBox.permissionRead.text=Download +ImageCustomPermission.CheckBox.permissionEdit.text=Bearbeiten +ImageCustomPermission.CheckBox.permissionAdmin.text=Admin + +# ImageMetaDataPageLayout +ImageMetaData.WizardPage.title=Metadaten +ImageMetaData.WizardPage.description=Geben Sie bitte einen aussagekräftigen Namen für die neue VM ein. +ImageMetaData.Label.OS.text=Betriebssystem +ImageMetaData.Label.startCommand.text=Startbefehl +ImageMetaData.Label.description.text=Beschreibung +ImageMetaData.CheckBox.licenseRestricted.text=VM enthält lizenzpflichtige Software +ImageMetaData.CheckBox.isTemplate.text=Vorlage erstellen + +# ImageUploadPageLayout +ImageUpload.WizardPage.title=Neue VM anlegen +ImageUpload.WizardPage.description=Bitte wählen Sie eine Virtuelle Maschine zum Hochladen aus. +ImageUpload.Label.imageFile.text=Virtuelle Maschine +ImageUpload.Button.browseForImage.text=Durchsuchen +ImageUpload.Label.imageName.text=Name +ImageUpload.CheckBox.licenseRestricted.text=enthält lizenzpflichtige Software +ImageUpload.TextArea.info.title=Hinweis +ImageUpload.TextArea.info.text=Haben Sie noch keine eigene Virtuelle Maschine erstellt, \ + können Sie sich in der Übersicht eine Virtuelle Maschine als Vorlage herunterladen, \ + diese an Ihre Bedürfnisse anpassen und anschließend über diesen Assistenten hochladen.\ + \n\nWenn Sie die VM einer bestehenden Veranstaltung aktualisieren möchten, \ + öffnen Sie die Detailansicht der bestehenden VM und wählen Sie ''Neue VM-Version hochladen''. \ + Dadurch bleiben bestehende Berechtigungen sowie Verknüpfungen zu Veranstaltungen erhalten. + +# ImageUploadSummaryPageLayout +ImageUploadSummary.WizardPage.title=Fertig! +ImageUploadSummary.WizardPage.description=Assistent abgeschlossen +ImageUploadSummary.CheckBox.createLecture.text=Veranstaltung zu dieser VM erstellen + +# LectureCreationPageLayout +LectureCreation.WizardPage.description=Geben Sie bitte einen aussagekräftigen Namen für die neue Veranstaltung ein. +LectureCreation.Label.name.text=Veranstaltungsname +LectureCreation.Label.description.text=Beschreibung +LectureCreation.Label.startTime.text=Startdatum +LectureCreation.Label.endTime.text=Enddatum +LectureCreation.Label.period.text=Dauer der Veranstaltung: + +# LectureCustomPermissionPageLayout +LectureCustomPermission.WizardPage.title=Berechtigungen festlegen +LectureCustomPermission.WizardPage.description=Legen Sie hier die gewünschten Berechtigungen fest. +LectureCustomPermission.Label.defaultPerm.text=Standardberechtigungen +LectureCustomPermission.Label.defaultDesc.text=<html><body style='width:100%'> \ + Legen Sie hier die Berechtigungen für alle anderen (nicht in der Liste \ + angezeigten) Benutzer fest.</body></html> +LectureCustomPermission.CheckBox.permissionEdit.text=Bearbeiten +LectureCustomPermission.CheckBox.permissionAdmin.text=Admin + +# LectureImageListPageLayout +LectureImageList.WizardPage.title=VM verknüpfen +LectureImageList.WizardPage.description=Wählen Sie eine VM für diese Veranstaltung aus + +# LectureLocationSelection +LectureLocationSelection.WizardPage.title=Raumauswahl +LectureLocationSelection.WizardPage.description=Bitte wählen Sie die Räume für diese Veranstaltung aus + +# LectureOptionsPageLayout +LectureOptions.WizardPage.title=Zusätzliche Optionen +LectureOptions.WizardPage.description=Bitte wählen Sie aus folgenden Optionen aus: +LectureOptions.Label.general.text=Allgemeines +LectureOptions.CheckBox.autoUpdate.text=Immer auf aktuellste VM-Version updaten +LectureOptions.CheckBox.isActive.text=Veranstaltung ist aktiv +LectureOptions.CheckBox.isExam.text=Veranstaltung ist eine Prüfung +LectureOptions.Label.restrictions.text=Beschränkungen +LectureOptions.CheckBox.internetEnabled.text=Netzwerk-/Internetzugriff zulassen +LectureOptions.CheckBox.USBEnabled.text=Speichermedien zulassen + +# LectureRestrictionPageLayout +LectureRestriction.WizardPage.title=Beschränkungen
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/page_layout_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/page_layout_tr_TR.properties new file mode 100644 index 00000000..f5b04d24 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/page_layout_tr_TR.properties @@ -0,0 +1,80 @@ +# ImageCustomPermissionPageLayout +ImageCustomPermission.WizardPage.title=Erişim izinlerini ayarlama +ImageCustomPermission.WizardPage.description=İstediğiniz erişim izinlerini burada tanımlayın. +ImageCustomPermission.Label.defaultPerm.text=Varsayılan erişim izinleri +ImageCustomPermission.Label.defaultDesc.text=<html><body style='width:100%'> \ + Diğer tüm kullanıcılar için (listede \ + olmayan) erişim izinlerini burada ayarlayın.</body></html> +ImageCustomPermission.CheckBox.permissionLink.text=Bağlantı ekleme +ImageCustomPermission.CheckBox.permissionRead.text=İndirme +ImageCustomPermission.CheckBox.permissionEdit.text=Düzenleme +ImageCustomPermission.CheckBox.permissionAdmin.text=Yönetim + +# ImageMetaDataPageLayout +ImageMetaData.WizardPage.title=Meta veriler +ImageMetaData.WizardPage.description=Lütfen yeni sanal makine için anlamlı bir isim girin. +ImageMetaData.Label.OS.text=İşletim sistemi +ImageMetaData.Label.startCommand.text=Başlangıç komutu +ImageMetaData.Label.description.text=Açıklama +ImageMetaData.CheckBox.licenseRestricted.text=Sanal makine lisans gerektiren yazılım içeriyor +ImageMetaData.CheckBox.isTemplate.text=Şablon oluştur + +# ImageUploadPageLayout +ImageUpload.WizardPage.title=Yeni sanal makine oluştur +ImageUpload.WizardPage.description=Lütfen yüklenecek bir sanal makine seçin. +ImageUpload.Label.imageFile.text=Sanal makine +ImageUpload.Button.browseForImage.text=Gözat +ImageUpload.Label.imageName.text=İsim +ImageUpload.CheckBox.licenseRestricted.text=lisans gerektiren yazılım içeriyor +ImageUpload.TextArea.info.title=Not +ImageUpload.TextArea.info.text=Henüz kendi sanal makinenizi oluşturmadıysanız, \ + genel görünümden herhangi bir sanal makineyi şablon olarak indirebilir, \ + kendi ihtiyaçlarınıza göre uyarlayabilir ve ardından bu sihirbazı kullanarak yükleyebilirsiniz.\ + \n\nEğer mevcut bir etkinliğin sanal makinesini güncellemek istiyorsanız, \ + sanal makinenin detay görünümünü açın ve ''Yeni sanal makine sürümü yükle'' seçeneğini seçin. \ + Böylelikle hem mevcut erişim izinleri hem de bağlantılar korunmuş olur. + +# ImageUploadSummaryPageLayout +ImageUploadSummary.WizardPage.title=Tamamlandı! +ImageUploadSummary.WizardPage.description=Yükleme sihirbazı tamamlandı +ImageUploadSummary.CheckBox.createLecture.text=Bu sanal makine için bir etkinlik oluştur + +# LectureCreationPageLayout +LectureCreation.WizardPage.description=Lütfen yeni etkinlik için anlamlı bir isim girin. +LectureCreation.Label.name.text=Etkinlik adı +LectureCreation.Label.description.text=Açıklama +LectureCreation.Label.startTime.text=Başlangıç tarihi +LectureCreation.Label.endTime.text=Bitiş tarihi +LectureCreation.Label.period.text=Etkinlik süresi: + +# LectureCustomPermissionPageLayout +LectureCustomPermission.WizardPage.title=Erişim izinlerini ayarlama +LectureCustomPermission.WizardPage.description=İstediğiniz erişim izinlerini burada tanımlayın. +LectureCustomPermission.Label.defaultPerm.text=Varsayılan erişim izinleri +LectureCustomPermission.Label.defaultDesc.text=<html><body style='width:100%'> \ + Diğer tüm kullanıcılar için (listede \ + olmayan) erişim izinlerini burada ayarlayın.</body></html> +LectureCustomPermission.CheckBox.permissionEdit.text=Düzenleme +LectureCustomPermission.CheckBox.permissionAdmin.text=Yönetim + +# LectureImageListPageLayout +LectureImageList.WizardPage.title=Sanal makine bağlantısı ekle +LectureImageList.WizardPage.description=Bu etkinlik için bir sanal makine seçin + +# LectureLocationSelection +LectureLocationSelection.WizardPage.title=Oda seçimi +LectureLocationSelection.WizardPage.description=Lütfen bu etkinlik için oda seçin + +# LectureOptionsPageLayout +LectureOptions.WizardPage.title=İlave seçenekler +LectureOptions.WizardPage.description=Lütfen aşağıdaki seçeneklerden seçiminizi yapın: +LectureOptions.Label.general.text=Genel +LectureOptions.CheckBox.autoUpdate.text=Her zaman en son sanal makine sürümüne güncelle +LectureOptions.CheckBox.isActive.text=Etkinlik aktif +LectureOptions.CheckBox.isExam.text=Etkinlik bir sınav +LectureOptions.Label.restrictions.text=Kısıtlamalar +LectureOptions.CheckBox.internetEnabled.text=Ağ/internet erişimine izin ver +LectureOptions.CheckBox.USBEnabled.text=Depolama ortamına izin ver + +# LectureRestrictionPageLayout +LectureRestriction.WizardPage.title=Kısıtlamalar
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/page_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/page_tr_TR.properties new file mode 100644 index 00000000..7e7bd445 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/page_tr_TR.properties @@ -0,0 +1,74 @@ +# ImageMetaDataPage +ImageMetaData.WizardPage.warningMessage.noOS=İşletim sistemini seçin. +ImageMetaData.WizardPage.warningMessage.noDescription=Bir açıklama ekleyin. +ImageMetaData.WizardPage.description=Erişim izinlerini ayarlamak için ''İleri'', \ + işlemi sonlandırmak için ''Bitir'' butonuna tıklayın. + +# ImageUploadPage +ImageUpload.Message.error.couldNotGetMetadata={0} okunamadı +ImageUpload.WizardPage.errorMessage.invalidConfigFile=Geçersiz yapılandırma dosyası seçildi! +ImageUpload.WizardPage.errorMessage.hypervisorNotSupported=Seçilen {0} sanal makinesinin hipervizörü mevcut \ + satelit sunucusu tarafından desteklenmiyor. +ImageUpload.WizardPage.errorMessage.VMTypeChanged=Yeni sürümler {0} türünde olmalıdır. +ImageUpload.WizardPage.errorMessage.noHDD=Seçilen {0} dosyası hiçbir sanal sabit disk içermiyor! +ImageUpload.WizardPage.errorMessage.moreThanOneHDD=Seçilen {0} dosyası birden fazla \ + sanal sabit disk içeriyor! +ImageUpload.WizardPage.errorMessage.diskImageNotFound=''{0}'' bulunamıyor! +ImageUpload.WizardPage.errorMessage.diskImageNotReadable=''{0}'' okunamıyor! +ImageUpload.WizardPage.errorMessage.diskImageHasUnknownFormat=''{0}'' bilinmeyen dosya formatına sahip! +ImageUpload.WizardPage.errorMessage.diskImageSnapshot=Seçilen sanal makine snapshot durumunda. +ImageUpload.Message.warning.diskImageSnapshot=Seçilen sanal makinenin snapshot''ı alındı. \ + Bu durumda\n sanal makine maalesef {0} sistemine yüklenemez. Lütfen önce snapshot birleştirme\n\ + işlemini gerçekleştirin ve sonra tekrar deneyin. +ImageUpload.WizardPage.errorMessage.diskImageStandalone=Sanal makinenin VMDK dosyası uyumsuz bir formata sahip +ImageUpload.Message.warning.diskImageStandalone=Bu sanal makineye ait sanal sabit disk ''{0}'' formatında.\n\ + Bu format {1} tarafından desteklenmiyor. Lütfen sanal makineyi\n\ + ''monolithicSparse'' formatına dönüştürün. +ImageUpload.WizardPage.description=Şimdi yüklemeyi başlatabilirsiniz. +ImageUpload.Message.yesNo.cancelLockFile=Seçilen sanal makine hâlâ kullanımda gibi görünüyor. Lütfen\n\ + yüklemeden önce sanal makineyi ve VMware Player''ı kapatın, aksi hâlde\n\ + sanal makine yüklendikten sonra hasar görebilir.\n\n\ + Bu uyarıyı yok sayıp yine de devam etmek istiyor musunuz?\n\ + (Eğer burada ''Evet''i seçerseniz ne yaptığınızdan emin olmalısınız.) +ImageUpload.WizardPage.errorMessage.cancelLockFile=Seçilen sanal makine hâlâ kullanımda +ImageUpload.Message.error.uploadInitiatorFailed=Yükleme işlemi başlatılamadı + +# ImageUploadSummaryPage +ImageUploadSummary.UploadInitState.requesting=Yükleme işlemi için sunucu bağlantısı denetleniyor... +ImageUploadSummary.UploadInitState.waitingForSlot=Aynı anda çok fazla yükleme işlemi gerçekleştiği için \ + sunucu şu anda aşırı yüklenmiş durumda. Mevcut yükleme işlemlerinin tamamlanması ve boş slot açılması bekleniyor. \ + Lütfen bu pencereyi kapatmayın. +ImageUploadSummary.UploadInitState.uploadStarting=Sanal makinenin aktarımı için bağlantı kuruluyor... +ImageUploadSummary.UploadInitState.uploadStarted=Sanal makinenizin yükleme işlemi başladı. \ + Dilerseniz bu pencereyi kapatabilir ve uygulamayı kullanmaya devam edebilirsiniz. \ + Yükleme işlemi arka planda devam edecektir. +ImageUploadSummary.UploadInitState.error=Sanal makine yükleme işlemi başlatılamadı. \ + İşlemi yeniden başlatmayı deneyebilirsiniz. Sorunun hâlâ devam etmesi durumunda \ + kurumunuzun {0} desteğine başvurun. +ImageUploadSummary.UploadInitState.errorMoreInfo=<br><br>Daha fazla bilgi:<br>{0} +ImageUploadSummary.UploadInitState.completed=Sanal makine sunucuya başarılı bir şekilde yüklendi. + +# LectureCreationPage +LectureCreation.WizardPage.title=Yeni +LectureCreation.Label.endBeforeStart.text=Bitiş tarihi başlangıç tarihinden önce! +LectureCreation.Label.calcPeriod.text={0} gün +LectureCreation.WizardPage.warningMessage.noName=Bir etkinlik adı girin. +LectureCreation.WizardPage.warningMessage.noDesc=Bir açıklama ekleyin. +LectureCreation.WizardPage.warningMessage.startAfterEnd=Başlangıç tarihi bitiş tarihinden sonra! +LectureCreation.WizardPage.warningMessage.nowAfterEnd=Bitiş tarihi geçmişte! +LectureCreation.WizardPage.warningMessage.endAfterLatestPossibleDate=Bitiş tarihi mümkün olan en son tarihten sonra: {0} +LectureCreation.WizardPage.description.0=Sanal makine seçmek için ''İleri'' butonuna tıklayın. +LectureCreation.WizardPage.description.1=Erişim izinlerini ayarlamak için ''İleri'', \ + işlemi sonlandırmak için ''Bitir'' butonuna tıklayın. + +# LectureImageListPage +LectureImageList.WizardPage.description=''İleri'' butonuna tıklayın +LectureImageList.WizardPage.errorMessage.noPerms=Bu sanal makineye bağlantı eklemek için yeterli erişim izni yok. +LectureImageList.WizardPage.errorMessage.invalidVM=Geçersiz sanal makine seçildi + +# LectureLocationSelectionPage +LectureLocationSelection.WizardPage.errorMessage.tooManyLocations=Çok fazla oda/yer seçildi + +# LectureOptionsPage +LectureOptions.WizardPage.description=Erişim izinlerini ayarlamak için ''İleri'', \ + işlemi sonlandırmak için ''Bitir'' butonuna tıklayın.
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/thrift.properties b/dozentenmodul/src/main/properties/i18n/thrift.properties new file mode 100644 index 00000000..9770aef0 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/thrift.properties @@ -0,0 +1,96 @@ +# GuiErrorCallback +GuiErrorCallback.Message.error.notAuthenticatedOrInvalidToken=Invalid session token or failed \ + authentication on {0}!\nPlease restart the program. Exit now? +GuiErrorCallback.thriftError.String.errMsg=(Error {0}) +GuiErrorCallback.Message.error.transportException=The communication with {0} is interrupted. \ + Calling the function {1} is failed {2}.\n\n\ + Do you want to retry the call? + +# ImageLocalDetailsActions +ImageLocalDetailsActions.Message.error.writeImagePermissionsFailed=Could not write permissions +ImageLocalDetailsActions.Message.error.setVirtualizerConfigFailed=Error while saving the VM configuration! + +# ThriftActions +ThriftActions.Message.error.satellitesNullOrEmpty=Login successful, but no satellite server was found.\n\ + Please enter the address of your server manually. +ThriftActions.Message.error.addressListNullOrEmpty=Login successful, but no address is stored for the\n\ + selected satellite server. Unable to connect. +ThriftActions.Message.error.couldNotGetNewClient=Authentication successful, but connection to the satellite server \ + is not possible.\n\nThe server may not be available or the network connection may be down. +ThriftActions.Message.error.versionNotCompatible=The lecturer module you are using is not \ + compatible with the selected satellite server.\nYour version: {0}\nSatellite version: {1} +ThriftActions.Message.error.authorizationException=Authentication successful, but the satellite server \ + refuses the connection.\nTry to login again.\n +ThriftActions.Message.error.sessionInternalError=Authentication successful, but an internal error \ + occurred during communication with the satellite server. +ThriftActions.Message.error.sessionUnknownError=Unknown error while connecting to the satellite server. +ThriftActions.Message.error.createImageFailed=Failed to create the VM +ThriftActions.Message.error.createImageUnknownError=Unknown error while creating the VM +ThriftActions.FileChooser.fc.dialogTitle=Please choose a storage location +ThriftActions.Message.yesNo.destDirExists=Directory ''{0}'' already exists, do you want to overwrite the VM in it? +ThriftActions.Message.error.couldNotDeleteDiskFile=File could not be overwritten! +ThriftActions.Message.error.destDirHasNotEnoughFreeSpace=Not enough space available in the selected \ + directory.\nNeeded: {0}\nHave: {1} +ThriftActions.Message.error.downloadRequestFailed=The download request failed +ThriftActions.Message.error.destinationNotWritable=Could not prepare download: The selected destination \ + is not writable +ThriftActions.Message.warning.diskImageCompressed=<html>The downloaded VM ''{0}'' is a compressed \ + image.<br>You must decompress the image before you can modify it.<br>The VM will \ + probably not be able to start locally!<br><br>Please read the notes under <a href="{1}">VMDK Disk Types</a> +ThriftActions.Message.warning.couldNotWrapVM=No vmx file could be created for the downloaded VM.\n\ + You can try to manually import the image into the VMWare-Player. +ThriftActions.Message.error.getImageDetailsFailed=Error while reading the metadata +ThriftActions.Message.error.getImagePermissionsFailed=Error while reading the metadata +ThriftActions.Message.error.setImageOwnerFailed=Error during transfer of ownership +ThriftActions.Message.error.couldNotGetImageBase=Error while fetching the versions/lecture for \ + the following VM: {0} +ThriftActions.deleteImageBase.String.questionText.0=The VM "{0}" has following valid versions:\n +ThriftActions.deleteImageBase.String.questionText.1=The following lectures are linked to this VM: \n +ThriftActions.deleteImageBase.String.questionText.2=Do you really want to continue with the delete operation? +ThriftActions.Message.error.couldNotDeleteImageBase=Could not delete VM data! +ThriftActions.Message.error.couldNotGetImageVersion=Error while fetching the list of lectures +ThriftActions.deleteImageVersion.String.questionText.0=This version is linked to the following lectures:\n +ThriftActions.deleteImageVersion.String.questionText.1=\nDo you want to delete this version including \ + lectures?\n +ThriftActions.deleteImageVersion.String.questionText.2=Do you really want to delete the VM image version \ + from {0}? +ThriftActions.Message.error.couldNotDeleteImageVersion=Error while deleting the version +ThriftActions.Message.error.createLectureFailed=Failed to create lecture +ThriftActions.Message.error.writeLecturePermissionsFailed=Failed to write lecture permissions +ThriftActions.Message.error.getLectureDetailsFailed=Could not retrieve lecture data +ThriftActions.Message.error.updateLectureFailed=Error while updating the lecture +ThriftActions.Message.error.getLecturePermissionsFailed=Could not retrieve lecture data +ThriftActions.Message.error.setLectureOwnerFailed=Error during transfer of ownership +ThriftActions.deleteLecture.String.messageText.0=Do you really want to delete this lecture? +ThriftActions.deleteLecture.String.messageText.1=Do you really want to delete the {0} lectures? + +# ThriftError +ThriftError.Message.error.notFoundException=\n\nNot found +ThriftError.Message.error.authorizationException=\n\nAccess denied: {0}\n{1} +ThriftError.Message.error.invocationException=\n\nThe function call could not be executed: {0}\n{1} +ThriftError.Message.error.invalidDateParam=\n\nA given date is invalid:\n{0} +ThriftError.Message.error.transferRejectedException=\n\nThe transfer request was rejected by the server:\n{0} +ThriftError.Message.error.unexpectedException=\n\nUnexpected exception {0} has occurred. +ThriftError.InvocationError.null=Internal server side error +ThriftError.InvocationError.internalServerError=Internal server side error +ThriftError.InvocationError.invalidData=A parameter has an invalid value +ThriftError.InvocationError.invalidShareMode=Invalid share mode +ThriftError.InvocationError.missingData=One parameter is missing (null?) +ThriftError.InvocationError.unknownImage=Unknown VM/Image +ThriftError.InvocationError.unknownLecture=Unknown lecture +ThriftError.InvocationError.unknownUser=Unknown user +ThriftError.InvocationError.default=Unknown error code: {0} +ThriftError.AuthorizationError.null=(AuthorizationError=null) +ThriftError.AuthorizationError.accountSuspended=The user account is suspended +ThriftError.AuthorizationError.bannedNetwork=The network you are operating on is blocked +ThriftError.AuthorizationError.challengeFailed=Challenge failed +ThriftError.AuthorizationError.genericError=Generic error +ThriftError.AuthorizationError.invalidCredentials=Invalid credentials\nMake sure that username and \ + password are correct +ThriftError.AuthorizationError.invalidKey=Invalid key +ThriftError.AuthorizationError.invalidOrganization=Invalid or unknown organization +ThriftError.AuthorizationError.invalidToken=Invalid session token +ThriftError.AuthorizationError.notAuthenticated=Not authenticated +ThriftError.AuthorizationError.noPermission=Not sufficient permissions +ThriftError.AuthorizationError.organizationSuspended=Your associated organization is suspended +ThriftError.AuthorizationError.default=Unknown error code: {0}
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/thrift_de_DE.properties b/dozentenmodul/src/main/properties/i18n/thrift_de_DE.properties new file mode 100644 index 00000000..340c7be0 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/thrift_de_DE.properties @@ -0,0 +1,96 @@ +# GuiErrorCallback +GuiErrorCallback.Message.error.notAuthenticatedOrInvalidToken=Ungültiges Sitzungstoken oder fehlerhafte \ + Authentifizierung am {0}!\nBitte starten Sie das Programm neu. Jetzt beenden? +GuiErrorCallback.thriftError.String.errMsg=(Fehler {0}) +GuiErrorCallback.Message.error.transportException=Die Kommunikation mit {0} ist gestört. \ + Der Aufruf der Funktion {1} ist fehlgeschlagen {2}.\n\n\ + Möchten Sie den Aufruf wiederholen? + +# ImageLocalDetailsActions +ImageLocalDetailsActions.Message.error.writeImagePermissionsFailed=Konnte Berechtigungen nicht schreiben +ImageLocalDetailsActions.Message.error.setVirtualizerConfigFailed=Fehler beim Speichern der VM-Konfiguration! + +# ThriftActions +ThriftActions.Message.error.satellitesNullOrEmpty=Login erfolgreich, aber es wurde kein Satellitenserver gefunden.\n\ + Bitte geben Sie die Adresse Ihres Servers manuell an. +ThriftActions.Message.error.addressListNullOrEmpty=Login erfolgreich, aber für den ausgewählten Satellitenserver ist\n\ + keine Adresse hinterlegt. Kann nicht verbinden. +ThriftActions.Message.error.couldNotGetNewClient=Authentifizierung erfolgreich, die Verbindung zum Satellitenserver \ + ist jedoch nicht möglich.\n\nMöglicherweise ist der Server nicht verfügbar, oder die Netzwerkverbindung gestört. +ThriftActions.Message.error.versionNotCompatible=Das von Ihnen verwendete Dozentenmodul ist nicht mit dem \ + gewählten Satellitenserver kompatibel.\nIhre Version: {0}\nSatelliten-Version: {1} +ThriftActions.Message.error.authorizationException=Authentifizierung erfolgreich, der Satellitenserver \ + verweigert jedoch die Verbindung.\nVersuchen Sie, sich erneut anzumelden.\n +ThriftActions.Message.error.sessionInternalError=Authentifizierung erfolgreich, bei der Kommunikation mit \ + dem Satellitenserver trat jedoch ein interner Fehler auf. +ThriftActions.Message.error.sessionUnknownError=Unbekannter Fehler beim Verbinden mit dem Satellitenserver. +ThriftActions.Message.error.createImageFailed=Erstellen der VM fehlgeschlagen +ThriftActions.Message.error.createImageUnknownError=Unbekannter Fehler beim Erstellen der VM +ThriftActions.FileChooser.fc.dialogTitle=Bitte wählen Sie einen Speicherort +ThriftActions.Message.yesNo.destDirExists=Verzeichnis ''{0}'' existiert bereits, wollen Sie die VM darin überschreiben? +ThriftActions.Message.error.couldNotDeleteDiskFile=Datei konnte nicht überschrieben werden! +ThriftActions.Message.error.destDirHasNotEnoughFreeSpace=Nicht genügend Speicherplatz im ausgewählten Verzeichnis \ + verfügbar.\nBrauche: {0}\nHabe: {1} +ThriftActions.Message.error.downloadRequestFailed=Die Download-Anfrage ist gescheitert +ThriftActions.Message.error.destinationNotWritable=Konnte Download nicht vorbereiten: Der gewählte Zielort \ + ist nicht beschreibbar +ThriftActions.Message.warning.diskImageCompressed=<html>Die heruntergeladene VM ''{0}'' ist ein komprimiertes \ + Abbild.<br>Sie müssen das Abbild dekomprimieren, bevor Sie es verändern können.<br>Die VM wird lokal \ + voraussichtlich nicht startfähig sein!<br><br>Bitte lesen Sie die Hinweise unter <a href="{1}">VMDK Disk Types</a> +ThriftActions.Message.warning.couldNotWrapVM=Zur heruntergeladenen VM konnte keine vmx-Datei angelegt werden.\n\ + Sie können versuchen, das Abbild manuell in den VMWare-Player zu importieren. +ThriftActions.Message.error.getImageDetailsFailed=Fehler beim Lesen der Metadaten +ThriftActions.Message.error.getImagePermissionsFailed=Fehler beim Lesen der Metadaten +ThriftActions.Message.error.setImageOwnerFailed=Fehler beim Übertragen der Besitzrechte +ThriftActions.Message.error.couldNotGetImageBase=Fehler beim Holen der Versionen/Veranstaltung zu \ + folgender VM: {0} +ThriftActions.deleteImageBase.String.questionText.0=Die VM "{0}" hat folgende gültige Versionen:\n +ThriftActions.deleteImageBase.String.questionText.1=Folgende Veranstaltungen sind mit dieser VM verknüpft: \n +ThriftActions.deleteImageBase.String.questionText.2=Wollen Sie wirklich mit dem Löschen fortfahren? +ThriftActions.Message.error.couldNotDeleteImageBase=Konnte VM-Daten nicht löschen! +ThriftActions.Message.error.couldNotGetImageVersion=Fehler beim Holen der Liste der Veranstaltungen +ThriftActions.deleteImageVersion.String.questionText.0=Diese Version ist zu folgende Veranstaltungen verknüpft:\n +ThriftActions.deleteImageVersion.String.questionText.1=\nWollen Sie diese Version samt Veranstaltungen \ + löschen?\n +ThriftActions.deleteImageVersion.String.questionText.2=Wollen Sie die VM-Image-Version vom {0} Uhr \ + wirklich löschen? +ThriftActions.Message.error.couldNotDeleteImageVersion=Fehler beim Löschen der Version +ThriftActions.Message.error.createLectureFailed=Fehler beim Erstellen der Veranstaltung +ThriftActions.Message.error.writeLecturePermissionsFailed=Fehler beim Schreiben der Veranstaltungsberechtigungen +ThriftActions.Message.error.getLectureDetailsFailed=Konnte Veranstaltungdaten nicht abrufen +ThriftActions.Message.error.updateLectureFailed=Fehler beim Updaten der Veranstaltung +ThriftActions.Message.error.getLecturePermissionsFailed=Konnte Veranstaltungdaten nicht abrufen +ThriftActions.Message.error.setLectureOwnerFailed=Fehler beim Übertragen der Besitzrechte +ThriftActions.deleteLecture.String.messageText.0=Wollen Sie diese Veranstaltung wirklich löschen? +ThriftActions.deleteLecture.String.messageText.1=Wollen Sie die {0} Veranstaltungen wirklich löschen? + +# ThriftError +ThriftError.Message.error.notFoundException=\n\nNicht gefunden +ThriftError.Message.error.authorizationException=\n\nZugriff verweigert: {0}\n{1} +ThriftError.Message.error.invocationException=\n\nDer Funktionsaufruf konnte nicht durchgeführt werden: {0}\n{1} +ThriftError.Message.error.invalidDateParam=\n\nEin angegebenes Datum ist ungültig:\n{0} +ThriftError.Message.error.transferRejectedException=\n\nDie Transferanfrage wurde vom Server abgelehnt:\n{0} +ThriftError.Message.error.unexpectedException=\n\nUnerwartete Ausnahme {0} ist aufgetreten. +ThriftError.InvocationError.null=Interner serverseitiger Fehler +ThriftError.InvocationError.internalServerError=Interner serverseitiger Fehler +ThriftError.InvocationError.invalidData=Ein Parameter hat einen ungültigen Wert +ThriftError.InvocationError.invalidShareMode=Ungültiger Share-Mode +ThriftError.InvocationError.missingData=Ein Parameter fehlt (null?) +ThriftError.InvocationError.unknownImage=Unbekannte VM/Image +ThriftError.InvocationError.unknownLecture=Unbekannte Veranstaltung +ThriftError.InvocationError.unknownUser=Unbekannter Benutzer +ThriftError.InvocationError.default=Unbekannter Fehlercode: {0} +ThriftError.AuthorizationError.null=(AuthorizationError=null) +ThriftError.AuthorizationError.accountSuspended=Das Benutzerkonto ist gesperrt +ThriftError.AuthorizationError.bannedNetwork=Das Netzwerk, aus dem Sie operieren, ist gesperrt +ThriftError.AuthorizationError.challengeFailed=Challenge fehlgeschlagen +ThriftError.AuthorizationError.genericError=Generischer Fehler +ThriftError.AuthorizationError.invalidCredentials=Ungültige Zugangsdaten\nStellen Sie sicher, dass Benutzername \ + und Passwort korrekt sind +ThriftError.AuthorizationError.invalidKey=Ungültiger Schlüssel +ThriftError.AuthorizationError.invalidOrganization=Ungültige oder unbekannte Organisation +ThriftError.AuthorizationError.invalidToken=Ungültiges Sitzungstoken +ThriftError.AuthorizationError.notAuthenticated=Nicht authentifiziert +ThriftError.AuthorizationError.noPermission=Keine ausreichenden Berechtigungen +ThriftError.AuthorizationError.organizationSuspended=Ihre zugehörige Organisation ist gesperrt +ThriftError.AuthorizationError.default=Unbekannter Fehlercode: {0}
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/thrift_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/thrift_tr_TR.properties new file mode 100644 index 00000000..76e244c6 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/thrift_tr_TR.properties @@ -0,0 +1,96 @@ +# GuiErrorCallback +GuiErrorCallback.Message.error.notAuthenticatedOrInvalidToken={0} üzerinde geçersiz oturum belirteci veya \ + başarısız kimlik doğrulaması!\nLütfen programı yeniden başlatın. Şimdi sonlandır? +GuiErrorCallback.thriftError.String.errMsg=(Hata {0}) +GuiErrorCallback.Message.error.transportException={0} ile iletişim kesildi. \ + {1} işlevinin çağrılması başarısız oldu {2}.\n\n\ + İşlemi tekrar denemek istiyor musunuz? + +# ImageLocalDetailsActionss +ImageLocalDetailsActions.Message.error.writeImagePermissionsFailed=Erişim izinleri yazılamadı +ImageLocalDetailsActions.Message.error.setVirtualizerConfigFailed=Sanal makine yapılandırması kaydedilirken hata oluştu! + +# ThriftActions +ThriftActions.Message.error.satellitesNullOrEmpty=Giriş başarılı, ancak hiçbir satelit sunucusu bulunamadı.\n\ + Lütfen sunucunuzun adresini manuel olarak girin. +ThriftActions.Message.error.addressListNullOrEmpty=Giriş başarılı, ancak seçilen satelit sunucusu için\n\ + kayıtlı hiçbir adres bulunamadı. Bağlantı kurulamıyor. +ThriftActions.Message.error.couldNotGetNewClient=Kimlik doğrulama başarılı, ancak satelit sunucusuyla \ + bağlantı kurulamıyor.\n\nSunucu kullanılabilir durumda olmayabilir veya ağ bağlantısı hatalı olabilir. +ThriftActions.Message.error.versionNotCompatible=Kullandığınız öğretim modülü, \ + seçilen satelit sunucusuyla uyumlu değil.\nSizin sürümünüz: {0}\nSatelit sunucusu sürümü: {1} +ThriftActions.Message.error.authorizationException=Kimlik doğrulama başarılı, ancak satelit sunucusu \ + bağlantıyı reddediyor.\nTekrar giriş yapmayı deneyin.\n +ThriftActions.Message.error.sessionInternalError=Kimlik doğrulama başarılı, ancak satelit sunucusuyla \ + iletişim kurulurken dahili bir hata oluştu. +ThriftActions.Message.error.sessionUnknownError=Satelit sunucusuna bağlanırken bilinmeyen bir hata oluştu. +ThriftActions.Message.error.createImageFailed=Sanal makine oluşturulamadı +ThriftActions.Message.error.createImageUnknownError=Sanal makine oluşturulurken bilinmeyen bir hata oluştu +ThriftActions.FileChooser.fc.dialogTitle=Lütfen bir depolama yeri seçin +ThriftActions.Message.yesNo.destDirExists=''{0}'' dizini zaten var, üzerine yazmak istiyor musunuz? +ThriftActions.Message.error.couldNotDeleteDiskFile=Dosyanın üzerine yazılamadı! +ThriftActions.Message.error.destDirHasNotEnoughFreeSpace=Seçilen dizinde yeterli boş alan \ + yok.\nGerekli boş alan: {0}\nMevcut boş alan: {1} +ThriftActions.Message.error.downloadRequestFailed=İndirme isteği başarısız oldu +ThriftActions.Message.error.destinationNotWritable=İndirme hazırlanamadı: Seçilen hedef \ + yazılabilir değil +ThriftActions.Message.warning.diskImageCompressed=<html>İndirilen sanal makine ''{0}'' sıkıştırılmış \ + bir imaj dosyası.<br>İmaj dosyasını değiştirebilmek için önce açmanız gerekir.<br>Sanal makine muhtemelen \ + lokal olarak başlatılamayacak!<br><br>Lütfen <a href="{1}">VMDK Disk Tipleri</a> altındaki notları okuyun. +ThriftActions.Message.warning.couldNotWrapVM=İndirilen sanal makine için hiçbir vmx dosyası oluşturulamadı.\n\ + İmajı manuel olarak VMWare-Player''a aktarmayı deneyebilirsiniz. +ThriftActions.Message.error.getImageDetailsFailed=Meta veriler okunurken hata oluştu +ThriftActions.Message.error.getImagePermissionsFailed=Meta veriler okunurken hata oluştu +ThriftActions.Message.error.setImageOwnerFailed=Sahiplik aktarımı sırasında hata oluştu +ThriftActions.Message.error.couldNotGetImageBase=Aşağıdaki sanal makine için sürümler/etkinlikler alınırken \ + hata oluştu: {0} +ThriftActions.deleteImageBase.String.questionText.0="{0}" sanal makinesi için mevcut olan geçerli sürümler:\n +ThriftActions.deleteImageBase.String.questionText.1=Bu sanal makineyle bağlantılı olan etkinlikler: \n +ThriftActions.deleteImageBase.String.questionText.2=Silme işlemini gerçekleştirmek istediğinizden emin misiniz? +ThriftActions.Message.error.couldNotDeleteImageBase=Sanal makine verileri silinemedi! +ThriftActions.Message.error.couldNotGetImageVersion=Etkinlikler listesi alınırken hata oluştu +ThriftActions.deleteImageVersion.String.questionText.0=Bu sürümün bağlantılı olduğu etkinlikler:\n +ThriftActions.deleteImageVersion.String.questionText.1=\nEtkinlikler de dahil olmak üzere bu sürümü silmek \ + istiyor musunuz?\n +ThriftActions.deleteImageVersion.String.questionText.2={0} tarihinde oluşturulmuş sanal makine imaj sürümünü \ + gerçekten silmek istiyor musunuz? +ThriftActions.Message.error.couldNotDeleteImageVersion=Sürüm silinirken hata oluştu +ThriftActions.Message.error.createLectureFailed=Etkinlik oluşturulurken hata oluştu +ThriftActions.Message.error.writeLecturePermissionsFailed=Etkinlik erişim izinleri yazılırken hata oluştu +ThriftActions.Message.error.getLectureDetailsFailed=Etkinlik verileri alınamadı +ThriftActions.Message.error.updateLectureFailed=Etkinlik güncellenirken hata oluştu +ThriftActions.Message.error.getLecturePermissionsFailed=Etkinlik verileri alınamadı +ThriftActions.Message.error.setLectureOwnerFailed=Sahiplik aktarımı sırasında hata oluştu +ThriftActions.deleteLecture.String.messageText.0=Bu etkinliği silmek istediğinizden emin misiniz? +ThriftActions.deleteLecture.String.messageText.1={0} etkinliği silmek istediğinizden emin misiniz? + +# ThriftError +ThriftError.Message.error.notFoundException=\n\nBulunamadı +ThriftError.Message.error.authorizationException=\n\nErişim reddedildi: {0}\n{1} +ThriftError.Message.error.invocationException=\n\nİşlev çağrısı gerçekleştirilemedi: {0}\n{1} +ThriftError.Message.error.invalidDateParam=\n\nGirilen tarihlerden bir tanesi geçersiz:\n{0} +ThriftError.Message.error.transferRejectedException=\n\nTransfer isteği sunucu tarafından reddedildi:\n{0} +ThriftError.Message.error.unexpectedException=\n\nBeklenmeyen {0} istisnası oluştu. +ThriftError.InvocationError.null=Dahili sunucu tarafı hatası +ThriftError.InvocationError.internalServerError=Dahili sunucu tarafı hatası +ThriftError.InvocationError.invalidData=Bir parametrenin değeri geçersiz +ThriftError.InvocationError.invalidShareMode=Geçersiz paylaşım modu +ThriftError.InvocationError.missingData=Bir parametre eksik (boş?) +ThriftError.InvocationError.unknownImage=Bilinmeyen sanal makine/imaj +ThriftError.InvocationError.unknownLecture=Bilinmeyen etkinlik +ThriftError.InvocationError.unknownUser=Bilinmeyen kullanıcı +ThriftError.InvocationError.default=Bilinmeyen hata kodu: {0} +ThriftError.AuthorizationError.null=(AuthorizationError=null) +ThriftError.AuthorizationError.accountSuspended=Kullanıcı hesabı engellendi +ThriftError.AuthorizationError.bannedNetwork=Kullandığınız ağ engellendi +ThriftError.AuthorizationError.challengeFailed=Challenge başarısız oldu +ThriftError.AuthorizationError.genericError=Genel hata +ThriftError.AuthorizationError.invalidCredentials=Geçersiz giriş bilgileri\nKullanıcı adınızın ve şifrenizin \ + doğru olduğundan emin olun +ThriftError.AuthorizationError.invalidKey=Geçersiz anahtar +ThriftError.AuthorizationError.invalidOrganization=Geçersiz veya bilinmeyen kuruluş +ThriftError.AuthorizationError.invalidToken=Geçersiz oturum belirteci +ThriftError.AuthorizationError.notAuthenticated=Kimlik doğrulanmadı +ThriftError.AuthorizationError.noPermission=Yeterli erişim izni yok +ThriftError.AuthorizationError.organizationSuspended=İlişkili kuruluşunuz engellendi +ThriftError.AuthorizationError.default=Bilinmeyen hata kodu: {0}
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/window.properties b/dozentenmodul/src/main/properties/i18n/window.properties new file mode 100644 index 00000000..ed908af3 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/window.properties @@ -0,0 +1,144 @@ +# BwIdmLinkWindow +BwIdmLink.Dialog.title=Registration required +BwIdmLink.Label.info.title=Note +BwIdmLink.Label.info.text=<html><body style='width:100%'>\ + You are not registered at {0}. \ + Please go to the specified page to register and try again.\ + </body></html> +BwIdmLink.Button.link.text=Open page in browser +BwIdmLink.Button.ok.text=Close + +# ConfigWindow +Config.Label.yourAddress.text=Your address is {0} +Config.Message.error.couldNotGetUserConfFromSat=Could not get the user specific configuration \ + from the satellite +Config.Message.error.couldNotSaveUserConfOnSat=Could not save the user specific configuration \ + on the satellite +Config.Message.info.restartNeededToApplyChanges=The changes only become effective after a program \ + restart. + +# GenericNoticeWindow +GenericNotice.Button.continue.text=Close +GenericNotice.Message.yesNo.closeWindow=If you do not accept this legal notice, \ + you cannot use the software! \ + Are you sure you want to cancel? + +# ImageDetailsWindow +ImageDetails.MenuItem.newLecture.text=New lecture +ImageDetails.MenuItem.download.text=Download +ImageDetails.MenuItem.vmConfig.text=VM Configuration +ImageDetails.MenuItem.delete.text=Delete +ImageDetails.MenuItem.extendExpirationDate.text=Extend expiry date +ImageDetails.Message.yesNo.changeOwner=Are you sure you want to transfer \ + the owner rights to another user? +ImageDetails.Button.changeOwner.caption=Set owner +ImageDetails.TextField.title.error=Name must not be empty +ImageDetails.TextField.description.error=Description must not be empty +ImageDetails.ComboBox.OS.error=Invalid operating system selected! +ImageDetails.ComboBox.shareMode.error=Invalid operating system selected! +ImageDetails.Message.error.couldNotRetrieveVMConfig=Could not retrieve VM configuration. +ImageDetails.Message.info.setImageOwner=Transfer ownership rights to {0} +ImageDetails.Message.error.publishNonVMWareImage={0} is currently not released for public exchange. +ImageDetails.Message.yesNo.currentlyModified=You have unsaved changes, do you want to save them first? +ImageDetails.Message.yesNo.confirmOrAbort=Do you really want to publish this VM nationwide? +ImageDetails.Message.error.uploadFailed=Upload of the VM to the master server failed. \ + Please check whether you agreed to the nationwide VM exchange when registering.\n \ + You can check this here:\n \ + {0} \n\n +ImageDetails.Message.info.passiveTransfer=The transfer runs directly between the satellite server and \ + the {0} central server.\n If you close the {1}, the transfer will continue anyway. +ImageDetails.Message.error.saveChangesInternal=Could not submit updated metadata to the server +ImageDetails.Message.error.saveCustomPermissions=Could not submit changed permissions to the server +ImageDetails.Message.error.performImageDownload=Selected version is invalid +ImageDetails.Message.error.extendVersionExpiry=Could not extend expiry date of version {0}. +ImageDetails.Message.info.extendVersionExpiry=Successfully extended images: {0} +ImageDetails.Message.yesNo.safeClose=Changes will be discarded, do you really want to close? + +# ImageListWindow +ImageList.MenuItem.newLecture.text=New lecture +ImageList.MenuItem.edit.text=Detail view +ImageList.MenuItem.delete.text=Delete +ImageList.MenuItem.download.text=Download +ImageList.Message.error.hasLatestVersion=The selected VM has no valid image version +ImageList.Message.info.deleteImages=The following images could not be deleted: {0} + +# ImagePublishedWindow +ImagePublished.Message.error.satDownload=Could not start download +ImagePublished.Message.info.satDownload=The transfer runs directly between the satellite server and \ + the {0} central server.\n If you close the {1}, the transfer will continue anyway. + +# LectureChangeImage +LectureChangeImage.Message.error.imageInvalid=Selected VM is invalid! +LectureChangeImage.Message.error.canNotLinkToVM=No permissions to link to the selected VM. + +# LectureDetailsWindow +LectureDetails.ComboBox.versions.error=No/invalid VM version selected +LectureDetails.Message.error.endAfterStart=End date must not be before the start date +LectureDetails.Message.error.endAfterMaxValidity=End date is after the {0} +LectureDetails.TextField.title.error=Lecture name must not be empty +LectureDetails.TextField.description.error=Description must not be empty +LectureDetails.NetRulesConfigurator.error=Incorrect network rules +LectureDetails.Message.yesNo.changeOwner=Are you sure you want to transfer \ + the owner rights to another user? +LectureDetails.Button.changeOwner.caption=Set owner +LectureDetails.Message.info.setLectureOwner=Transfer ownership rights to {0} +LectureDetails.Message.error.imageInvalid=VM invalid. +LectureDetails.Message.error.imageVersionInvalid=Invalid VM version selected +LectureDetails.Message.error.imageVersionFileSizeInvalid=Error while querying the size of the VM image. +LectureDetails.Message.error.saveChangesInternal=Error while saving the lecture! +LectureDetails.Message.error.saveCustomPermissions=Error while transferring of permissions! +LectureDetails.Message.error.isPeriodValid=Start of the lecture is after the end date! +LectureDetails.Message.yesNo.safeClose=Changes will be discarded, do you really want to close? + +# LectureListWindow +LectureList.FilterType.all=Show all +LectureList.FilterType.own=Show own/assigned ones only +LectureList.FilterType.active=Show active only +LectureList.FilterType.editable=Show editable only +LectureList.FilterType.expiring=Show soon expiring +LectureList.FilterType.exams=Show exams +LectureList.MenuItem.new.text=New +LectureList.MenuItem.edit.text=Detail view +LectureList.MenuItem.linked.text=Show VM Details +LectureList.MenuItem.download.text=Download linked VM +LectureList.MenuItem.delete.text=Delete +LectureList.Message.yesNo.switchView=To create a lecture, \ + you have to select a VM. Switch to VM selection? +LectureList.Message.error.canNotListImages=You do not have the required permissions. +LectureList.Message.error.deleteLecture=Reason: {0} +LectureList.Message.info.deleteLectures=The following lectures could not be deleted: {0} + +# LocationSelectionWindow +LocationSelection.Message.warning.saveChanges=Please reduce the number of selected locations +LocationSelection.Message.error.locationSelector=Too many places selected! + +# LoginWindow +Login.Message.error.noLoginType=Please select an authentication type. +Login.Message.error.noOrganization=Please select your organization as ''Identity Provider''. +Login.Message.error.noUsername=No username given! +Login.Message.error.noPassword=No password given! +Login.Message.error.authIdentityProvider=IdP Error +Login.Message.error.authServiceProvider=Invalid token from the service provider! +Login.Message.error.authInvalidURL=Invalid URL. +Login.Message.error.authInternal=Internal error! +Login.Message.error.authMasterServer=The master server has rejected the login attempt \ + with the following message:\n\n{0} +Login.Message.error.loginTypeDirectConnect=Not yet implemented +Login.Message.error.loginTypeDefault=No login type selected! +Login.Message.error.loginFailed=Login failed + +# SatelliteListWindow +SatelliteList.Message.error.noSatellite=No satellite selected + +# VirtConfigEditorWindow +VirtConfigEditor.Message.error.invalidInputTitle=Invalid inputs:\n +VirtConfigEditor.Message.error.invalidInputText=Do you still want to save? (The invalid lines will be \ + deleted automatically.) +VirtConfigEditor.Message.yesNo.safeClose=Your changes in this window will be lost, \ + do you still want to cancel? + +# VirtDropDownConfigEditorWindow +VirtDropDownConfigEditor.Message.warning.initializeComboBoxes=You saved an incorrect entry \n\ + during the last configuration. \nThe VM will not start! +VirtDropDownConfigEditor.Message.yesNo.safeClose=Do you really want to cancel?\n\ + Your changes will be discarded.
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/window_de_DE.properties b/dozentenmodul/src/main/properties/i18n/window_de_DE.properties new file mode 100644 index 00000000..96c7efb1 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/window_de_DE.properties @@ -0,0 +1,144 @@ +# BwIdmLinkWindow +BwIdmLink.Dialog.title=Registrierung erforderlich +BwIdmLink.Label.info.title=Hinweis +BwIdmLink.Label.info.text=<html><body style='width:100%'>\ + Sie sind nicht bei {0} registriert. \ + Bitte rufen Sie die angegebene Seite auf, um sich zu registrieren und versuchen Sie es erneut.\ + </body></html> +BwIdmLink.Button.link.text=Seite im Browser öffnen +BwIdmLink.Button.ok.text=Schließen + +# ConfigWindow +Config.Label.yourAddress.text=Ihre Adresse ist {0} +Config.Message.error.couldNotGetUserConfFromSat=Konnte die benutzerspezifische Konfiguration nicht \ + vom Satelliten holen +Config.Message.error.couldNotSaveUserConfOnSat=Konnte die benutzerspezifische Konfiguration nicht \ + auf dem Satelliten speichern +Config.Message.info.restartNeededToApplyChanges=Die Änderungen werden erst nach einem Programmneustart \ + wirksam. + +# GenericNoticeWindow +GenericNotice.Button.continue.text=Schließen +GenericNotice.Message.yesNo.closeWindow=Wenn Sie diesen rechtlichen Hinweis nicht akzeptieren, \ + können Sie die Software nicht verwenden! \ + Sind Sie sicher, dass Sie abbrechen wollen? + +# ImageDetailsWindow +ImageDetails.MenuItem.newLecture.text=Neue Veranstaltung +ImageDetails.MenuItem.download.text=Download +ImageDetails.MenuItem.vmConfig.text=VM-Konfiguration +ImageDetails.MenuItem.delete.text=Löschen +ImageDetails.MenuItem.extendExpirationDate.text=Ablaufzeitpunkt verlängern +ImageDetails.Message.yesNo.changeOwner=Sind Sie sicher, dass Sie die Besitzerrechte an \ + einen anderen Benutzer übertragen wollen? +ImageDetails.Button.changeOwner.caption=Besitzer festlegen +ImageDetails.TextField.title.error=Name darf nicht leer sein +ImageDetails.TextField.description.error=Beschreibung darf nicht leer sein +ImageDetails.ComboBox.OS.error=Ungültiges Betriebssystem ausgewählt! +ImageDetails.ComboBox.shareMode.error=Ungültiges Betriebssystem ausgewählt! +ImageDetails.Message.error.couldNotRetrieveVMConfig=Konnte VM-Konfiguration nicht abrufen. +ImageDetails.Message.info.setImageOwner=Besitzrechte übertragen an {0} +ImageDetails.Message.error.publishNonVMWareImage={0} ist derzeit nicht für den öffentlichen Austausch freigegeben. +ImageDetails.Message.yesNo.currentlyModified=Sie haben ungespeicherte Änderungen, wollen Sie diese erst speichern? +ImageDetails.Message.yesNo.confirmOrAbort=Wollen Sie diese VM wirklich landesweit veröffentlichen? +ImageDetails.Message.error.uploadFailed=Upload der VM auf den Masterserver fehlgeschlagen. \ + Prüfen Sie, ob Sie bei der Registrierung dem landesweiten VM-Austausch zugestimmt haben.\n \ + Sie können dies hier überprüfen:\n \ + {0} \n\n +ImageDetails.Message.info.passiveTransfer=Die Übertragung läuft direkt zwischen Satellitenserver und \ + dem {0} Zentral-Server.\n Wenn Sie die {1} schließen, wird der Transfer trotzdem weiterlaufen. +ImageDetails.Message.error.saveChangesInternal=Konnte aktualisierte Metadaten nicht an den Server übermitteln +ImageDetails.Message.error.saveCustomPermissions=Konnte geänderte Berechtigungen nicht an den Server übermitteln +ImageDetails.Message.error.performImageDownload=Ausgewählte Version ist ungültig +ImageDetails.Message.error.extendVersionExpiry=Konnte Ablaufdatum der Version {0} nicht verlängern. +ImageDetails.Message.info.extendVersionExpiry=Erfolgreich verlängerte Abbilder: {0} +ImageDetails.Message.yesNo.safeClose=Änderungen werden verworfen, wollen Sie wirklich schließen? + +# ImageListWindow +ImageList.MenuItem.newLecture.text=Neue Veranstaltung +ImageList.MenuItem.edit.text=Detailansicht +ImageList.MenuItem.delete.text=Löschen +ImageList.MenuItem.download.text=Download +ImageList.Message.error.hasLatestVersion=Die gewählte VM besitzt keine gültige Image-Version +ImageList.Message.info.deleteImages=Folgende images konnten nicht gelöscht werden: {0} + +# ImagePublishedWindow +ImagePublished.Message.error.satDownload=Konnte den Download nicht starten +ImagePublished.Message.info.satDownload=Die Übertragung läuft direkt zwischen Satellitenserver und \ + dem {0} Zentral-Server.\n Wenn Sie die {1} schließen, wird der Transfer trotzdem weiterlaufen. + +# LectureChangeImage +LectureChangeImage.Message.error.imageInvalid=Ausgewählte VM ist ungültig! +LectureChangeImage.Message.error.canNotLinkToVM=Keine Rechte zum Verlinken auf die ausgewählte VM. + +# LectureDetailsWindow +LectureDetails.ComboBox.versions.error=Keine/Ungültige VM-Version ausgewählt +LectureDetails.Message.error.endAfterStart=Enddatum darf nicht vor dem Startdatum liegen +LectureDetails.Message.error.endAfterMaxValidity=Enddatum liegt nach dem {0} +LectureDetails.TextField.title.error=Veranstaltungsname darf nicht leer sein +LectureDetails.TextField.description.error=Beschreibung darf nicht leer sein +LectureDetails.NetRulesConfigurator.error=Fehlerhafte Netzwerkregeln +LectureDetails.Message.yesNo.changeOwner=Sind Sie sicher, dass Sie die Besitzerrechte an \ + einen anderen Account übertragen wollen? +LectureDetails.Button.changeOwner.caption=Besitzer festlegen +LectureDetails.Message.info.setLectureOwner=Besitzrechte übertragen an {0} +LectureDetails.Message.error.imageInvalid=VM ungültig. +LectureDetails.Message.error.imageVersionInvalid=Ungültige VM-Version gewählt +LectureDetails.Message.error.imageVersionFileSizeInvalid=Fehler bei der Abfrage der Größe des VM-Abbildes. +LectureDetails.Message.error.saveChangesInternal=Fehler beim Speichern der Veranstaltung! +LectureDetails.Message.error.saveCustomPermissions=Fehler beim Übertragen der Berechtigungen! +LectureDetails.Message.error.isPeriodValid=Start der Veranstaltung ist nach dem Enddatum! +LectureDetails.Message.yesNo.safeClose=Änderungen werden verworfen, wollen Sie wirklich schließen? + +# LectureListWindow +LectureList.FilterType.all=Alle anzeigen +LectureList.FilterType.own=Nur eigene/zugewiesene anzeigen +LectureList.FilterType.active=Nur aktive anzeigen +LectureList.FilterType.editable=Nur editierbare anzeigen +LectureList.FilterType.expiring=Bald auslaufende anzeigen +LectureList.FilterType.exams=Prüfungsveranstaltungen anzeigen +LectureList.MenuItem.new.text=Neu +LectureList.MenuItem.edit.text=Detailansicht +LectureList.MenuItem.linked.text=VM-Details anzeigen +LectureList.MenuItem.download.text=Verlinkte VM herunterladen +LectureList.MenuItem.delete.text=Löschen +LectureList.Message.yesNo.switchView=Um eine Veranstaltung zu erstellen, \ + müssen Sie eine VM auswählen. Zur VM-Auswahl wechseln? +LectureList.Message.error.canNotListImages=Ihnen fehlen die benötigten Berechtigungen. +LectureList.Message.error.deleteLecture=Begründung: {0} +LectureList.Message.info.deleteLectures=Folgende Veranstaltungen konnten nicht gelöscht werden: {0} + +# LocationSelectionWindow +LocationSelection.Message.warning.saveChanges=Bitten reduzieren Sie die Anzahl gewählter Orte +LocationSelection.Message.error.locationSelector=Zu viele Orte ausgewählt! + +# LoginWindow +Login.Message.error.noLoginType=Bitte wählen Sie eine Authentifizierungsart. +Login.Message.error.noOrganization=Bitte wählen Sie Ihre Organisation als ''Identity Provider''. +Login.Message.error.noUsername=Kein Benutzername angegeben! +Login.Message.error.noPassword=Kein Passwort angegeben! +Login.Message.error.authIdentityProvider=IdP-Fehler +Login.Message.error.authServiceProvider=Ungültiges Token vom Service-Provider! +Login.Message.error.authInvalidURL=Ungültige URL. +Login.Message.error.authInternal=Interner Fehler! +Login.Message.error.authMasterServer=Der Masterserver hat den Loginversuch mit der \ + folgenden Nachricht abgewiesen:\n\n{0} +Login.Message.error.loginTypeDirectConnect=Noch nicht implementiert +Login.Message.error.loginTypeDefault=Keine Authentifizierungsart ausgewählt! +Login.Message.error.loginFailed=Anmeldung fehlgeschlagen + +# SatelliteListWindow +SatelliteList.Message.error.noSatellite=Kein Satellit ausgewählt + +# VirtConfigEditorWindow +VirtConfigEditor.Message.error.invalidInputTitle=Invalide Eingaben:\n +VirtConfigEditor.Message.error.invalidInputText=Wollen Sie trotzdem speichern? (Die invaliden Zeilen werden \ + dabei automatisch gelöscht.) +VirtConfigEditor.Message.yesNo.safeClose=Ihre Änderungen, in diesem Fenster, werden verloren gehen, \ + wollen Sie trotzdem abbrechen? + +# VirtDropDownConfigEditorWindow +VirtDropDownConfigEditor.Message.warning.initializeComboBoxes=Sie haben beim letzten Konfigurieren \n\ + einen falschen Eintrag eingespeichert. \nDie VM wird nicht starten! +VirtDropDownConfigEditor.Message.yesNo.safeClose=Wollen Sie wirklich abbrechen?\n\ + Ihre Änderungen werden verworfen.
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/window_layout.properties b/dozentenmodul/src/main/properties/i18n/window_layout.properties new file mode 100644 index 00000000..a3fcfcad --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/window_layout.properties @@ -0,0 +1,242 @@ +# CheckUpdateWindowLayout +CheckUpdate.Dialog.title=Version +CheckUpdate.TitledBorder.infoPanel.title=Update +CheckUpdate.Label.localVersion.text=Your version +CheckUpdate.Label.remoteVersion.text=Current version +CheckUpdate.TitledBorder.changelogPanel.title=Changelog +CheckUpdate.Button.link.text=To the download portal +CheckUpdate.Button.close.text=Close + +# ConfigWindowLayout +Config.Dialog.title={0} - Configuration +Config.Label.mailNotifications.text=E-mail notifications +Config.CheckBox.sendMeMail.text=Get informed about VM and lecture changes via e-mail +Config.Label.sendMeMail.text=This option requires the server to be configured to send mail. +Config.Label.proxyConfig.text=Proxy server +Config.RadioButton.proxyNone.text=Do not use a proxy +Config.RadioButton.proxyAuto.text=Automatically search for proxy +Config.Label.fontConfig.text=Font size (%) +Config.Label.fontConfigInfo.text=This function is experimental. Display errors may occur. +Config.Label.lookAndFeel.text=LookAndFeel +Config.Label.lookAndFeelInfo.text=Here you can change the display of the interface \ + between different ''LookAndFeels''. +Config.Label.concurrentConnections.text=Connections per transfer +Config.Label.concurrentConnectionsInfo.text=Normally, best results are achieved \ + if the setting is left at 1. If the transfer speed \ + does not overload your network connection, try the next higher \ + value. Too high values can have a negative effect on the \ + transfer speed and put a higher load on the satellite server. +Config.Label.language.text=Language +Config.Label.languageInfo.text=Here you can switch between the languages. +Config.Button.close.text=Close +Config.Button.save.text=Save + +# GenericNoticeWindowLayout +GenericNotice.TitledBorder.noticePanel.title=Note +GenericNotice.Label.noticePanel.text=Please read and confirm the following legal notice: +GenericNotice.CheckBox.agree.text=Yes, I accept the agreement. \ + Do not display notification again. +GenericNotice.Button.continue.text=Continue + +# ImageDetailsWindowLayout +ImageDetails.Label.description.text=Description +ImageDetails.Button.changeOwner.text=Change +ImageDetails.Label.owner.text=Owner +ImageDetails.Label.createTime.text=Created on +ImageDetails.Label.updater.text=Changed by +ImageDetails.Label.updateTime.text=Changed on +ImageDetails.Label.OS.text=Operating system +ImageDetails.Label.shareMode.text=Share mode +ImageDetails.CheckBox.isTemplate.text=Template +ImageDetails.Label.version.text=Version-ID +ImageDetails.Label.ID.text=VM-ID +ImageDetails.Label.virtualizer.text=Virtualizer +ImageDetails.Label.linkedLectureCount.text=Lectures +ImageDetails.Button.showLinkingLectures.text=Show +ImageDetails.Button.updateImage.text=Upload new VM version +ImageDetails.Button.updateImage.description=New VM version +ImageDetails.Button.uploadToMaster.text=Publish nationwide +ImageDetails.Button.uploadToMaster.description=Publish VM +ImageDetails.TitledBorder.defaultPermissionPane.title=Other users +ImageDetails.Label.defaultPerms.text=<html><body style='width:100%'>\ + Here you can set permissions for users not specified in the list:</body></html> +ImageDetails.CheckBox.permAdmin.text=Admin +ImageDetails.CheckBox.permDownload.text=Download +ImageDetails.CheckBox.permEdit.text=Edit +ImageDetails.CheckBox.permLink.text=Link +ImageDetails.Button.saveChanges.text=Save +ImageDetails.Button.close.text=Close +ImageDetails.Tab.overview.title=Overview +ImageDetails.Tab.versions.title=VM-Versions +ImageDetails.Tab.permissions.title=Permissions + +# ImageListWindowLayout +ImageList.Label.title.text=Overview virtual machines +ImageList.Label.info.text=Here you can upload, download, edit and delete virtual machines. +ImageList.Button.newVM.text=New VM +ImageList.Button.newVM.description=New VM +ImageList.Button.newLecture.text=New lecture +ImageList.Button.newLecture.description=New lecture +ImageList.Button.edit.text=Edit +ImageList.Button.edit.description=Edit VM +ImageList.Button.download.text=Download +ImageList.Button.download.description=Download VM +ImageList.Button.delete.text=Delete +ImageList.Button.delete.description=Delete VM +ImageList.Button.switchView.text=Show lectures +ImageList.Button.switchView.description=Switch +ImageList.Button.showPublishedImages.text=Public VMs +ImageList.Button.showPublishedImages.description=Published VMs + +# ImagePublishedWindowLayout +ImagePublished.Dialog.title=Public VMs +ImagePublished.Label.filterPanel.text=Search: +ImagePublished.Button.download.text=Download +ImagePublished.Button.download.description=Download +ImagePublished.Button.satDownload.text=Download to satellite +ImagePublished.Button.satDownload.description=Download to satellite +ImagePublished.Button.close.text=Close + +# LectureChangeImageLayout +LectureChangeImage.Dialog.title=Select VM to link +LectureChangeImage.Button.ok.text=Apply +LectureChangeImage.Button.close.text=Cancel + +# LectureDetailsWindowLayout +LectureDetails.Dialog.title=Lecture details +LectureDetails.Label.owner.text=Owner +LectureDetails.Label.createTime.text=Created on +LectureDetails.Label.updater.text=Changed by +LectureDetails.Label.updateTime.text=Changed on +LectureDetails.Label.imageName.text=Linked VM +LectureDetails.Label.startTime.text=Start date +LectureDetails.Label.endTime.text=End date +LectureDetails.Label.useCount.text=Views +LectureDetails.Label.title.text=Name +LectureDetails.Label.description.text=Description +LectureDetails.Label.ID.text=ID +LectureDetails.Button.changeOwner.text=Change +LectureDetails.Button.linkImage.text=Change +LectureDetails.CheckBox.autoUpdate.text=Always use latest version +LectureDetails.ComboBox.versionInvalid.text= [invalid] +LectureDetails.Button.downloadImage.text=Download +LectureDetails.Button.downloadImage.toolTipText=Download currently used version +LectureDetails.Label.version.text=VM-Version +LectureDetails.CheckBox.isActive.text=Lecture active +LectureDetails.CheckBox.hasInternetAccess.text=Allow network/internet access +LectureDetails.Label.hasInternetAccess.text=Specify here whether the lecture should have access \ + to the internet. You can include or exclude certain addresses and services in the list. +LectureDetails.CheckBox.hasUSBAccess.text=Allow external storage media +LectureDetails.Label.hasUSBAccess.text=Specify here whether the lecture should allow access \ + to storage media (CD, USB, ...) +LectureDetails.CheckBox.isExam.text=Exam mode +LectureDetails.Label.isExam.text=Mark this lecture as e-exam.\n\ + The lecture will only be visible if {0} is set to exam mode. \ + Contact your local {1} administrator for this. +LectureDetails.TitledBorder.defaultPermissionPane.title=Other users +LectureDetails.CheckBox.permEdit.text=Edit +LectureDetails.CheckBox.permAdmin.text=Admin +LectureDetails.Tab.info.title=Overview +LectureDetails.Tab.general.title=General +LectureDetails.Tab.restrictions.title=Restrictions +LectureDetails.Tab.netRules.title=Firewall +LectureDetails.Tab.locations.title=Room selection +LectureDetails.Tab.runScript.title=VM-Start +LectureDetails.Tab.permissions.title=Permissions +LectureDetails.Tab.netShare.title=Network drives +LectureDetails.Tab.ldapFilter.title=LDAP-Filters +LectureDetails.Button.close.text=Close +LectureDetails.Button.saveChanges.text=Save + +# LectureListWindowLayout +LectureList.Label.title.text=Overview lectures +LectureList.Label.info.text=Here you can create, edit and delete lectures. +LectureList.TitledBorder.filterPanel.title=Search +LectureList.Label.visibleLectureCount.text=Visible: +LectureList.Button.newLecture.text=New Lecture +LectureList.Button.newLecture.description=New Lecture +LectureList.Button.editLecture.text=Edit +LectureList.Button.editLecture.description=Edit Lecture +LectureList.Button.deleteLecture.text=Delete +LectureList.Button.deleteLecture.description=Delete Lecture +LectureList.Button.switchView.text=Show VMs +LectureList.Button.switchView.description=Switch + +# LocationSelectionWindowLayout +LocationSelection.Label.info.text=Here you can select the rooms \ + in which this lecture should be visible. +LocationSelection.Button.close.text=Cancel +LocationSelection.Button.saveChanges.text=Apply + +# LoginWindowLayout +Login.Dialog.title={0} - Login +Login.RadioButton.loginType.text.0=Authentication via {0} +Login.RadioButton.loginType.text.1=Test access with fixed user +Login.RadioButton.loginType.text.2=Direct access to the satellite +Login.Button.settings.text=Settings +Login.Button.logDir.text=Log directory +Login.Button.login.text=Login +Login.CheckBox.saveUsername.text=Remember username +Login.Button.openRegistration.text=Register +Login.TitledBorder.loginFormPanel.title=Login data +Login.Label.organization.text=Identity Provider +Login.Label.username.text=Username +Login.Label.password.text=Password +Login.TitledBorder.loginTypePanel.title=Login type +Login.TitledBorder.advancedPanel.title=Advanced +Login.ComboBox.organization.emptyText=Loading... + +# MainMenuWindowLayout +MainMenu.TitledBorder.title={0} Main Menu +MainMenu.Label.vmLogo.description=VM-Overview +MainMenu.Label.vmInfo.text=<html><b>Overview virtual machines</b><br>\ + Switch to the overview of the available virtual machines.<br>Here you can:<br><br>\ + 1) Create lectures based on a virtual machine<br>\ + 2) Upload new virtual machines<br>\ + 3) Download virtual machines<br>\ + 4) Edit and delete virtual machines</html> +MainMenu.Label.lecturesLogo.description=Lectures +MainMenu.Label.lecturesInfo.text=<html><b>Overview lectures</b><br>\ + Switch to the overview of available lectures.<br>Here you can:<br><br>\ + 1) Edit or delete lectures<br>\ + 2) Download virtual machines related to lectures<br> </html> +MainMenu.Button.showVMs.text=To the VMs +MainMenu.Button.showLectures.text=To the lectures + +# SatelliteListWindowLayout +SatelliteList.Dialog.title=Select satellite server +SatelliteList.Label.satList.text=Default server +SatelliteList.Label.customAddress.text=Enter server address manually +SatelliteList.Button.cancel.text=Cancel +SatelliteList.Button.continue.text=Next + +# UserListWindowLayout +UserList.Dialog.title=User list +UserList.Label.filterPanel.text=Search: +UserList.Button.cancel.text=Close + +# VirtConfigEditorWindowLayout +VirtConfigEditor.Dialog.title=VM-Configuration Editor +VirtConfigEditor.TitledBorder.pnlWarning.title=WARNING +VirtConfigEditor.Label.pnlWarning.text=<html>Changes to the VM configuration can cause malfunctions.\ + <br>Use at own risk!</html> +VirtConfigEditor.Button.cancel.text=Cancel +VirtConfigEditor.Button.save.text=Save + +# VirtDropDownConfigEditorWindowLayout +VirtDropDownConfigEditor.Dialog.title=VM-Configuration Editor +VirtDropDownConfigEditor.TitledBorder.pnlWarning.title=WARNING +VirtDropDownConfigEditor.Label.pnlWarning.text=Here you can modify some settings regarding \ + the virtual hardware used. Please note \ + that changes may require new drivers to be \ + available in the VM. In this case, after downloading a VM, \ + it is necessary to make the change locally, \ + install the necessary drivers, and re-upload the VM. +VirtDropDownConfigEditor.Label.sound.text=Sound card +VirtDropDownConfigEditor.Label.3DAcceleration.text=3D-Acceleration +VirtDropDownConfigEditor.Label.HWVersion.text=VMWare HW-Version +VirtDropDownConfigEditor.Label.E0VirtDev.text=Network interface card +VirtDropDownConfigEditor.Label.maxUSBSpeed.text=USB +VirtDropDownConfigEditor.Button.more.text=Expert mode +VirtDropDownConfigEditor.Button.cancel.text=Cancel +VirtDropDownConfigEditor.Button.save.text=Save
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/window_layout_de_DE.properties b/dozentenmodul/src/main/properties/i18n/window_layout_de_DE.properties new file mode 100644 index 00000000..a8768bac --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/window_layout_de_DE.properties @@ -0,0 +1,242 @@ +# CheckUpdateWindowLayout +CheckUpdate.Dialog.title=Version +CheckUpdate.TitledBorder.infoPanel.title=Update +CheckUpdate.Label.localVersion.text=Ihre Version +CheckUpdate.Label.remoteVersion.text=Aktuelle Version +CheckUpdate.TitledBorder.changelogPanel.title=Changelog +CheckUpdate.Button.link.text=Zum Download-Portal +CheckUpdate.Button.close.text=Schließen + +# ConfigWindowLayout +Config.Dialog.title={0} - Konfiguration +Config.Label.mailNotifications.text=E-Mail-Benachrichtigungen +Config.CheckBox.sendMeMail.text=Über VM- und Veranstaltungsänderungen per E-Mail informiert werden +Config.Label.sendMeMail.text=Für diese Option muss der Server für den Mailversand konfiguriert sein. +Config.Label.proxyConfig.text=Proxyserver +Config.RadioButton.proxyNone.text=Keinen Proxy verwenden +Config.RadioButton.proxyAuto.text=Automatisch nach Proxy suchen +Config.Label.fontConfig.text=Schriftgröße (%) +Config.Label.fontConfigInfo.text=Diese Funktion ist experimentell. Es kann zu Anzeigefehlern kommen. +Config.Label.lookAndFeel.text=LookAndFeel +Config.Label.lookAndFeelInfo.text=Hier können Sie die Darstellung der Oberfläche zwischen unterschiedlichen \ + ''LookAndFeels'' umstellen. +Config.Label.concurrentConnections.text=Verbindungen pro Transfer +Config.Label.concurrentConnectionsInfo.text=Im Normalfall werden beste Ergebnisse erzielt, \ + wenn die Einstellung auf 1 belassen wird. Falls die Übertragungsgeschwindigkeit \ + Ihre Netzwerkanbindung nicht auslastet, probieren Sie den nächsthöheren \ + Wert. Zu hohe Werte können einen negativen Effekt auf die \ + Übertragungsgeschwindigkeit haben und belasten den Satellitenserver stärker. +Config.Label.language.text=Sprache +Config.Label.languageInfo.text=Hier können Sie zwischen den Sprachen wechseln. +Config.Button.close.text=Schließen +Config.Button.save.text=Speichern + +# GenericNoticeWindowLayout +GenericNotice.TitledBorder.noticePanel.title=Hinweis +GenericNotice.Label.noticePanel.text=Bitte lesen und bestätigen Sie folgende rechtliche Hinweise: +GenericNotice.CheckBox.agree.text=Ja, ich akzeptiere die Vereinbarung. \ + Benachrichtigung nicht mehr anzeigen. +GenericNotice.Button.continue.text=Weiter + +# ImageDetailsWindowLayout +ImageDetails.Label.description.text=Beschreibung +ImageDetails.Button.changeOwner.text=Ändern +ImageDetails.Label.owner.text=Besitzer +ImageDetails.Label.createTime.text=Erstellt am +ImageDetails.Label.updater.text=Geändert durch +ImageDetails.Label.updateTime.text=Geändert am +ImageDetails.Label.OS.text=Betriebssystem +ImageDetails.Label.shareMode.text=Freigabemodus +ImageDetails.CheckBox.isTemplate.text=Vorlage +ImageDetails.Label.version.text=Versions-ID +ImageDetails.Label.ID.text=VM-ID +ImageDetails.Label.virtualizer.text=Virtualisierer +ImageDetails.Label.linkedLectureCount.text=Veranstaltungen +ImageDetails.Button.showLinkingLectures.text=Anzeigen +ImageDetails.Button.updateImage.text=Neue VM-Version hochladen +ImageDetails.Button.updateImage.description=Neue VM-Version +ImageDetails.Button.uploadToMaster.text=Landesweit veröffentlichen +ImageDetails.Button.uploadToMaster.description=VM veröffentlichen +ImageDetails.TitledBorder.defaultPermissionPane.title=Andere Nutzer +ImageDetails.Label.defaultPerms.text=<html><body style='width:100%'>\ + Hier können Sie Rechte für nicht in der Liste angegebene Nutzer festlegen:</body></html> +ImageDetails.CheckBox.permAdmin.text=Admin +ImageDetails.CheckBox.permDownload.text=Download +ImageDetails.CheckBox.permEdit.text=Bearbeiten +ImageDetails.CheckBox.permLink.text=Verlinken +ImageDetails.Button.saveChanges.text=Speichern +ImageDetails.Button.close.text=Schließen +ImageDetails.Tab.overview.title=Übersicht +ImageDetails.Tab.versions.title=VM-Versionen +ImageDetails.Tab.permissions.title=Berechtigungen + +# ImageListWindowLayout +ImageList.Label.title.text=Übersicht Virtuelle Maschinen +ImageList.Label.info.text=Hier können Sie Virtuelle Maschinen hochladen, herunterladen, bearbeiten und löschen. +ImageList.Button.newVM.text=Neue VM +ImageList.Button.newVM.description=Neue VM +ImageList.Button.newLecture.text=Neue Veranstaltung +ImageList.Button.newLecture.description=Neue Veranstaltung +ImageList.Button.edit.text=Bearbeiten +ImageList.Button.edit.description=VM bearbeiten +ImageList.Button.download.text=Download +ImageList.Button.download.description=VM herunterladen +ImageList.Button.delete.text=Löschen +ImageList.Button.delete.description=VM löschen +ImageList.Button.switchView.text=Veranstaltungen zeigen +ImageList.Button.switchView.description=Wechseln +ImageList.Button.showPublishedImages.text=Öffentliche VMs +ImageList.Button.showPublishedImages.description=Veröffentlichte VMs + +# ImagePublishedWindowLayout +ImagePublished.Dialog.title=Öffentliche VMs +ImagePublished.Label.filterPanel.text=Suchen: +ImagePublished.Button.download.text=Herunterladen +ImagePublished.Button.download.description=Herunterladen +ImagePublished.Button.satDownload.text=Auf Satellit herunterladen +ImagePublished.Button.satDownload.description=Auf Satellit herunterladen +ImagePublished.Button.close.text=Schließen + +# LectureChangeImageLayout +LectureChangeImage.Dialog.title=VM zum Verlinken auswählen +LectureChangeImage.Button.ok.text=Übernehmen +LectureChangeImage.Button.close.text=Abbrechen + +# LectureDetailsWindowLayout +LectureDetails.Dialog.title=Veranstaltungsdetails +LectureDetails.Label.owner.text=Besitzer +LectureDetails.Label.createTime.text=Erstellt am +LectureDetails.Label.updater.text=Geändert durch +LectureDetails.Label.updateTime.text=Geändert am +LectureDetails.Label.imageName.text=Verknüpfte VM +LectureDetails.Label.startTime.text=Startdatum +LectureDetails.Label.endTime.text=Enddatum +LectureDetails.Label.useCount.text=Aufrufe +LectureDetails.Label.title.text=Name +LectureDetails.Label.description.text=Beschreibung +LectureDetails.Label.ID.text=ID +LectureDetails.Button.changeOwner.text=Ändern +LectureDetails.Button.linkImage.text=Ändern +LectureDetails.CheckBox.autoUpdate.text=Immer aktuellste Version verwenden +LectureDetails.ComboBox.versionInvalid.text= [ungültig] +LectureDetails.Button.downloadImage.text=Download +LectureDetails.Button.downloadImage.toolTipText=Momentan verwendete Version herunterladen +LectureDetails.Label.version.text=VM-Version +LectureDetails.CheckBox.isActive.text=Veranstaltung aktiv +LectureDetails.CheckBox.hasInternetAccess.text=Netzwerk-/Internetzugriff zulassen +LectureDetails.Label.hasInternetAccess.text=Legen Sie hier fest, ob die Veranstaltung Zugriff zum Internet haben \ + soll. In der Liste können Sie bestimmte Adressen und Services ein- oder ausschließen. +LectureDetails.CheckBox.hasUSBAccess.text=Externe Speichermedien zulassen +LectureDetails.Label.hasUSBAccess.text=Legen Sie hier fest, ob die Veranstaltung den Zugriff \ + auf Speichermedien (CD, USB, ...) erlauben soll +LectureDetails.CheckBox.isExam.text=Prüfungsmodus +LectureDetails.Label.isExam.text=Markieren Sie diese Veranstaltung als E-Prüfung.\n\ + Die Veranstaltung wird nur dann startbar sein, wenn {0} in den Prüfungsmodus versetzt wird. \ + Kontaktieren Sie dazu Ihren lokalen {1}-Administrator. +LectureDetails.TitledBorder.defaultPermissionPane.title=Andere Nutzer +LectureDetails.CheckBox.permEdit.text=Bearbeiten +LectureDetails.CheckBox.permAdmin.text=Admin +LectureDetails.Tab.info.title=Übersicht +LectureDetails.Tab.general.title=Allgemein +LectureDetails.Tab.restrictions.title=Beschränkungen +LectureDetails.Tab.netRules.title=Firewall +LectureDetails.Tab.locations.title=Raumauswahl +LectureDetails.Tab.runScript.title=VM-Start +LectureDetails.Tab.permissions.title=Berechtigungen +LectureDetails.Tab.netShare.title=Netzlaufwerke +LectureDetails.Tab.ldapFilter.title=LDAP-Filter +LectureDetails.Button.close.text=Schließen +LectureDetails.Button.saveChanges.text=Speichern + +# LectureListWindowLayout +LectureList.Label.title.text=Übersicht Veranstaltungen +LectureList.Label.info.text=Hier können Sie Veranstaltungen anlegen, bearbeiten und löschen. +LectureList.TitledBorder.filterPanel.title=Suchen +LectureList.Label.visibleLectureCount.text=Sichtbar: +LectureList.Button.newLecture.text=Neue Veranstaltung +LectureList.Button.newLecture.description=Neue Veranstaltung +LectureList.Button.editLecture.text=Bearbeiten +LectureList.Button.editLecture.description=Veranstaltung bearbeiten +LectureList.Button.deleteLecture.text=Löschen +LectureList.Button.deleteLecture.description=Veranstaltung löschen +LectureList.Button.switchView.text=VMs zeigen +LectureList.Button.switchView.description=Wechseln + +# LocationSelectionWindowLayout +LocationSelection.Label.info.text=Hier können Sie die Räume auswählen, \ + in denen diese Veranstaltung sichtbar sein soll. +LocationSelection.Button.close.text=Abbrechen +LocationSelection.Button.saveChanges.text=Übernehmen + +# LoginWindowLayout +Login.Dialog.title={0} - Login +Login.RadioButton.loginType.text.0=Authentifizierung über {0} +Login.RadioButton.loginType.text.1=Test-Zugang mit festem Benutzer +Login.RadioButton.loginType.text.2=Direkter Zugang zum Satelliten +Login.Button.settings.text=Einstellungen +Login.Button.logDir.text=Logverzeichnis +Login.Button.login.text=Login +Login.CheckBox.saveUsername.text=Benutzername speichern +Login.Button.openRegistration.text=Registrieren +Login.TitledBorder.loginFormPanel.title=Zugangsdaten +Login.Label.organization.text=Identity Provider +Login.Label.username.text=Benutzername +Login.Label.password.text=Passwort +Login.TitledBorder.loginTypePanel.title=Authentifizierungsart +Login.TitledBorder.advancedPanel.title=Erweitert +Login.ComboBox.organization.emptyText=Wird geladen... + +# MainMenuWindowLayout +MainMenu.TitledBorder.title={0} Hauptmenü +MainMenu.Label.vmLogo.description=VM-Übersicht +MainMenu.Label.vmInfo.text=<html><b>Übersicht Virtueller Maschinen</b><br>\ + Zur Übersicht über die verfügbaren Virtuellen Maschinen wechseln.<br>Hier können Sie:<br><br>\ + 1) Veranstaltungen auf Basis einer Virtuellen Maschine erstellen<br>\ + 2) Neue Virtuelle Maschinen hochladen<br>\ + 3) Virtuelle Maschinen herunterladen<br>\ + 4) Virtuelle Maschinen bearbeiten und löschen</html> +MainMenu.Label.lecturesLogo.description=Veranstaltungen +MainMenu.Label.lecturesInfo.text=<html><b>Übersicht Veranstaltungen</b><br>\ + Zur Übersicht über verfügbare Veranstaltungen wechseln.<br>Hier können Sie:<br><br>\ + 1) Veranstaltungen bearbeiten oder löschen<br>\ + 2) Zu Veranstaltungen gehörende Virtuelle Maschinen herunterladen<br> </html> +MainMenu.Button.showVMs.text=Zu den VMs +MainMenu.Button.showLectures.text=Zu den Veranstaltungen + +# SatelliteListWindowLayout +SatelliteList.Dialog.title=Satellitenserver wählen +SatelliteList.Label.satList.text=Vorgegebene Server +SatelliteList.Label.customAddress.text=Server-Adresse selbst eingeben +SatelliteList.Button.cancel.text=Abbrechen +SatelliteList.Button.continue.text=Weiter + +# UserListWindowLayout +UserList.Dialog.title=Benutzerliste +UserList.Label.filterPanel.text=Suchen: +UserList.Button.cancel.text=Schließen + +# VirtConfigEditorWindowLayout +VirtConfigEditor.Dialog.title=VM-Konfiguration Editor +VirtConfigEditor.TitledBorder.pnlWarning.title=WARNUNG +VirtConfigEditor.Label.pnlWarning.text=<html>Änderungen an der VM-Konfiguration können zu Funktionsstörungen führen.\ + <br>Benutzung auf eigene Gefahr!</html> +VirtConfigEditor.Button.cancel.text=Abbrechen +VirtConfigEditor.Button.save.text=Speichern + +# VirtDropDownConfigEditorWindowLayout +VirtDropDownConfigEditor.Dialog.title=VM-Konfiguration Editor +VirtDropDownConfigEditor.TitledBorder.pnlWarning.title=WARNUNG +VirtDropDownConfigEditor.Label.pnlWarning.text=Hier können Sie einige Einstellungen bzgl. der \ + verwendeten virtuellen Hardware ändern. Bitte beachten Sie, \ + dass Änderungen erfordern können, dass in der VM neue Treiber \ + vorhanden sein müssen. In diesem Fall ist es notwendig, dass \ + Sie die Änderung nach dem Herunterladen einer VM lokal \ + durchführen, die notwendigen Treiber installieren und die VM wieder hochladen. +VirtDropDownConfigEditor.Label.sound.text=Soundkarte +VirtDropDownConfigEditor.Label.3DAcceleration.text=3D-Beschleunigung +VirtDropDownConfigEditor.Label.HWVersion.text=VMWare HW-Version +VirtDropDownConfigEditor.Label.E0VirtDev.text=Netzwerkkarte +VirtDropDownConfigEditor.Label.maxUSBSpeed.text=USB +VirtDropDownConfigEditor.Button.more.text=Expertenmodus +VirtDropDownConfigEditor.Button.cancel.text=Abbrechen +VirtDropDownConfigEditor.Button.save.text=Speichern
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/window_layout_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/window_layout_tr_TR.properties new file mode 100644 index 00000000..9d68233b --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/window_layout_tr_TR.properties @@ -0,0 +1,242 @@ +# CheckUpdateWindowLayout +CheckUpdate.Dialog.title=Sürüm +CheckUpdate.TitledBorder.infoPanel.title=Güncelleme +CheckUpdate.Label.localVersion.text=Mevcut sürüm +CheckUpdate.Label.remoteVersion.text=En son sürüm +CheckUpdate.TitledBorder.changelogPanel.title=Değişiklik kaydı +CheckUpdate.Button.link.text=İndirme portalına git +CheckUpdate.Button.close.text=Kapat + +# ConfigWindowLayout +Config.Dialog.title={0} - Yapılandırma +Config.Label.mailNotifications.text=E-posta bildirimleri +Config.CheckBox.sendMeMail.text=Sanal makine ve etkinlik değişiklikleri hakkında e-posta ile bilgilendir +Config.Label.sendMeMail.text=Bu seçenek için sunucunun e-posta gönderecek şekilde yapılandırılmış olması gerekir. +Config.Label.proxyConfig.text=Ara sunucu +Config.RadioButton.proxyNone.text=Ara sunucu kullanma +Config.RadioButton.proxyAuto.text=Ara sunucu ayarlarını otomatik olarak algıla +Config.Label.fontConfig.text=Yazı boyutu (%) +Config.Label.fontConfigInfo.text=Bu işlev henüz test aşamasındadır. Görüntüleme hataları oluşabilir. +Config.Label.lookAndFeel.text=LookAndFeel +Config.Label.lookAndFeelInfo.text=Burada, arayüz görünümünü değiştirmek için birbirinden farklı ''LookAndFeels'' \ + temaları arasında seçim yapabilirsiniz. +Config.Label.concurrentConnections.text=Transfer başına bağlantı sayısı +Config.Label.concurrentConnectionsInfo.text=En iyi sonuçlar genellikle bu ayar 1''de \ + bırakıldığı zaman elde edilir. Şayet aktarım hızı \ + ağ bağlantı kapasitenizi aşmıyorsa, bir sonraki yüksek değeri \ + deneyebilirsiniz. Çok yüksek değerler aktarım hızını olumsuz etkileyebilir \ + ve satelit sunucusunun aşırı yüklenmesine sebep olabilir. +Config.Label.language.text=Dil +Config.Label.languageInfo.text=Burada diller arasında geçiş yapabilirsiniz. +Config.Button.close.text=Kapat +Config.Button.save.text=Kaydet + +# GenericNoticeWindowLayout +GenericNotice.TitledBorder.noticePanel.title=Not +GenericNotice.Label.noticePanel.text=Lütfen aşağıdaki yasal bilgileri okuyun ve onaylayın: +GenericNotice.CheckBox.agree.text=Evet, anlaşmayı kabul ediyorum. \ + Bu bildirimi bir daha gösterme. +GenericNotice.Button.continue.text=İleri + +# ImageDetailsWindowLayout +ImageDetails.Label.description.text=Açıklama +ImageDetails.Button.changeOwner.text=Değiştir +ImageDetails.Label.owner.text=Sahibi +ImageDetails.Label.createTime.text=Oluşturulma tarihi +ImageDetails.Label.updater.text=Değiştiren +ImageDetails.Label.updateTime.text=Değişiklik tarihi +ImageDetails.Label.OS.text=İşletim sistemi +ImageDetails.Label.shareMode.text=Paylaşım modu +ImageDetails.CheckBox.isTemplate.text=Şablon +ImageDetails.Label.version.text=Sürüm ID +ImageDetails.Label.ID.text=Sanal makine ID +ImageDetails.Label.virtualizer.text=Sanallaştırıcı +ImageDetails.Label.linkedLectureCount.text=Etkinlikler +ImageDetails.Button.showLinkingLectures.text=Göster +ImageDetails.Button.updateImage.text=Yeni sanal makine sürümü yükle +ImageDetails.Button.updateImage.description=Yeni sanal makine sürümü +ImageDetails.Button.uploadToMaster.text=Ülke çapında yayınla +ImageDetails.Button.uploadToMaster.description=Sanal makineyi yayınla +ImageDetails.TitledBorder.defaultPermissionPane.title=Diğer kullanıcılar +ImageDetails.Label.defaultPerms.text=<html><body style='width:100%'>\ + Burada, listede olmayan diğer kullanıcılar için erişim izinleri tanımlayabilirsiniz:</body></html> +ImageDetails.CheckBox.permAdmin.text=Yönetim +ImageDetails.CheckBox.permDownload.text=İndirme +ImageDetails.CheckBox.permEdit.text=Düzenleme +ImageDetails.CheckBox.permLink.text=Bağlantı ekleme +ImageDetails.Button.saveChanges.text=Kaydet +ImageDetails.Button.close.text=Kapat +ImageDetails.Tab.overview.title=Genel görünüm +ImageDetails.Tab.versions.title=Sanal makine sürümleri +ImageDetails.Tab.permissions.title=Erişim izinleri + +# ImageListWindowLayout +ImageList.Label.title.text=Sanal makineler genel görünümü +ImageList.Label.info.text=Burada sanal makineler yükleyebilir, indirebilir, düzenleyebilir veya silebilirsiniz. +ImageList.Button.newVM.text=Yeni sanal makine +ImageList.Button.newVM.description=Yeni sanal makine +ImageList.Button.newLecture.text=Yeni etkinlik +ImageList.Button.newLecture.description=Yeni etkinlik +ImageList.Button.edit.text=Düzenle +ImageList.Button.edit.description=Sanal makineyi düzenle +ImageList.Button.download.text=İndir +ImageList.Button.download.description=Sanal makineyi indir +ImageList.Button.delete.text=Sil +ImageList.Button.delete.description=Sanal makineyi sil +ImageList.Button.switchView.text=Etkinlikleri göster +ImageList.Button.switchView.description=Etkinlik görünümüne geç +ImageList.Button.showPublishedImages.text=Herkese açık sanal makineler +ImageList.Button.showPublishedImages.description=Yayınlanmış sanal makineler + +# ImagePublishedWindowLayout +ImagePublished.Dialog.title=Herkese açık sanal makineler +ImagePublished.Label.filterPanel.text=Arama: +ImagePublished.Button.download.text=İndir +ImagePublished.Button.download.description=İndir +ImagePublished.Button.satDownload.text=Satelit sunucusuna indir +ImagePublished.Button.satDownload.description=Satelit sunucusuna indir +ImagePublished.Button.close.text=Kapat + +# LectureChangeImageLayout +LectureChangeImage.Dialog.title=Bağlantı olarak eklemek için sanal makine seçin +LectureChangeImage.Button.ok.text=Uygula +LectureChangeImage.Button.close.text=İptal + +# LectureDetailsWindowLayout +LectureDetails.Dialog.title=Etkinlik detayları +LectureDetails.Label.owner.text=Sahibi +LectureDetails.Label.createTime.text=Oluşturulma tarihi +LectureDetails.Label.updater.text=Değiştiren +LectureDetails.Label.updateTime.text=Değiştirilme tarihi +LectureDetails.Label.imageName.text=Bağlantılı sanal makine +LectureDetails.Label.startTime.text=Başlangıç tarihi +LectureDetails.Label.endTime.text=Bitiş tarihi +LectureDetails.Label.useCount.text=Görüntülenme sayısı +LectureDetails.Label.title.text=İsim +LectureDetails.Label.description.text=Açıklama +LectureDetails.Label.ID.text=ID +LectureDetails.Button.changeOwner.text=Değiştir +LectureDetails.Button.linkImage.text=Değiştir +LectureDetails.CheckBox.autoUpdate.text=Her zaman en son sürümü kullan +LectureDetails.ComboBox.versionInvalid.text= [geçersiz] +LectureDetails.Button.downloadImage.text=İndir +LectureDetails.Button.downloadImage.toolTipText=Kullanılmakta olan sürümü indir +LectureDetails.Label.version.text=Sanal makine sürümü +LectureDetails.CheckBox.isActive.text=Etkinlik aktif +LectureDetails.CheckBox.hasInternetAccess.text=Ağ/internet erişimine izin ver +LectureDetails.Label.hasInternetAccess.text=Etkinliğin internet erişimi olup olmayacağını burada ayarlayabilirsiniz. \ + Belirli adresleri veya hizmetleri listeye dâhil edebilir yahut listeden çıkartabilirsiniz. +LectureDetails.CheckBox.hasUSBAccess.text=Harici depolama ortamına izin ver +LectureDetails.Label.hasUSBAccess.text=Etkinliğin depolama ortamına (CD, USB, ...) erişime \ + izin verip vermeyeceğini burada ayarlayabilirsiniz +LectureDetails.CheckBox.isExam.text=Sınav modu +LectureDetails.Label.isExam.text=Bu etkinliği bir e-sınav olarak işaretle.\n\ + Etkinlik ancak {0} sınav moduna alınırsa başlatılabilir. \ + Bunun için yerel {1} yöneticinize başvurun. +LectureDetails.TitledBorder.defaultPermissionPane.title=Diğer kullanıcılar +LectureDetails.CheckBox.permEdit.text=Düzenleme +LectureDetails.CheckBox.permAdmin.text=Yönetim +LectureDetails.Tab.info.title=Genel görünüm +LectureDetails.Tab.general.title=Genel +LectureDetails.Tab.restrictions.title=Kısıtlamalar +LectureDetails.Tab.netRules.title=Güvenlik duvarı +LectureDetails.Tab.locations.title=Oda seçimi +LectureDetails.Tab.runScript.title=Sanal makine başlangıç komutları +LectureDetails.Tab.permissions.title=Erişim izinleri +LectureDetails.Tab.netShare.title=Ağ sürücüleri +LectureDetails.Tab.ldapFilter.title=LDAP filtreleri +LectureDetails.Button.close.text=Kapat +LectureDetails.Button.saveChanges.text=Kaydet + +# LectureListWindowLayout +LectureList.Label.title.text=Etkinlikler genel görünümü +LectureList.Label.info.text=Burada etkinlikler oluşturabilir, düzenleyebilir veya silebilirsiniz. +LectureList.TitledBorder.filterPanel.title=Arama +LectureList.Label.visibleLectureCount.text=Görüntülenen: +LectureList.Button.newLecture.text=Yeni etkinlik +LectureList.Button.newLecture.description=Yeni etkinlik +LectureList.Button.editLecture.text=Düzenle +LectureList.Button.editLecture.description=Etkinliği düzenle +LectureList.Button.deleteLecture.text=Sil +LectureList.Button.deleteLecture.description=Etkinliği sil +LectureList.Button.switchView.text=Sanal makineleri göster +LectureList.Button.switchView.description=Sanal makine görünümüne geç + +# LocationSelectionWindowLayout +LocationSelection.Label.info.text=Burada, bu etkinliğin görünür \ + olması gereken odaları seçebilirsiniz. +LocationSelection.Button.close.text=İptal +LocationSelection.Button.saveChanges.text=Uygula + +# LoginWindowLayout +Login.Dialog.title={0} - Oturum aç +Login.RadioButton.loginType.text.0={0} üzerinden kimlik doğrulama +Login.RadioButton.loginType.text.1=Test erişimi +Login.RadioButton.loginType.text.2=Satelit sunucusuna doğrudan erişim +Login.Button.settings.text=Ayarlar +Login.Button.logDir.text=Günlük dizini +Login.Button.login.text=Giriş yap +Login.CheckBox.saveUsername.text=Kullanıcı adını hatırla +Login.Button.openRegistration.text=Kayıt ol +Login.TitledBorder.loginFormPanel.title=Giriş bilgileri +Login.Label.organization.text=Kimlik sağlayıcı +Login.Label.username.text=Kullanıcı adı +Login.Label.password.text=Şifre +Login.TitledBorder.loginTypePanel.title=Kimlik doğrulama türü +Login.TitledBorder.advancedPanel.title=Gelişmiş +Login.ComboBox.organization.emptyText=Yükleniyor... + +# MainMenuWindowLayout +MainMenu.TitledBorder.title={0} Anasayfa +MainMenu.Label.vmLogo.description=Sanal makineler +MainMenu.Label.vmInfo.text=<html><b>Sanal makineler genel görünümü</b><br>\ + Mevcut sanal makinelerin genel görünümüne geçiş yapabilirsiniz.<br>Burada:<br><br>\ + 1) Sanal makineye dayalı etkinlikler oluşturabilir,<br>\ + 2) Yeni sanal makineler yükleyebilir,<br>\ + 3) Sanal makineleri indirebilir,<br>\ + 4) Sanal makineleri düzenleyebilir veya silebilirsiniz.</html> +MainMenu.Label.lecturesLogo.description=Etkinlikler +MainMenu.Label.lecturesInfo.text=<html><b>Etkinlikler genel görünümü</b><br>\ + Mevcut etkinliklerin genel görünümüne geçiş yapabilirsiniz.<br>Burada:<br><br>\ + 1) Etkinlikleri düzenleyebilir veya silebilir,<br>\ + 2) Etkinliklere ait sanal makineleri indirebilirsiniz.<br> </html> +MainMenu.Button.showVMs.text=Sanal makinelere git +MainMenu.Button.showLectures.text=Etkinliklere git + +# SatelliteListWindowLayout +SatelliteList.Dialog.title=Satelit sunucusu seçimi +SatelliteList.Label.satList.text=Varsayılan sunucu +SatelliteList.Label.customAddress.text=Sunucu adresini kendiniz girin +SatelliteList.Button.cancel.text=İptal +SatelliteList.Button.continue.text=İleri + +# UserListWindowLayout +UserList.Dialog.title=Kullanıcı listesi +UserList.Label.filterPanel.text=Arama: +UserList.Button.cancel.text=Kapat + +# VirtConfigEditorWindowLayout +VirtConfigEditor.Dialog.title=Sanal makine yapılandırma düzenleyicisi +VirtConfigEditor.TitledBorder.pnlWarning.title=UYARI +VirtConfigEditor.Label.pnlWarning.text=<html>Sanal makine yapılandırmasındaki değişiklikler işlev bozukluklarına \ + yol açabilir.<br>Sorumluluk size aittir!</html> +VirtConfigEditor.Button.cancel.text=İptal +VirtConfigEditor.Button.save.text=Kaydet + +# VirtDropDownConfigEditorWindowLayout +VirtDropDownConfigEditor.Dialog.title=Sanal makine yapılandırma düzenleyicisi +VirtDropDownConfigEditor.TitledBorder.pnlWarning.title=UYARI +VirtDropDownConfigEditor.Label.pnlWarning.text=Burada, kullanılan sanal donanıma ilişkin \ + bazı ayarları değiştirebilirsiniz. Değişikliklerin sanal makinede \ + yeni sürücülerin bulunmasını gerektirebileceğini \ + lütfen unutmayın. Bu durumda, sanal makineyi indirdikten sonra \ + değişikliği lokal olarak yapmanız, gerekli sürücüleri kurmanız \ + ve sanal makineyi tekrar yüklemeniz gerekir. +VirtDropDownConfigEditor.Label.sound.text=Ses kartı +VirtDropDownConfigEditor.Label.3DAcceleration.text=3D hızlandırıcı +VirtDropDownConfigEditor.Label.HWVersion.text=VMWare donanım sürümü +VirtDropDownConfigEditor.Label.E0VirtDev.text=Ethernet kartı +VirtDropDownConfigEditor.Label.maxUSBSpeed.text=USB +VirtDropDownConfigEditor.Button.more.text=Uzman modu +VirtDropDownConfigEditor.Button.cancel.text=İptal +VirtDropDownConfigEditor.Button.save.text=Kaydet
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/window_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/window_tr_TR.properties new file mode 100644 index 00000000..8d22cf05 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/window_tr_TR.properties @@ -0,0 +1,144 @@ +# BwIdmLinkWindow +BwIdmLink.Dialog.title=Kayıt olmanız gerekiyor +BwIdmLink.Label.info.title=Uyarı +BwIdmLink.Label.info.text=<html><body style='width:100%'>\ + {0} sisteminde kayıtlı değilsiniz. \ + Lütfen kaydolmak için belirtilen sayfaya gidin ve tekrar deneyin.\ + </body></html> +BwIdmLink.Button.link.text=Sayfayı tarayıcıda aç +BwIdmLink.Button.ok.text=Kapat + +# ConfigWindow +Config.Label.yourAddress.text=Adresiniz {0} +Config.Message.error.couldNotGetUserConfFromSat=Satelit sunucusundan kullanıcıya özel yapılandırma \ + alınamadı +Config.Message.error.couldNotSaveUserConfOnSat=Kullanıcıya özel yapılandırma satelit sunucusuna \ + kaydedilemedi +Config.Message.info.restartNeededToApplyChanges=Değişiklikler ancak program yeniden başlatıldıktan sonra \ + geçerli olur. + +# GenericNoticeWindow +GenericNotice.Button.continue.text=Kapat +GenericNotice.Message.yesNo.closeWindow=Bu yasal uyarıyı kabul etmediğiniz takdirde \ + yazılımı kullanamazsınız! \ + İptal etmek istediğinizden emin misiniz? + +# ImageDetailsWindow +ImageDetails.MenuItem.newLecture.text=Yeni etkinlik +ImageDetails.MenuItem.download.text=İndir +ImageDetails.MenuItem.vmConfig.text=Sanal makine yapılandırması +ImageDetails.MenuItem.delete.text=Sil +ImageDetails.MenuItem.extendExpirationDate.text=Geçerlilik tarihini uzat +ImageDetails.Message.yesNo.changeOwner=Sahiplik haklarını başka bir kullanıcıya \ + aktarmak istediğinizden emin misiniz? +ImageDetails.Button.changeOwner.caption=Sahibi ayarla +ImageDetails.TextField.title.error=İsim boş bırakılamaz +ImageDetails.TextField.description.error=Açıklama boş bırakılamaz +ImageDetails.ComboBox.OS.error=Geçersiz işletim sistemi seçildi! +ImageDetails.ComboBox.shareMode.error=Geçersiz işletim sistemi seçildi! +ImageDetails.Message.error.couldNotRetrieveVMConfig=Sanal makine yapılandırması alınamadı. +ImageDetails.Message.info.setImageOwner=Sahiplik haklarını {0} kullanıcısına aktar +ImageDetails.Message.error.publishNonVMWareImage={0} henüz ülke çapında genel kullanım için yayınlanmış değil. +ImageDetails.Message.yesNo.currentlyModified=Kaydedilmemiş değişiklikleriniz var, önce bunları kaydetmek ister misiniz? +ImageDetails.Message.yesNo.confirmOrAbort=Bu sanal makineyi ülke çapında yayınlamak istediğinizden emin misiniz? +ImageDetails.Message.error.uploadFailed=Sanal makinenin master sunucusuna yüklenmesi başarısız oldu. \ + Kayıt olurken ülke çapında sanal makine değişimini kabul edip etmediğinizi kontrol edin.\n \ + Bunu buradan kontrol edebilirsiniz:\n \ + {0} \n\n +ImageDetails.Message.info.passiveTransfer=Aktarım doğrudan satelit ve {0} merkez sunucusu arasında \ + gerçekleşir.\n {1} uygulamasını kapatsanız bile aktarım devam eder. +ImageDetails.Message.error.saveChangesInternal=Güncellenmiş meta veriler sunucuya gönderilemedi +ImageDetails.Message.error.saveCustomPermissions=Değiştirilmiş erişim izinleri sunucuya gönderilemedi +ImageDetails.Message.error.performImageDownload=Seçilen sürüm geçersiz +ImageDetails.Message.error.extendVersionExpiry={0} sürümünün geçerlilik tarihi uzatılamadı. +ImageDetails.Message.info.extendVersionExpiry=Başarılı bir şekilde uzatılmış olan imajlar: {0} +ImageDetails.Message.yesNo.safeClose=Değişiklikler iptal edilecek, gerçekten kapatmak istiyor musunuz? + +# ImageListWindow +ImageList.MenuItem.newLecture.text=Yeni etkinlik +ImageList.MenuItem.edit.text=Detay görünümü +ImageList.MenuItem.delete.text=Sil +ImageList.MenuItem.download.text=İndir +ImageList.Message.error.hasLatestVersion=Seçilen sanal makinenin geçerli bir imaj sürümü yok +ImageList.Message.info.deleteImages=Aşağıdaki imajlar silinemedi: {0} + +# ImagePublishedWindow +ImagePublished.Message.error.satDownload=İndirme başlatılamadı +ImagePublished.Message.info.satDownload=Aktarım doğrudan satelit ve {0} merkez sunucusu arasında \ + gerçekleşir.\n {1} uygulamasını kapatsanız bile aktarım devam eder. + +# LectureChangeImage +LectureChangeImage.Message.error.imageInvalid=Seçilen sanal makine geçersiz! +LectureChangeImage.Message.error.canNotLinkToVM=Seçilen sanal makineye bağlantı ekleme hakkı yok. + +# LectureDetailsWindow +LectureDetails.ComboBox.versions.error=Hiçbir sanal makine sürümü seçilmedi yada geçersiz sanal makine sürümü seçildi +LectureDetails.Message.error.endAfterStart=Bitiş tarihi başlangıç tarihinden önce olmamalıdır +LectureDetails.Message.error.endAfterMaxValidity=Bitiş tarihi {0} tarihinden sonra +LectureDetails.TextField.title.error=Etkinlik adı boş bırakılamaz +LectureDetails.TextField.description.error=Açıklama boş bırakılamaz +LectureDetails.NetRulesConfigurator.error=Hatalı ağ kuralları +LectureDetails.Message.yesNo.changeOwner=Sahiplik haklarını başka bir kullanıcıya \ + aktarmak istediğinizden emin misiniz? +LectureDetails.Button.changeOwner.caption=Sahibi ayarla +LectureDetails.Message.info.setLectureOwner=Sahiplik haklarını {0} kullanıcısına aktar +LectureDetails.Message.error.imageInvalid=Sanal makine geçersiz. +LectureDetails.Message.error.imageVersionInvalid=Geçersiz sanal makine sürümü seçildi +LectureDetails.Message.error.imageVersionFileSizeInvalid=Sanal makine imajının boyutu sorgulanırken hata oluştu. +LectureDetails.Message.error.saveChangesInternal=Etkinlik kaydedilirken hata oluştu! +LectureDetails.Message.error.saveCustomPermissions=Erişim izinleri aktarılırken hata oluştu! +LectureDetails.Message.error.isPeriodValid=Etkinlik bitiş tarihinden sonra başlıyor! +LectureDetails.Message.yesNo.safeClose=Değişiklikler iptal edilecek, gerçekten kapatmak istiyor musunuz? + +# LectureListWindow +LectureList.FilterType.all=Tümünü göster +LectureList.FilterType.own=Yalnızca kendimin/bana atanmış olanları göster +LectureList.FilterType.active=Yalnızca aktif olanları göster +LectureList.FilterType.editable=Yalnızca düzenlenebilir olanları göster +LectureList.FilterType.expiring=Yakında sona erecek olanları göster +LectureList.FilterType.exams=Sınav etkinliklerini göster +LectureList.MenuItem.new.text=Yeni +LectureList.MenuItem.edit.text=Detay görünümü +LectureList.MenuItem.linked.text=Sanal makine detaylarını göster +LectureList.MenuItem.download.text=Bağlantılı sanal makineyi indir +LectureList.MenuItem.delete.text=Sil +LectureList.Message.yesNo.switchView=Etkinlik oluşturabilmek için \ + bir sanal makine seçmeniz gerekir. Sanal makine seçimine geçilsin mi? +LectureList.Message.error.canNotListImages=Gerekli izinlere sahip değilsiniz. +LectureList.Message.error.deleteLecture=Sebep: {0} +LectureList.Message.info.deleteLectures=Aşağıdaki etkinlikler silinemedi: {0} + +# LocationSelectionWindow +LocationSelection.Message.warning.saveChanges=Lütfen seçilen yerlerin sayısını azaltın +LocationSelection.Message.error.locationSelector=Çok fazla yer seçildi! + +# LoginWindow +Login.Message.error.noLoginType=Lütfen bir kimlik doğrulama türü seçin. +Login.Message.error.noOrganization=Lütfen kuruluşunuzu ''Kimlik Sağlayıcı'' olarak seçin. +Login.Message.error.noUsername=Kullanıcı adı girilmedi! +Login.Message.error.noPassword=Şifre girilmedi! +Login.Message.error.authIdentityProvider=Kimlik sağlayıcı hatası +Login.Message.error.authServiceProvider=Servis sağlayıcıdan geçersiz belirteç! +Login.Message.error.authInvalidURL=Geçersiz URL. +Login.Message.error.authInternal=Dahili hata! +Login.Message.error.authMasterServer=Master sunucu oturum açma girişimini \ + aşağıdaki mesajla reddetti:\n\n{0} +Login.Message.error.loginTypeDirectConnect=Henüz uygulanmadı +Login.Message.error.loginTypeDefault=Hiçbir kimlik doğrulama türü seçilmedi! +Login.Message.error.loginFailed=Giriş başarısız + +# SatelliteListWindow +SatelliteList.Message.error.noSatellite=Hiçbir satelit sunucusu seçilmedi + +# VirtConfigEditorWindow +VirtConfigEditor.Message.error.invalidInputTitle=Geçersiz girişler:\n +VirtConfigEditor.Message.error.invalidInputText=Yine de kaydetmek istiyor musunuz? (Geçersiz satırlar \ + otomatik olarak silinir.) +VirtConfigEditor.Message.yesNo.safeClose=Bu penceredeki değişiklikleriniz kaybolacak, \ + yine de iptal etmek istiyor musunuz? + +# VirtDropDownConfigEditorWindow +VirtDropDownConfigEditor.Message.warning.initializeComboBoxes=En son yapılandırmanızda \n\ + yanlış bir giriş kaydettiniz. \nSanal makine başlatılamayacak! +VirtDropDownConfigEditor.Message.yesNo.safeClose=İptal etmek istediğinizden emin misiniz?\n\ + Yaptığınız değişiklikler iptal edilecek.
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/wizard.properties b/dozentenmodul/src/main/properties/i18n/wizard.properties new file mode 100644 index 00000000..00d3abcc --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/wizard.properties @@ -0,0 +1,26 @@ +# ImageCreationWizard +ImageCreation.Wizard.title=Create new VM +ImageCreation.Message.error.stateInvalid=An internal error has occurred.\n\nDetails in the log file. +ImageCreation.Message.error.baseNotWritten=Could not save the metadata of the VM on the satellite! +ImageCreation.Message.error.permissionsNotWritten=Could not save the permissions on the satellite! +ImageCreation.Message.error.updateImageVersionFailed=Unexpected error while setting the option \ + ''Contains software requiring a license'' for this virtual machine. +ImageCreation.Message.yesNo.cancelRequest=Do you really want to cancel the process? + +# ImageUpdateWizard +ImageUpdate.Message.error.updateImageVersionFailed=Unexpected error while setting the option \ + ''Contains software requiring a license'' for this virtual machine. +ImageUpdate.Message.yesNo.cancelRequest=Do you really want to cancel the process? +ImageUpdate.Wizard.title=New VM version + +# LectureWizard +Lecture.Wizard.title=Create new lecture +Lecture.Message.yesNo.cancelRequest=Do you really want to cancel the process? +Lecture.Message.info.finish=Lecture created! + +# Wizard +Wizard.Button.prev.text=< Back +Wizard.Button.next.text=Next > +Wizard.Button.cancel.text=Cancel +Wizard.Button.finish.text.0=Finish +Wizard.Button.finish.text.1=Close
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/wizard_de_DE.properties b/dozentenmodul/src/main/properties/i18n/wizard_de_DE.properties new file mode 100644 index 00000000..a64d20f1 --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/wizard_de_DE.properties @@ -0,0 +1,26 @@ +# ImageCreationWizard +ImageCreation.Wizard.title=Neue VM erzeugen +ImageCreation.Message.error.stateInvalid=Ein interner Fehler ist aufgetreten.\n\nDetails in der Logdatei. +ImageCreation.Message.error.baseNotWritten=Konnte die Metadaten der VM nicht auf dem Satelliten speichern! +ImageCreation.Message.error.permissionsNotWritten=Konnte die Berechtigungen nicht auf dem Satelliten speichern! +ImageCreation.Message.error.updateImageVersionFailed=Unerwarteter Fehler beim Setzen der Option \ + ''Enthält lizenzpflichtige Software'' für diese Virtuelle Maschine. +ImageCreation.Message.yesNo.cancelRequest=Möchten Sie den Vorgang wirklich abbrechen? + +# ImageUpdateWizard +ImageUpdate.Message.error.updateImageVersionFailed=Unerwarteter Fehler beim Setzen der Option \ + ''Enthält lizenzpflichtige Software'' für diese Virtuelle Maschine. +ImageUpdate.Message.yesNo.cancelRequest=Möchten Sie den Vorgang wirklich abbrechen? +ImageUpdate.Wizard.title=Neue VM-Version + +# LectureWizard +Lecture.Wizard.title=Neue Veranstaltung erzeugen +Lecture.Message.yesNo.cancelRequest=Möchten Sie den Vorgang wirklich abbrechen? +Lecture.Message.info.finish=Veranstaltung erstellt! + +# Wizard +Wizard.Button.prev.text=< Zurück +Wizard.Button.next.text=Weiter > +Wizard.Button.cancel.text=Abbrechen +Wizard.Button.finish.text.0=Fertigstellen +Wizard.Button.finish.text.1=Schließen
\ No newline at end of file diff --git a/dozentenmodul/src/main/properties/i18n/wizard_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/wizard_tr_TR.properties new file mode 100644 index 00000000..57c31e3e --- /dev/null +++ b/dozentenmodul/src/main/properties/i18n/wizard_tr_TR.properties @@ -0,0 +1,26 @@ +# ImageCreationWizard +ImageCreation.Wizard.title=Yeni sanal makine oluştur +ImageCreation.Message.error.stateInvalid=Dahili bir hata oluştu.\n\nAyrıntılar günlük dosyasında. +ImageCreation.Message.error.baseNotWritten=Sanal makine meta verileri satelit sunucusuna kaydedilemedi! +ImageCreation.Message.error.permissionsNotWritten=Erişim izinleri satelit sunucusuna kaydedilemedi! +ImageCreation.Message.error.updateImageVersionFailed=Bu sanal makine için ''Lisans gerektiren yazılım içeriyor'' \ + seçeneği ayarlanırken beklenmedik bir hata oluştu. +ImageCreation.Message.yesNo.cancelRequest=İşlemi iptal etmek istediğinizden emin misiniz? + +# ImageUpdateWizard +ImageUpdate.Message.error.updateImageVersionFailed=Bu sanal makine için ''Lisans gerektiren yazılım içeriyor'' \ + seçeneği ayarlanırken beklenmedik bir hata oluştu. +ImageUpdate.Message.yesNo.cancelRequest=İşlemi iptal etmek istediğinizden emin misiniz? +ImageUpdate.Wizard.title=Yeni sanal makine sürümü + +# LectureWizard +Lecture.Wizard.title=Yeni etkinlik oluştur +Lecture.Message.yesNo.cancelRequest=İşlemi iptal etmek istediğinizden emin misiniz? +Lecture.Message.info.finish=Etkinlik oluşturuldu! + +# Wizard +Wizard.Button.prev.text=< Geri +Wizard.Button.next.text=İleri > +Wizard.Button.cancel.text=İptal +Wizard.Button.finish.text.0=Bitir +Wizard.Button.finish.text.1=Kapat
\ No newline at end of file |