From d8f9203c871e51be2477eab6ccb60f94f39db9ed Mon Sep 17 00:00:00 2001 From: tonikelope Date: Wed, 8 Aug 2018 17:47:42 +0200 Subject: [PATCH] 5.18 -Spanish translation --- pom.xml | 2 +- .../tonikelope/megabasterd/AboutDialog.form | 2 +- .../tonikelope/megabasterd/AboutDialog.java | 16 +- .../tonikelope/megabasterd/DownloadView.java | 2 + .../megabasterd/FileGrabberDialog.java | 6 +- .../megabasterd/FileMergerDialog.java | 3 + .../megabasterd/FileSplitterDialog.java | 4 + .../megabasterd/FolderLinkDialog.java | 2 + .../megabasterd/GetMasterPasswordDialog.java | 6 +- .../megabasterd/LabelTranslatorSingleton.java | 190 ++++++++++++++++++ .../megabasterd/LinkGrabberDialog.java | 2 + .../com/tonikelope/megabasterd/MainPanel.java | 42 ++-- .../tonikelope/megabasterd/MainPanelView.form | 2 +- .../tonikelope/megabasterd/MainPanelView.java | 17 +- .../com/tonikelope/megabasterd/MiscTools.java | 48 ++++- .../megabasterd/SetMasterPasswordDialog.java | 8 +- .../megabasterd/SettingsDialog.form | 67 ++++-- .../megabasterd/SettingsDialog.java | 122 ++++++++--- .../megabasterd/StreamerDialog.java | 4 +- .../tonikelope/megabasterd/UploadView.java | 2 + .../megabasterd/WarningExitMessage.java | 3 + 21 files changed, 471 insertions(+), 79 deletions(-) create mode 100644 src/main/java/com/tonikelope/megabasterd/LabelTranslatorSingleton.java diff --git a/pom.xml b/pom.xml index c0f492cae..a045ee110 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.tonikelope MegaBasterd - 5.17 + 5.18 jar diff --git a/src/main/java/com/tonikelope/megabasterd/AboutDialog.form b/src/main/java/com/tonikelope/megabasterd/AboutDialog.form index c5a3fc4d8..cd35b7a85 100644 --- a/src/main/java/com/tonikelope/megabasterd/AboutDialog.form +++ b/src/main/java/com/tonikelope/megabasterd/AboutDialog.form @@ -134,7 +134,7 @@ - + diff --git a/src/main/java/com/tonikelope/megabasterd/AboutDialog.java b/src/main/java/com/tonikelope/megabasterd/AboutDialog.java index ab80cccb1..b1f6f8792 100644 --- a/src/main/java/com/tonikelope/megabasterd/AboutDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/AboutDialog.java @@ -28,6 +28,8 @@ public final class AboutDialog extends javax.swing.JDialog { updateFonts(this.getRootPane(), DEFAULT_FONT, parent.getMain_panel().getZoom_factor()); + translateLabels(getRootPane()); + pack(); } @@ -82,7 +84,7 @@ public final class AboutDialog extends javax.swing.JDialog { subtitle_label.setFont(new java.awt.Font("Dialog", 1, 20)); // NOI18N subtitle_label.setForeground(new java.awt.Color(102, 102, 102)); - subtitle_label.setText("Yet another (unofficial) cross-platform MEGA downloader/uploader/streaming suite. "); + subtitle_label.setText("Yet another (unofficial) cross-platform MEGA downloader/uploader/streaming suite."); subtitle_label.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); subtitle_label.setDoubleBuffered(true); subtitle_label.addMouseListener(new java.awt.event.MouseAdapter() { @@ -220,14 +222,16 @@ public final class AboutDialog extends javax.swing.JDialog { copyTextToClipboard(MEGABASTERD_URL); - JOptionPane.showMessageDialog(this, "MEGA URL was copied to clipboard!"); + JOptionPane.showMessageDialog(this, LabelTranslatorSingleton.getInstance().translate("MEGA URL was copied to clipboard!")); }//GEN-LAST:event_mcdown_url_buttonActionPerformed private void check_version_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_check_version_buttonActionPerformed + String old_check_version_button_text = check_version_button.getText(); + check_version_button.setEnabled(false); - check_version_button.setText("Checking, please wait..."); + check_version_button.setText(LabelTranslatorSingleton.getInstance().translate("Checking, please wait...")); pack(); @@ -243,14 +247,14 @@ public final class AboutDialog extends javax.swing.JDialog { if (new_version != null) { - JOptionPane.showMessageDialog(tthis, "MegaBasterd NEW VERSION (" + new_version + ") is available!\n\n(HELP > ABOUT for more info)"); + JOptionPane.showMessageDialog(tthis, LabelTranslatorSingleton.getInstance().translate("MegaBasterd NEW VERSION is available! -> ") + new_version); } else { - JOptionPane.showMessageDialog(tthis, "You have the latest version ;)"); + JOptionPane.showMessageDialog(tthis, LabelTranslatorSingleton.getInstance().translate("You have the latest version ;)")); } - check_version_button.setText("Check version"); + check_version_button.setText(old_check_version_button_text); check_version_button.setEnabled(true); diff --git a/src/main/java/com/tonikelope/megabasterd/DownloadView.java b/src/main/java/com/tonikelope/megabasterd/DownloadView.java index 32bae3433..386cfbadd 100644 --- a/src/main/java/com/tonikelope/megabasterd/DownloadView.java +++ b/src/main/java/com/tonikelope/megabasterd/DownloadView.java @@ -91,6 +91,8 @@ public final class DownloadView extends javax.swing.JPanel implements Transferen updateFonts(this, DEFAULT_FONT, download.getMain_panel().getZoom_factor()); + translateLabels(getRootPane()); + _download = download; slots_spinner.setModel(new SpinnerNumberModel(_download.getMain_panel().getDefault_slots_down(), Download.MIN_WORKERS, Download.MAX_WORKERS, 1)); diff --git a/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java b/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java index c2be204e1..d5a8c2e00 100644 --- a/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java @@ -68,6 +68,8 @@ public final class FileGrabberDialog extends javax.swing.JDialog { updateTitledBorderFont(((javax.swing.border.TitledBorder) jPanel2.getBorder()), DEFAULT_FONT, _main_panel.getZoom_factor()); + translateLabels(getRootPane()); + _total_space = 0L; _base_path = null; _upload = false; @@ -426,7 +428,7 @@ public final class FileGrabberDialog extends javax.swing.JDialog { if (filechooser.getSelectedFile() != null && !filechooser.getSelectedFile().canRead()) { - JOptionPane.showMessageDialog(this, "File is not readable!", "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(this, LabelTranslatorSingleton.getInstance().translate("File is not readable!"), "Error", JOptionPane.ERROR_MESSAGE); } boolean root_childs = ((TreeNode) file_tree.getModel().getRoot()).getChildCount() > 0; @@ -511,7 +513,7 @@ public final class FileGrabberDialog extends javax.swing.JDialog { if (filechooser.getSelectedFile() != null && !filechooser.getSelectedFile().canRead()) { - JOptionPane.showMessageDialog(this, "Folder is not readable!", "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(this, LabelTranslatorSingleton.getInstance().translate("Folder is not readable!"), "Error", JOptionPane.ERROR_MESSAGE); } boolean root_childs = ((TreeNode) file_tree.getModel().getRoot()).getChildCount() > 0; diff --git a/src/main/java/com/tonikelope/megabasterd/FileMergerDialog.java b/src/main/java/com/tonikelope/megabasterd/FileMergerDialog.java index f44a0316c..ec6c1b969 100644 --- a/src/main/java/com/tonikelope/megabasterd/FileMergerDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/FileMergerDialog.java @@ -19,6 +19,7 @@ package com.tonikelope.megabasterd; import static com.tonikelope.megabasterd.MainPanel.DEFAULT_FONT; import static com.tonikelope.megabasterd.MainPanel.THREAD_POOL; import static com.tonikelope.megabasterd.MiscTools.swingInvoke; +import static com.tonikelope.megabasterd.MiscTools.translateLabels; import static com.tonikelope.megabasterd.MiscTools.updateFonts; import java.awt.Desktop; import java.awt.Dialog; @@ -56,11 +57,13 @@ public class FileMergerDialog extends javax.swing.JDialog { _main_panel = parent.getMain_panel(); initComponents(); updateFonts(this.getRootPane(), DEFAULT_FONT, _main_panel.getZoom_factor()); + translateLabels(getRootPane()); jProgressBar2.setMinimum(0); jProgressBar2.setMaximum(MAX_VALUE); jProgressBar2.setStringPainted(true); jProgressBar2.setValue(0); jProgressBar2.setVisible(false); + pack(); } diff --git a/src/main/java/com/tonikelope/megabasterd/FileSplitterDialog.java b/src/main/java/com/tonikelope/megabasterd/FileSplitterDialog.java index b0e11ce10..6c8573240 100644 --- a/src/main/java/com/tonikelope/megabasterd/FileSplitterDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/FileSplitterDialog.java @@ -19,6 +19,7 @@ package com.tonikelope.megabasterd; import static com.tonikelope.megabasterd.MainPanel.DEFAULT_FONT; import static com.tonikelope.megabasterd.MainPanel.THREAD_POOL; import static com.tonikelope.megabasterd.MiscTools.swingInvoke; +import static com.tonikelope.megabasterd.MiscTools.translateLabels; import static com.tonikelope.megabasterd.MiscTools.updateFonts; import java.awt.Desktop; import java.awt.Dialog; @@ -57,11 +58,14 @@ public class FileSplitterDialog extends javax.swing.JDialog { initComponents(); updateFonts(this.getRootPane(), DEFAULT_FONT, _main_panel.getZoom_factor()); + translateLabels(getRootPane()); + jProgressBar2.setMinimum(0); jProgressBar2.setMaximum(MAX_VALUE); jProgressBar2.setStringPainted(true); jProgressBar2.setValue(0); jProgressBar2.setVisible(false); + pack(); } diff --git a/src/main/java/com/tonikelope/megabasterd/FolderLinkDialog.java b/src/main/java/com/tonikelope/megabasterd/FolderLinkDialog.java index 6c45a913b..2494b98ec 100644 --- a/src/main/java/com/tonikelope/megabasterd/FolderLinkDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/FolderLinkDialog.java @@ -56,6 +56,8 @@ public final class FolderLinkDialog extends javax.swing.JDialog { updateFonts(this.getRootPane(), DEFAULT_FONT, parent.getMain_panel().getZoom_factor()); + translateLabels(getRootPane()); + _mega_error = false; _total_space = 0L; _download = false; diff --git a/src/main/java/com/tonikelope/megabasterd/GetMasterPasswordDialog.java b/src/main/java/com/tonikelope/megabasterd/GetMasterPasswordDialog.java index 640e18137..0135d96cc 100644 --- a/src/main/java/com/tonikelope/megabasterd/GetMasterPasswordDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/GetMasterPasswordDialog.java @@ -64,6 +64,8 @@ public class GetMasterPasswordDialog extends javax.swing.JDialog { updateFonts(this.getRootPane(), DEFAULT_FONT, main_panel.getZoom_factor()); + translateLabels(getRootPane()); + _current_pass_hash = current_pass_hash; _pass_ok = false; @@ -194,7 +196,7 @@ public class GetMasterPasswordDialog extends javax.swing.JDialog { private void ok_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ok_buttonActionPerformed - status_label.setText("Verifying your password, please wait..."); + status_label.setText(LabelTranslatorSingleton.getInstance().translate("Verifying your password, please wait...")); pack(); @@ -211,7 +213,7 @@ public class GetMasterPasswordDialog extends javax.swing.JDialog { if (!pass_hash.equals(_current_pass_hash)) { - JOptionPane.showMessageDialog(tthis, "BAD PASSWORD!", "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(tthis, LabelTranslatorSingleton.getInstance().translate("BAD PASSWORD!"), "Error", JOptionPane.ERROR_MESSAGE); status_label.setText(""); diff --git a/src/main/java/com/tonikelope/megabasterd/LabelTranslatorSingleton.java b/src/main/java/com/tonikelope/megabasterd/LabelTranslatorSingleton.java new file mode 100644 index 000000000..68ec01a7f --- /dev/null +++ b/src/main/java/com/tonikelope/megabasterd/LabelTranslatorSingleton.java @@ -0,0 +1,190 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.tonikelope.megabasterd; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * + * @author tonikelope + */ +public final class LabelTranslatorSingleton { + + public static LabelTranslatorSingleton getInstance() { + + return LabelTranslatorSingleton.LazyHolder.INSTANCE; + } + + private final ConcurrentHashMap _rosetta; + + private LabelTranslatorSingleton() { + + _rosetta = new ConcurrentHashMap(); + + switch (MainPanel.getLanguage()) { + + case "ES": + Spanish(); + } + + } + + private final static class LazyHolder { + + private static final LabelTranslatorSingleton INSTANCE = new LabelTranslatorSingleton(); + } + + private void Spanish() { + + _rosetta.put("Check version", "Comprobar versión"); + _rosetta.put("Checking, please wait...", "Comprobando, por favor espera..."); + _rosetta.put("You have the latest version ;)", "Tienes la versión más reciente ;)"); + _rosetta.put("Copy MegaBasterd download URL", "Copiar la URL de descarga de MegaBasterd"); + _rosetta.put("Made with love (and with no warranty) by tonikelope.", "Fabricado con amor (y sin ninguna garantía) por tonikelope."); + _rosetta.put("Yet another (unofficial) cross-platform MEGA downloader/uploader/streaming suite.", "Ni más ni menos que otra suite multiplataforma (no oficial) de descarga/subida/streaming para MEGA."); + _rosetta.put("MEGA URL was copied to clipboard!", "¡URL de MEGA copiada en el portapapeles!"); + _rosetta.put("MegaBasterd NEW VERSION is available! -> ", "¡Hay una versión nueva de MegaBasterd disponible! -> "); + _rosetta.put("Selecting folder...", "Seleccionando carpeta..."); + _rosetta.put("MERGE FILE", "JUNTAR ARCHIVO"); + _rosetta.put("Delete parts after merge", "Eliminar partes después de juntar"); + _rosetta.put("Remove selected", "Eliminar seleccionados"); + _rosetta.put("SPLIT FILE", "PARTIR ARCHIVO"); + _rosetta.put("Encrypt on disk sensitive information", "Cifrar en disco datos sensibles"); + _rosetta.put("Use MEGA accounts for download/stream", "Utilizar cuentas de MEGA para descargar/subir"); + _rosetta.put("Please wait...", "Por favor espera..."); + _rosetta.put("CANCEL RETRY", "CANCELAR REINTENTO"); + _rosetta.put("SPLITTING FILE...", "PARTIENDO ARCHIVO..."); + _rosetta.put("Open folder", "Abrir carpeta"); + _rosetta.put("RESUME DOWNLOAD", "CONTINUAR DESCARGA"); + _rosetta.put("Close", "Cerrar"); + _rosetta.put("Add files", "Agregar archivos"); + _rosetta.put("IMPORT SETTINGS", "IMPORTAR AJUSTES"); + _rosetta.put("RESET MEGABASTERD", "RESETEAR MEGABASTERD"); + _rosetta.put("RESET ACCOUNTS", "RESETEAR CUENTAS"); + _rosetta.put("Verify file integrity (when download is finished)", "Verificar integridad del archivo (al terminar la descarga)"); + _rosetta.put("Let's dance, baby", "¡Vamos!"); + _rosetta.put("Unlock accounts", "Desbloquear cuentas"); + _rosetta.put("Use MegaCrypter reverse mode", "Utilizar modo inverso de MegaCrypter"); + _rosetta.put("Select (any) file part", "Seleccionar (alguna) parte del archivo"); + _rosetta.put("Add folder", "Añadir una carpeta"); + _rosetta.put("Adding files, please wait...", "Añadiendo archivos, por favor espera..."); + _rosetta.put("Restart", "Reiniciar"); + _rosetta.put("Use SmartProxy", "Utilizar SmartProxy"); + _rosetta.put("PAUSE DOWNLOAD", "PAUSAR DESCARGA"); + _rosetta.put("Change it", "Cambiar"); + _rosetta.put("EXPORT SETTINGS", "EXPORTAR AJUSTES"); + _rosetta.put("Change output folder", "Cambiar carpeta destino"); + _rosetta.put("Add account", "Añadir cuenta"); + _rosetta.put("Select file", "Seleccionar archivo"); + _rosetta.put("Opening file...", "Abriendo archivo..."); + _rosetta.put("CANCEL DOWNLOAD", "CANCELAR DESCARGA"); + _rosetta.put("REMOVE ALL EXCEPT THIS", "QUITAR TODO EXCEPTO ESTO"); + _rosetta.put("Loading DLC, please wait...", "Cargando DLC, por favor espera..."); + _rosetta.put("Changing output folder...", "Cambiando carpeta destino..."); + _rosetta.put("RESUME UPLOAD", "CONTINUAR SUBIDA"); + _rosetta.put("Limit upload speed", "Limitar velocidad de subida"); + _rosetta.put("CANCEL", "CANCELAR"); + _rosetta.put("Use multi slot download mode", "Utilizar descarga multi slot"); + _rosetta.put("Selecting file...", "Seleccionando archivo..."); + _rosetta.put("Copy folder link", "Copiar enlace de carpeta"); + _rosetta.put("Limit download speed", "Limitar velocidad de descarga"); + _rosetta.put("REMOVE THIS", "QUITAR ESTO"); + _rosetta.put("Copy file link", "Copiar enlace de archivo"); + _rosetta.put("Load DLC container", "Cargar contenedor DLC"); + _rosetta.put("Adding folder, please wait...", "Añadiendo carpeta, por favor espera..."); + _rosetta.put("PAUSE UPLOAD", "PAUSAR SUBIDA"); + _rosetta.put("CANCEL CHECK", "CANCELAR VERIFICACIÓN"); + _rosetta.put("Keep temp file", "Conservar archivo temporal"); + _rosetta.put("Use HTTP(S) PROXY", "Utilizar PROXY HTTP(S)");; + _rosetta.put("MERGING FILE...", "JUNTANDO ARCHIVO..."); + _rosetta.put("Checking MEGA account...", "Comprobando cuenta de MEGA..."); + _rosetta.put("Remove selected", "Quitar seleccionado"); + _rosetta.put("SAVE", "GUARDAR"); + _rosetta.put("New download", "Nueva descarga"); + _rosetta.put("New upload", "Nueva subida"); + _rosetta.put("New stream", "Nuevo stream"); + _rosetta.put("Split file", "Partir un archivo"); + _rosetta.put("Merge file", "Juntar las partes de un archivo"); + _rosetta.put("Remove all no running downloads", "Cancelar las descargas en espera"); + _rosetta.put("Remove all no running uploads", "Cancelar las subidas en espera"); + _rosetta.put("Edit", "Edición"); + _rosetta.put("Settings", "Ajustes"); + _rosetta.put("Help", "Ayuda"); + _rosetta.put("About", "Acerca de"); + _rosetta.put("Remember for this session", "Recordar durante la sesión"); + _rosetta.put("Restore folder data", "Restaurar contenido de la carpeta"); + _rosetta.put("Restoring data, please wait...", "Restaurando datos, por favor espera..."); + _rosetta.put("File", "Archivo"); + _rosetta.put("Hide to tray", "Ocultar en la bandeja"); + _rosetta.put("Close all OK finished", "Cerrar todas las terminadas OK"); + _rosetta.put("Exit", "Salir"); + _rosetta.put("Download folder:", "Carpeta para las descargas:"); + _rosetta.put("Default slots per file:", "Slots por archivo por defecto:"); + _rosetta.put("Note: if you want to download without using a MEGA PREMIUM account you SHOULD enable it. (Slots consume RAM, so use them moderately).", "Nota: si quieres descargar sin utilizar una cuenta de MEGA PREMIUM es recomendable activarlo. (Los slots consumen RAM, así que úsalos con moderación)."); + _rosetta.put("Max speed (KB/s):", "Velocidad máxima (KB/s):"); + _rosetta.put("Default account:", "Cuenta por defecto:"); + _rosetta.put("TCP Port:", "Puerto TCP:"); + _rosetta.put("Note: you MUST \"OPEN\" this port in your router/firewall.", "Nota: es OBLIGATORIO \"ABRIR\" este puerto en tu router/firewall."); + _rosetta.put("Note: enable it in order to mitigate bandwidth limit. (Multi slot required).", "Nota: actívalo para mitigar el límite de descarga de MEGA."); + _rosetta.put("Max parallel downloads:", "Máximas descargas simultáneas:"); + _rosetta.put("Max parallel uploads:", "Máximas subidas simultáneas:"); + _rosetta.put("Note: slots consume RAM, so use them moderately.", "Nota: los slots consumen RAM, así que úsalos con moderación"); + _rosetta.put("Note: you can use a (optional) alias for your email addresses -> bob@supermail.com#bob_mail (don't forget to save after entering your accounts).", "Nota: puedes usar de forma opcional un alias para tus emails -> bob@supermail.com#bob_mail (no te olvides de guardar después de introducir todas tus cuentas)."); + _rosetta.put("Your MEGA accounts:", "Tus cuentas de MEGA:"); + _rosetta.put("Your ELC accounts:", "Tus cuentas ELC:"); + _rosetta.put("Note: restart required.", "Nota: es necesario reiniciar."); + _rosetta.put("Font ZOOM (%):", "Zoom de la fuente (%):"); + _rosetta.put("Note: MegaBasterd will use this proxy for ALL connections (restart required).", "Nota: MegaBasterd utilizará este proxy para todas las conexiones (es necesario reiniciar)."); + _rosetta.put("Port:", "Puerto:"); + _rosetta.put("Settings successfully saved!", "¡Ajustes guardados correctamente!"); + _rosetta.put("Settings successfully imported!", "¡Ajustes importados correctamente!"); + _rosetta.put("Settings successfully exported!", "¡Ajustes exportados correctamente!"); + _rosetta.put("Settings successfully reset!", "¡Ajustes reseteados correctamente!"); + _rosetta.put("There were errors with some accounts (email and/or password are/is wrong). Please, check them:\n\n", "Hay errores con algunas cuentas (email y/o contraseña incorrecta). Por favor, revísalas:\n\n"); + _rosetta.put("Settings saved", "Ajustes guardados"); + _rosetta.put("Settings imported", "Ajustes importados"); + _rosetta.put("Settings exported", "Ajustes exportados"); + _rosetta.put("Settings reset", "Ajustes reseteados"); + _rosetta.put("MegaBasterd will restart", "MegaBasterd se reiniciará"); + _rosetta.put("Restart required", "Es necesario reiniciar"); + _rosetta.put("File is not readable!", "¡Archivo no accesible!"); + _rosetta.put("Folder is not readable!", "¡Carpeta no accesible!"); + _rosetta.put("BAD PASSWORD!", "¡CONTRASEÑA INCORRECTA!"); + _rosetta.put("Passwords does not match!", "¡Las contraseñas no coinciden!"); + _rosetta.put("Please, paste a Mega/MegaCrypter/ELC link!", "Por favor, escribe un enlace de Mega/MegaCrypter/ELC"); + _rosetta.put("Yes", "Sí"); + _rosetta.put("Cancel", "Cancelar"); + _rosetta.put("It seems MegaBasterd is streaming video. Do you want to exit?", "Parece que MegaBasterd está retransmitiendo vídeo. ¿Quieres continuar?"); + _rosetta.put("It seems MegaBasterd is provisioning down/uploads.\n\nIf you exit now, unprovisioned down/uploads will be lost.\n\nDo you want to continue?", "Parece que MegaBasterd está provisionando transferencias.\n\nSi sales ahora, todas las transferencias no provisionadas se perderán.\n\n¿Quieres continuar?"); + _rosetta.put("It seems MegaBasterd is just finishing uploading some files.\n\nIF YOU EXIT NOW, THOSE UPLOADS WILL FAIL.\n\nDo you want to continue?", "Parece que MegaBasterd está finalizando unas subidas.\n\nSI SALES AHORA, ESAS SUBIDAS FALLARÁN.\n\n¿Quieres continuar?"); + _rosetta.put("All your current settings and accounts will be deleted after import. (It is recommended to export your current settings before importing). \n\nDo you want to continue?", "Todos tus ajustes y cuentas actuales se perderán después de importar. (Es recomendable guardar tus ajustes actuales antes de importar otros). ¿Quieres continuar?"); + _rosetta.put("Only SAVED settings and accounts will be exported. (If you are unsure, it is better to save your current settings and then export them).\n\nDo you want to continue?", "Sólamente los ajustes GUARDADOS se exportarán. (Si no estás seguro, es mejor que guardes antes tus ajustes y que después vuelvas aquí). ¿Quieres continuar?"); + _rosetta.put("Master password will be reset and all your accounts will be removed. (THIS CAN'T BE UNDONE)\n\nDo you want to continue?", "La contraseña maestra será reseteada y todas tus cuentas serán eliminadas. (ESTO NO SE PUEDE DESHACER).\n\n¿Quieres continuar?"); + _rosetta.put("ALL YOUR SETTINGS, ACCOUNTS AND TRANSFERENCES WILL BE REMOVED. (THIS CAN'T BE UNDONE)\n\nDo you want to continue?", "TODOS TUS AJUSTES, CUENTAS Y TRANSFERENCIAS SERÁN ELIMINADAS. (ESTO NO SE PUEDE DESHACER)\n\n¿Quieres continuar?"); + _rosetta.put("Remove all preprocessing, provisioning and waiting downloads?", "¿Eliminar todas las descargas que no están en ejecución?"); + _rosetta.put("Warning!", "¡Atención!"); + _rosetta.put("Remove all preprocessing, provisioning and waiting uploads?", "¿Eliminar todas las subidas que no están en ejecución?"); + _rosetta.put("Please, enter your master password", "Por favor, ingresa tu contraseña maestra"); + _rosetta.put("WARNING: if you forget this password, you will have to insert all your accounts again.", "AVISO: si olvidas esta contraseña, tendrás que volver a insertar todas tus cuentas."); + _rosetta.put("New pass:", "Nueva contraseña:"); + _rosetta.put("Confirm new:", "Confirmar nueva contraseña:"); + _rosetta.put("Verifying your password, please wait...", "Verificando tu contraseña, por favor espera..."); + _rosetta.put("Processing your password, please wait...", "Procesando tu contraseña, por favor espera..."); + _rosetta.put("Downloads", "Descargas"); + _rosetta.put("Uploads", "Subidas"); + _rosetta.put("Accounts", "Cuentas"); + _rosetta.put("Advanced", "Avanzado"); + _rosetta.put("Language:", "Idioma:"); + _rosetta.put("English", "Inglés"); + _rosetta.put("Spanish", "Español"); + + } + + public String translate(String orig) { + + return _rosetta.containsKey(orig) ? (String) _rosetta.get(orig) : orig; + } +} diff --git a/src/main/java/com/tonikelope/megabasterd/LinkGrabberDialog.java b/src/main/java/com/tonikelope/megabasterd/LinkGrabberDialog.java index 92f251754..e62716b6b 100644 --- a/src/main/java/com/tonikelope/megabasterd/LinkGrabberDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/LinkGrabberDialog.java @@ -63,6 +63,8 @@ public final class LinkGrabberDialog extends javax.swing.JDialog implements Clip updateFonts(this.getRootPane(), DEFAULT_FONT, _main_panel.getZoom_factor()); + translateLabels(getRootPane()); + _download = false; _download_path = Paths.get(download_path).toAbsolutePath().normalize().toString(); diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java index 967fa425f..1cb550dfd 100644 --- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java +++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java @@ -47,12 +47,13 @@ import java.io.File; */ public final class MainPanel { - public static final String VERSION = "5.17"; + public static final String VERSION = "5.18"; public static final int THROTTLE_SLICE_SIZE = 16 * 1024; public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024; public static final int STREAMER_PORT = 1337; public static final int WATCHDOG_PORT = 1338; public static final int DEFAULT_MEGA_PROXY_PORT = 9999; + public static final String DEFAULT_LANGUAGE = "EN"; public static final boolean DEFAULT_SMART_PROXY = true; public static final Font DEFAULT_FONT = createAndRegisterFont("/fonts/Itim-Regular.ttf"); public static final float ZOOM_FACTOR = 1.0f; @@ -66,6 +67,7 @@ public final class MainPanel { private static String _proxy_pass; private static boolean _use_smart_proxy; private static SmartMegaProxyManager _proxy_manager; + private static String _language; public static void main(String args[]) { @@ -154,6 +156,12 @@ public final class MainPanel { UIManager.put("OptionPane.buttonFont", DEFAULT_FONT.deriveFont(13f * getZoom_factor())); + UIManager.put("OptionPane.cancelButtonText", LabelTranslatorSingleton.getInstance().translate("Cancel")); + + UIManager.put("OptionPane.yesButtonText", LabelTranslatorSingleton.getInstance().translate("Yes")); + + UIManager.put("OptionPane.okButtonText", LabelTranslatorSingleton.getInstance().translate("OK")); + _view = new MainPanelView(this); if (checkAppIsRunning()) { @@ -263,6 +271,10 @@ public final class MainPanel { resumeUploads(); } + public static String getLanguage() { + return _language; + } + public static String getProxy_user() { return _proxy_user; } @@ -640,6 +652,12 @@ public final class MainPanel { } else { _use_smart_proxy = DEFAULT_SMART_PROXY; } + + _language = DBTools.selectSettingValue("language"); + + if (_language == null) { + _language = DEFAULT_LANGUAGE; + } } public boolean checkByeBye() { @@ -649,11 +667,11 @@ public final class MainPanel { if (!_streamserver.getWorking_threads().isEmpty()) { Object[] options = {"No", - "Yes"}; + LabelTranslatorSingleton.getInstance().translate("Yes")}; int n = showOptionDialog(getView(), - "It seems MegaBasterd is streaming video. Do you want to exit?", - "Warning!", YES_NO_CANCEL_OPTION, QUESTION_MESSAGE, + LabelTranslatorSingleton.getInstance().translate("It seems MegaBasterd is streaming video. Do you want to exit?"), + LabelTranslatorSingleton.getInstance().translate("Warning!"), YES_NO_CANCEL_OPTION, QUESTION_MESSAGE, null, options, options[0]); @@ -666,11 +684,11 @@ public final class MainPanel { } else if (!getDownload_manager().getTransference_provision_queue().isEmpty() || !getUpload_manager().getTransference_provision_queue().isEmpty()) { Object[] options = {"No", - "Yes"}; + LabelTranslatorSingleton.getInstance().translate("Yes")}; int n = showOptionDialog(getView(), - "It seems MegaBasterd is provisioning down/uploads.\n\nIf you exit now, unprovisioned down/uploads will be lost.\n\nDo you want to continue?", - "Warning!", YES_NO_CANCEL_OPTION, WARNING_MESSAGE, + LabelTranslatorSingleton.getInstance().translate("It seems MegaBasterd is provisioning down/uploads.\n\nIf you exit now, unprovisioned down/uploads will be lost.\n\nDo you want to continue?"), + LabelTranslatorSingleton.getInstance().translate("Warning!"), YES_NO_CANCEL_OPTION, WARNING_MESSAGE, null, options, options[0]); @@ -683,11 +701,11 @@ public final class MainPanel { } else if (!getUpload_manager().getFinishing_uploads_queue().isEmpty()) { Object[] options = {"No", - "Yes"}; + LabelTranslatorSingleton.getInstance().translate("Yes")}; int n = showOptionDialog(getView(), - "It seems MegaBasterd is just finishing uploading some files.\n\nIF YOU EXIT NOW, THOSE UPLOADS WILL FAIL.\n\nDo you want to continue?", - "Warning!", YES_NO_CANCEL_OPTION, WARNING_MESSAGE, + LabelTranslatorSingleton.getInstance().translate("It seems MegaBasterd is just finishing uploading some files.\n\nIF YOU EXIT NOW, THOSE UPLOADS WILL FAIL.\n\nDo you want to continue?"), + LabelTranslatorSingleton.getInstance().translate("Warning!"), YES_NO_CANCEL_OPTION, WARNING_MESSAGE, null, options, options[0]); @@ -712,7 +730,7 @@ public final class MainPanel { } if (restart) { - JOptionPane.showMessageDialog(getView(), "MegaBasterd will restart", "Restart required", JOptionPane.WARNING_MESSAGE); + JOptionPane.showMessageDialog(getView(), LabelTranslatorSingleton.getInstance().translate("MegaBasterd will restart"), LabelTranslatorSingleton.getInstance().translate("Restart required"), JOptionPane.WARNING_MESSAGE); restartApplication(1); } else { exit(0); @@ -740,7 +758,7 @@ public final class MainPanel { } if (restart) { - JOptionPane.showMessageDialog(getView(), "MegaBasterd will restart", "Restart required", JOptionPane.WARNING_MESSAGE); + JOptionPane.showMessageDialog(getView(), LabelTranslatorSingleton.getInstance().translate("MegaBasterd will restart"), LabelTranslatorSingleton.getInstance().translate("Restart required"), JOptionPane.WARNING_MESSAGE); restartApplication(1); } else { exit(0); diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanelView.form b/src/main/java/com/tonikelope/megabasterd/MainPanelView.form index d211a7e17..6947090ec 100644 --- a/src/main/java/com/tonikelope/megabasterd/MainPanelView.form +++ b/src/main/java/com/tonikelope/megabasterd/MainPanelView.form @@ -250,7 +250,7 @@ - + diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanelView.java b/src/main/java/com/tonikelope/megabasterd/MainPanelView.java index 879ed01b1..4612b471c 100644 --- a/src/main/java/com/tonikelope/megabasterd/MainPanelView.java +++ b/src/main/java/com/tonikelope/megabasterd/MainPanelView.java @@ -206,6 +206,8 @@ public final class MainPanelView extends javax.swing.JFrame { updateFonts(getRootPane(), DEFAULT_FONT, _main_panel.getZoom_factor()); + translateLabels(getRootPane()); + for (JComponent c : new JComponent[]{global_speed_down_label, global_speed_up_label, down_remtime_label, up_remtime_label, close_all_finished_down_button, close_all_finished_up_button, pause_all_down_button, pause_all_up_button}) { c.setVisible(false); @@ -217,6 +219,9 @@ public final class MainPanelView extends javax.swing.JFrame { jScrollPane_down.getVerticalScrollBar().setUnitIncrement(20); jScrollPane_up.getVerticalScrollBar().setUnitIncrement(20); + jTabbedPane1.setTitleAt(0, LabelTranslatorSingleton.getInstance().translate("Downloads")); + jTabbedPane1.setTitleAt(1, LabelTranslatorSingleton.getInstance().translate("Uploads")); + pack(); } @@ -922,11 +927,11 @@ public final class MainPanelView extends javax.swing.JFrame { private void clean_all_down_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clean_all_down_menuActionPerformed Object[] options = {"No", - "Yes"}; + LabelTranslatorSingleton.getInstance().translate("Yes")}; int n = showOptionDialog(_main_panel.getView(), - "Remove all preprocessing, provisioning and waiting downloads?", - "Warning!", YES_NO_CANCEL_OPTION, QUESTION_MESSAGE, + LabelTranslatorSingleton.getInstance().translate("Remove all preprocessing, provisioning and waiting downloads?"), + LabelTranslatorSingleton.getInstance().translate("Warning!"), YES_NO_CANCEL_OPTION, QUESTION_MESSAGE, null, options, options[0]); @@ -1090,11 +1095,11 @@ public final class MainPanelView extends javax.swing.JFrame { private void clean_all_up_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clean_all_up_menuActionPerformed Object[] options = {"No", - "Yes"}; + LabelTranslatorSingleton.getInstance().translate("Yes")}; int n = showOptionDialog(_main_panel.getView(), - "Remove all preprocessing, provisioning and waiting uploads?", - "Warning!", YES_NO_CANCEL_OPTION, QUESTION_MESSAGE, + LabelTranslatorSingleton.getInstance().translate("Remove all preprocessing, provisioning and waiting uploads?"), + LabelTranslatorSingleton.getInstance().translate("Warning!"), YES_NO_CANCEL_OPTION, QUESTION_MESSAGE, null, options, options[0]); diff --git a/src/main/java/com/tonikelope/megabasterd/MiscTools.java b/src/main/java/com/tonikelope/megabasterd/MiscTools.java index b90d86caf..a058f3fa3 100644 --- a/src/main/java/com/tonikelope/megabasterd/MiscTools.java +++ b/src/main/java/com/tonikelope/megabasterd/MiscTools.java @@ -58,6 +58,10 @@ import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JMenu; +import javax.swing.JMenuItem; import javax.swing.border.TitledBorder; /** @@ -252,7 +256,7 @@ public final class MiscTools { if (component instanceof javax.swing.JMenu) { for (Component child : ((javax.swing.JMenu) component).getMenuComponents()) { - if (child instanceof Container) { + if (child instanceof JMenuItem) { updateFonts(child, font, zoom_factor); } @@ -276,6 +280,48 @@ public final class MiscTools { } } + public static void translateLabels(final Component component) { + + if (component != null) { + + if (component instanceof javax.swing.JLabel) { + + ((JLabel) component).setText(LabelTranslatorSingleton.getInstance().translate(((JLabel) component).getText())); + + } else if (component instanceof javax.swing.JButton) { + + ((JButton) component).setText(LabelTranslatorSingleton.getInstance().translate(((JButton) component).getText())); + + } else if (component instanceof javax.swing.JCheckBox) { + + ((javax.swing.JCheckBox) component).setText(LabelTranslatorSingleton.getInstance().translate(((javax.swing.JCheckBox) component).getText())); + + } else if ((component instanceof JMenuItem) && !(component instanceof JMenu)) { + + ((JMenuItem) component).setText(LabelTranslatorSingleton.getInstance().translate(((JMenuItem) component).getText())); + + } else if (component instanceof JMenu) { + + for (Component child : ((JMenu) component).getMenuComponents()) { + if (child instanceof JMenuItem) { + translateLabels(child); + } + } + + ((JMenu) component).setText(LabelTranslatorSingleton.getInstance().translate(((JMenu) component).getText())); + + } else if (component instanceof Container) { + + for (Component child : ((Container) component).getComponents()) { + if (child instanceof Container) { + + translateLabels(child); + } + } + } + } + } + public static void updateTitledBorderFont(final TitledBorder border, final Font font, final float zoom_factor) { Font old_title_font = border.getTitleFont(); diff --git a/src/main/java/com/tonikelope/megabasterd/SetMasterPasswordDialog.java b/src/main/java/com/tonikelope/megabasterd/SetMasterPasswordDialog.java index 6fbdad9d3..3b34a5ab7 100644 --- a/src/main/java/com/tonikelope/megabasterd/SetMasterPasswordDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/SetMasterPasswordDialog.java @@ -56,6 +56,8 @@ public class SetMasterPasswordDialog extends javax.swing.JDialog { updateFonts(this.getRootPane(), DEFAULT_FONT, main_panel.getZoom_factor()); + translateLabels(getRootPane()); + _pass_ok = false; _new_pass = null; @@ -207,7 +209,7 @@ public class SetMasterPasswordDialog extends javax.swing.JDialog { private void ok_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ok_buttonActionPerformed - status_label.setText("Verifying your password, please wait..."); + status_label.setText(LabelTranslatorSingleton.getInstance().translate("Verifying your password, please wait...")); final Dialog tthis = this; @@ -220,7 +222,7 @@ public class SetMasterPasswordDialog extends javax.swing.JDialog { if (Arrays.equals(new_pass_textfield.getPassword(), confirm_pass_textfield.getPassword())) { - status_label.setText("Processing your password, please wait..."); + status_label.setText(LabelTranslatorSingleton.getInstance().translate("Processing your password, please wait...")); if (new_pass_textfield.getPassword().length > 0) { @@ -235,7 +237,7 @@ public class SetMasterPasswordDialog extends javax.swing.JDialog { } else { - JOptionPane.showMessageDialog(tthis, "Passwords does not match!", "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(tthis, LabelTranslatorSingleton.getInstance().translate("Passwords does not match!"), "Error", JOptionPane.ERROR_MESSAGE); status_label.setText(""); diff --git a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form index d221aa93f..06ed340c5 100644 --- a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form +++ b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form @@ -176,7 +176,7 @@ - + @@ -319,7 +319,7 @@ - + @@ -1024,21 +1024,31 @@ - + - - - - + + + + + + + + + + + + + + + - - + @@ -1050,7 +1060,7 @@ - + @@ -1058,7 +1068,7 @@ - + @@ -1068,9 +1078,17 @@ - - + + + + + + + + + + @@ -1078,7 +1096,7 @@ - + @@ -1375,6 +1393,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java index 0dd2a231b..beb9dc741 100644 --- a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java @@ -80,6 +80,16 @@ public final class SettingsDialog extends javax.swing.JDialog { updateTitledBorderFont(((javax.swing.border.TitledBorder) proxy_auth_panel.getBorder()), DEFAULT_FONT, _main_panel.getZoom_factor()); + translateLabels(getRootPane()); + + jTabbedPane1.setTitleAt(0, LabelTranslatorSingleton.getInstance().translate("Downloads")); + + jTabbedPane1.setTitleAt(1, LabelTranslatorSingleton.getInstance().translate("Uploads")); + + jTabbedPane1.setTitleAt(2, LabelTranslatorSingleton.getInstance().translate("Accounts")); + + jTabbedPane1.setTitleAt(3, LabelTranslatorSingleton.getInstance().translate("Advanced")); + downloads_scroll_pane.getVerticalScrollBar().setUnitIncrement(20); downloads_scroll_pane.getHorizontalScrollBar().setUnitIncrement(20); @@ -459,6 +469,22 @@ public final class SettingsDialog extends javax.swing.JDialog { proxy_pass_textfield.setText(DBTools.selectSettingValue("proxy_pass")); + String language = DBTools.selectSettingValue("language"); + + this.language_combo.addItem(LabelTranslatorSingleton.getInstance().translate("English")); + + this.language_combo.addItem(LabelTranslatorSingleton.getInstance().translate("Spanish")); + + if (language == null) { + language = MainPanel.DEFAULT_LANGUAGE; + } + + if (language.equals("EN")) { + this.language_combo.setSelectedItem(LabelTranslatorSingleton.getInstance().translate("English")); + } else if (language.equals("ES")) { + this.language_combo.setSelectedItem(LabelTranslatorSingleton.getInstance().translate("Spanish")); + } + _remember_master_pass = true; _deleted_mega_accounts = new HashSet(); @@ -563,6 +589,8 @@ public final class SettingsDialog extends javax.swing.JDialog { jButton1 = new javax.swing.JButton(); jSeparator1 = new javax.swing.JSeparator(); jSeparator2 = new javax.swing.JSeparator(); + jLabel2 = new javax.swing.JLabel(); + language_combo = new javax.swing.JComboBox<>(); status = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); @@ -599,7 +627,7 @@ public final class SettingsDialog extends javax.swing.JDialog { megacrypter_reverse_warning_label.setText("Note: you MUST \"OPEN\" this port in your router/firewall."); rec_download_slots_label.setFont(new java.awt.Font("Dialog", 2, 14)); // NOI18N - rec_download_slots_label.setText("Note: if you want to download without using a MEGA PREMIUM account you SHOULD enable it. (Slots consume RAM, so use them moderately). "); + rec_download_slots_label.setText("Note: if you want to download without using a MEGA PREMIUM account you SHOULD enable it. (Slots consume RAM, so use them moderately)."); megacrypter_reverse_checkbox.setFont(new java.awt.Font("Dialog", 1, 18)); // NOI18N megacrypter_reverse_checkbox.setText("Use MegaCrypter reverse mode"); @@ -717,7 +745,7 @@ public final class SettingsDialog extends javax.swing.JDialog { .addComponent(megacrypter_reverse_warning_label, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(rec_download_slots_label) - .addGap(0, 27, Short.MAX_VALUE)))) + .addGap(0, 31, Short.MAX_VALUE)))) .addGroup(jPanel3Layout.createSequentialGroup() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() @@ -1296,6 +1324,11 @@ public final class SettingsDialog extends javax.swing.JDialog { jSeparator2.setOrientation(javax.swing.SwingConstants.VERTICAL); + jLabel2.setFont(new java.awt.Font("Dialog", 1, 18)); // NOI18N + jLabel2.setText("Language:"); + + language_combo.setFont(new java.awt.Font("Dialog", 1, 18)); // NOI18N + javax.swing.GroupLayout advanced_panelLayout = new javax.swing.GroupLayout(advanced_panel); advanced_panel.setLayout(advanced_panelLayout); advanced_panelLayout.setHorizontalGroup( @@ -1307,13 +1340,20 @@ public final class SettingsDialog extends javax.swing.JDialog { .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, advanced_panelLayout.createSequentialGroup() .addGroup(advanced_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(advanced_panelLayout.createSequentialGroup() - .addComponent(zoom_label) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(zoom_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(rec_zoom_label)) + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(language_combo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(advanced_panelLayout.createSequentialGroup() + .addGroup(advanced_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(advanced_panelLayout.createSequentialGroup() + .addComponent(zoom_label) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(zoom_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(rec_zoom_label)) + .addGap(0, 0, Short.MAX_VALUE))) .addGap(18, 18, 18) .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 270, Short.MAX_VALUE) + .addGap(136, 136, 136) .addGroup(advanced_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(advanced_panelLayout.createSequentialGroup() .addComponent(import_settings_button) @@ -1327,7 +1367,7 @@ public final class SettingsDialog extends javax.swing.JDialog { advanced_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(advanced_panelLayout.createSequentialGroup() .addContainerGap() - .addGroup(advanced_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(advanced_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(advanced_panelLayout.createSequentialGroup() .addGroup(advanced_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(export_settings_button) @@ -1337,13 +1377,19 @@ public final class SettingsDialog extends javax.swing.JDialog { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(advanced_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jButton1) - .addComponent(rec_zoom_label))) + .addGroup(advanced_panelLayout.createSequentialGroup() + .addGroup(advanced_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(language_combo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(rec_zoom_label))) + .addGap(6, 6, 6)) .addComponent(jSeparator2)) .addGap(18, 18, 18) .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(proxy_panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(192, Short.MAX_VALUE)) + .addContainerGap(172, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Advanced", new javax.swing.ImageIcon(getClass().getResource("/images/icons8-administrative-tools-30.png")), advanced_panel); // NOI18N @@ -1421,6 +1467,22 @@ public final class SettingsDialog extends javax.swing.JDialog { settings.put("megacrypter_reverse_port", String.valueOf(megacrypter_reverse_port_spinner.getValue())); settings.put("smart_proxy", smart_proxy_checkbox.isSelected() ? "yes" : "no"); + String old_language = DBTools.selectSettingValue("language"); + + if (old_language == null) { + old_language = MainPanel.DEFAULT_LANGUAGE; + } + + String language = (String) language_combo.getSelectedItem(); + + if (language.equals(LabelTranslatorSingleton.getInstance().translate("English"))) { + language = "EN"; + } else if (language.equals(LabelTranslatorSingleton.getInstance().translate("Spanish"))) { + language = "ES"; + } + + settings.put("language", language); + String old_zoom = DBTools.selectSettingValue("font_zoom"); if (old_zoom == null) { @@ -1485,7 +1547,7 @@ public final class SettingsDialog extends javax.swing.JDialog { insertSettingsValues(settings); - if (!zoom.equals(old_zoom) + if (!language.equals(old_language) || !zoom.equals(old_zoom) || use_proxy != old_use_proxy || !proxy_host.equals(old_proxy_host) || !proxy_port.equals(old_proxy_port) @@ -1721,7 +1783,7 @@ public final class SettingsDialog extends javax.swing.JDialog { pack(); - JOptionPane.showMessageDialog(tthis, "There were errors with some accounts (email and/or password are/is wrong). Please, check them:\n\n" + final_email_error, "Mega Account Check Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(tthis, LabelTranslatorSingleton.getInstance().translate("There were errors with some accounts (email and/or password are/is wrong). Please, check them:\n\n") + final_email_error, "Mega Account Check Error", JOptionPane.ERROR_MESSAGE); save_button.setEnabled(true); @@ -1755,7 +1817,7 @@ public final class SettingsDialog extends javax.swing.JDialog { @Override public void run() { status.setText(""); - JOptionPane.showMessageDialog(tthis, "Settings successfully saved!", "Settings saved", JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(tthis, LabelTranslatorSingleton.getInstance().translate("Settings successfully saved!"), LabelTranslatorSingleton.getInstance().translate("Settings saved"), JOptionPane.INFORMATION_MESSAGE); _settings_ok = true; setDefaultCloseOperation(DISPOSE_ON_CLOSE); setVisible(false); @@ -1767,7 +1829,7 @@ public final class SettingsDialog extends javax.swing.JDialog { } else { - JOptionPane.showMessageDialog(this, "Settings successfully saved!", "Settings saved", JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(this, LabelTranslatorSingleton.getInstance().translate("Settings successfully saved!"), LabelTranslatorSingleton.getInstance().translate("Settings saved"), JOptionPane.INFORMATION_MESSAGE); _settings_ok = true; setDefaultCloseOperation(DISPOSE_ON_CLOSE); setVisible(false); @@ -1798,11 +1860,11 @@ public final class SettingsDialog extends javax.swing.JDialog { private void import_settings_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_import_settings_buttonActionPerformed Object[] options = {"No", - "Yes"}; + LabelTranslatorSingleton.getInstance().translate("Yes")}; int n = showOptionDialog(this, - "All your current settings and accounts will be deleted after import. (It is recommended to export your current settings before importing). \n\nDo you want to continue?", - "IMPORT SETTINGS", YES_NO_CANCEL_OPTION, javax.swing.JOptionPane.WARNING_MESSAGE, + LabelTranslatorSingleton.getInstance().translate("All your current settings and accounts will be deleted after import. (It is recommended to export your current settings before importing). \n\nDo you want to continue?"), + LabelTranslatorSingleton.getInstance().translate("IMPORT SETTINGS"), YES_NO_CANCEL_OPTION, javax.swing.JOptionPane.WARNING_MESSAGE, null, options, options[0]); @@ -1830,7 +1892,7 @@ public final class SettingsDialog extends javax.swing.JDialog { _main_panel.loadUserSettings(); - JOptionPane.showMessageDialog(this, "Settings successfully imported!", "Settings imported", JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(this, LabelTranslatorSingleton.getInstance().translate("Settings successfully imported!"), LabelTranslatorSingleton.getInstance().translate("Settings imported"), JOptionPane.INFORMATION_MESSAGE); _settings_ok = true; @@ -1851,11 +1913,11 @@ public final class SettingsDialog extends javax.swing.JDialog { private void export_settings_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_export_settings_buttonActionPerformed Object[] options = {"No", - "Yes"}; + LabelTranslatorSingleton.getInstance().translate("Yes")}; int n = showOptionDialog(this, - "Only SAVED settings and accounts will be exported. (If you are unsure, it is better to save your current settings and then export them).\n\nDo you want to continue?", - "EXPORT SETTINGS", YES_NO_CANCEL_OPTION, javax.swing.JOptionPane.WARNING_MESSAGE, + LabelTranslatorSingleton.getInstance().translate("Only SAVED settings and accounts will be exported. (If you are unsure, it is better to save your current settings and then export them).\n\nDo you want to continue?"), + LabelTranslatorSingleton.getInstance().translate("EXPORT SETTINGS"), YES_NO_CANCEL_OPTION, javax.swing.JOptionPane.WARNING_MESSAGE, null, options, options[0]); @@ -1889,7 +1951,7 @@ public final class SettingsDialog extends javax.swing.JDialog { oos.writeObject(settings); - JOptionPane.showMessageDialog(this, "Settings successfully exported!", "Settings exported", JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(this, LabelTranslatorSingleton.getInstance().translate("Settings successfully exported!"), LabelTranslatorSingleton.getInstance().translate("Settings exported"), JOptionPane.INFORMATION_MESSAGE); setVisible(false); @@ -2047,11 +2109,11 @@ public final class SettingsDialog extends javax.swing.JDialog { private void delete_all_accounts_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_delete_all_accounts_buttonActionPerformed Object[] options = {"No", - "Yes"}; + LabelTranslatorSingleton.getInstance().translate("Yes")}; int n = showOptionDialog(this, - "Master password will be reset and all your accounts will be removed. (THIS CAN'T BE UNDONE)\n\nDo you want to continue?", - "RESET ACCOUNTS", YES_NO_CANCEL_OPTION, javax.swing.JOptionPane.WARNING_MESSAGE, + LabelTranslatorSingleton.getInstance().translate("Master password will be reset and all your accounts will be removed. (THIS CAN'T BE UNDONE)\n\nDo you want to continue?"), + LabelTranslatorSingleton.getInstance().translate("RESET ACCOUNTS"), YES_NO_CANCEL_OPTION, javax.swing.JOptionPane.WARNING_MESSAGE, null, options, options[0]); @@ -2117,7 +2179,7 @@ public final class SettingsDialog extends javax.swing.JDialog { _main_panel.getElc_accounts().clear(); - JOptionPane.showMessageDialog(this, "Accounts successfully reset!", "Accounts reset", JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(this, LabelTranslatorSingleton.getInstance().translate("Accounts successfully reset!"), LabelTranslatorSingleton.getInstance().translate("Accounts reset"), JOptionPane.INFORMATION_MESSAGE); setVisible(false); @@ -2428,11 +2490,11 @@ public final class SettingsDialog extends javax.swing.JDialog { // TODO add your handling code here: Object[] options = {"No", - "Yes"}; + LabelTranslatorSingleton.getInstance().translate("Yes")}; int n = showOptionDialog(this, - "ALL YOUR SETTINGS, ACCOUNTS AND TRANSFERENCES WILL BE REMOVED. (THIS CAN'T BE UNDONE)\n\nDo you want to continue?", - "RESET MEGABASTERD", YES_NO_CANCEL_OPTION, javax.swing.JOptionPane.WARNING_MESSAGE, + LabelTranslatorSingleton.getInstance().translate("ALL YOUR SETTINGS, ACCOUNTS AND TRANSFERENCES WILL BE REMOVED. (THIS CAN'T BE UNDONE)\n\nDo you want to continue?"), + LabelTranslatorSingleton.getInstance().translate("RESET MEGABASTERD"), YES_NO_CANCEL_OPTION, javax.swing.JOptionPane.WARNING_MESSAGE, null, options, options[0]); @@ -2469,6 +2531,7 @@ public final class SettingsDialog extends javax.swing.JDialog { private javax.swing.JButton import_settings_button; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; private javax.swing.JPanel jPanel3; private javax.swing.JProgressBar jProgressBar1; private javax.swing.JSeparator jSeparator1; @@ -2483,6 +2546,7 @@ public final class SettingsDialog extends javax.swing.JDialog { private javax.swing.JSeparator jSeparator8; private javax.swing.JSeparator jSeparator9; private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JComboBox language_combo; private javax.swing.JCheckBox limit_download_speed_checkbox; private javax.swing.JCheckBox limit_upload_speed_checkbox; private javax.swing.JLabel max_down_speed_label; diff --git a/src/main/java/com/tonikelope/megabasterd/StreamerDialog.java b/src/main/java/com/tonikelope/megabasterd/StreamerDialog.java index c55ea675c..f77d20622 100644 --- a/src/main/java/com/tonikelope/megabasterd/StreamerDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/StreamerDialog.java @@ -52,6 +52,8 @@ public final class StreamerDialog extends javax.swing.JDialog implements Clipboa updateFonts(this.getRootPane(), DEFAULT_FONT, _main_panel.getZoom_factor()); + translateLabels(getRootPane()); + _clipboardspy = clipboardspy; _selected_item = null; @@ -247,7 +249,7 @@ public final class StreamerDialog extends javax.swing.JDialog implements Clipboa if (error) { - JOptionPane.showMessageDialog(tthis, "Please, paste a Mega/MegaCrypter/ELC link!", "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(tthis, LabelTranslatorSingleton.getInstance().translate("Please, paste a Mega/MegaCrypter/ELC link!"), "Error", JOptionPane.ERROR_MESSAGE); original_link_textfield.setText(""); diff --git a/src/main/java/com/tonikelope/megabasterd/UploadView.java b/src/main/java/com/tonikelope/megabasterd/UploadView.java index 737056ffd..2e32cd693 100644 --- a/src/main/java/com/tonikelope/megabasterd/UploadView.java +++ b/src/main/java/com/tonikelope/megabasterd/UploadView.java @@ -84,6 +84,8 @@ public final class UploadView extends javax.swing.JPanel implements Transference updateFonts(this, DEFAULT_FONT, upload.getMain_panel().getZoom_factor()); + translateLabels(getRootPane()); + _upload = upload; slots_spinner.setModel(new SpinnerNumberModel(_upload.getMain_panel().getDefault_slots_up(), MIN_WORKERS, MAX_WORKERS, 1)); diff --git a/src/main/java/com/tonikelope/megabasterd/WarningExitMessage.java b/src/main/java/com/tonikelope/megabasterd/WarningExitMessage.java index c5c80e911..c5c4a30cc 100644 --- a/src/main/java/com/tonikelope/megabasterd/WarningExitMessage.java +++ b/src/main/java/com/tonikelope/megabasterd/WarningExitMessage.java @@ -17,6 +17,7 @@ package com.tonikelope.megabasterd; import static com.tonikelope.megabasterd.MainPanel.DEFAULT_FONT; +import static com.tonikelope.megabasterd.MiscTools.translateLabels; import static com.tonikelope.megabasterd.MiscTools.updateFonts; /** @@ -37,6 +38,8 @@ public class WarningExitMessage extends javax.swing.JDialog { updateFonts(this.getRootPane(), DEFAULT_FONT, main_panel.getZoom_factor()); + translateLabels(getRootPane()); + _main_panel = main_panel; _restart = restart;