Merge pull request #140 from WiredSpast/internationalization
Internationalization
@ -3,10 +3,8 @@ package gearth;
|
|||||||
import gearth.misc.AdminValidator;
|
import gearth.misc.AdminValidator;
|
||||||
import gearth.misc.Cacher;
|
import gearth.misc.Cacher;
|
||||||
import gearth.misc.UpdateChecker;
|
import gearth.misc.UpdateChecker;
|
||||||
import gearth.misc.listenerpattern.Observable;
|
|
||||||
import gearth.misc.listenerpattern.ObservableObject;
|
import gearth.misc.listenerpattern.ObservableObject;
|
||||||
import gearth.ui.GEarthController;
|
import gearth.ui.GEarthController;
|
||||||
import gearth.ui.subforms.logger.loggerdisplays.PacketLogger;
|
|
||||||
import gearth.ui.themes.Theme;
|
import gearth.ui.themes.Theme;
|
||||||
import gearth.ui.themes.ThemeFactory;
|
import gearth.ui.themes.ThemeFactory;
|
||||||
import gearth.ui.titlebar.TitleBarConfig;
|
import gearth.ui.titlebar.TitleBarConfig;
|
||||||
@ -20,9 +18,6 @@ import javafx.scene.control.Alert;
|
|||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import javafx.stage.StageStyle;
|
import javafx.stage.StageStyle;
|
||||||
import sun.misc.Cache;
|
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
public class GEarth extends Application {
|
public class GEarth extends Application {
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package gearth.misc;
|
package gearth.misc;
|
||||||
|
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.layout.Region;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
@ -47,7 +47,7 @@ public class AdminValidator {
|
|||||||
if (!AdminValidator.isAdmin()) {
|
if (!AdminValidator.isAdmin()) {
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
Alert alert = new Alert(Alert.AlertType.WARNING, "", ButtonType.OK);
|
Alert alert = new Alert(Alert.AlertType.WARNING, "", ButtonType.OK);
|
||||||
alert.getDialogPane().setContent(new Label("G-Earth needs admin privileges in order to work on Flash,\nplease restart G-Earth with admin permissions unless\nyou're using Unity"));
|
alert.getDialogPane().setContent(new Label(LanguageBundle.get("alert.adminvalidator.content").replaceAll("\\\\n", System.lineSeparator())));
|
||||||
try {
|
try {
|
||||||
TitleBarController.create(alert).showAlert();
|
TitleBarController.create(alert).showAlert();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -2,6 +2,7 @@ package gearth.misc;
|
|||||||
|
|
||||||
import gearth.GEarth;
|
import gearth.GEarth;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
@ -37,10 +38,10 @@ public class UpdateChecker {
|
|||||||
String body = (String)object.get("body");
|
String body = (String)object.get("body");
|
||||||
boolean isForcedUpdate = body.contains("(!)");
|
boolean isForcedUpdate = body.contains("(!)");
|
||||||
|
|
||||||
Alert alert = new Alert(isForcedUpdate ? Alert.AlertType.ERROR : Alert.AlertType.INFORMATION, "G-Earth is outdated!", ButtonType.OK);
|
Alert alert = new Alert(isForcedUpdate ? Alert.AlertType.ERROR : Alert.AlertType.INFORMATION, LanguageBundle.get("alert.outdated.title"), ButtonType.OK);
|
||||||
|
|
||||||
FlowPane fp = new FlowPane();
|
FlowPane fp = new FlowPane();
|
||||||
Label lbl = new Label("A new version of G-Earth has been found ("+gitv+")" + System.lineSeparator()+ System.lineSeparator() + "Update to the latest version:");
|
Label lbl = new Label(LanguageBundle.get("alert.outdated.content.newversion") + " ("+gitv+")" + System.lineSeparator()+ System.lineSeparator() + LanguageBundle.get("alert.outdated.content.update") + ":");
|
||||||
Hyperlink link = new Hyperlink("https://github.com/sirjonasxx/G-Earth/releases");
|
Hyperlink link = new Hyperlink("https://github.com/sirjonasxx/G-Earth/releases");
|
||||||
fp.getChildren().addAll( lbl, link);
|
fp.getChildren().addAll( lbl, link);
|
||||||
link.setOnAction(event -> {
|
link.setOnAction(event -> {
|
||||||
@ -51,7 +52,7 @@ public class UpdateChecker {
|
|||||||
|
|
||||||
|
|
||||||
WebView webView = new WebView();
|
WebView webView = new WebView();
|
||||||
webView.getEngine().loadContent("<html>A new version of G-Earth has been found ("+gitv+")<br><br>Update to the latest version:<br><a href=\"https://github.com/sirjonasxx/G-Earth/releases\">https://github.com/sirjonasxx/G-Earth/releases</a></html>");
|
webView.getEngine().loadContent(String.format("<html>%s (%s)<br><br>%s:<br><a href=\"https://github.com/sirjonasxx/G-Earth/releases\">https://github.com/sirjonasxx/G-Earth/releases</a></html>", LanguageBundle.get("alert.outdated.content.newversion"), gitv, LanguageBundle.get("alert.outdated.content.update")));
|
||||||
webView.setPrefSize(500, 200);
|
webView.setPrefSize(500, 200);
|
||||||
|
|
||||||
alert.setResizable(false);
|
alert.setResizable(false);
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package gearth.protocol.connection.proxy;
|
package gearth.protocol.connection.proxy;
|
||||||
|
|
||||||
import gearth.GEarth;
|
|
||||||
import gearth.misc.Cacher;
|
import gearth.misc.Cacher;
|
||||||
import gearth.misc.OSValidator;
|
import gearth.misc.OSValidator;
|
||||||
import gearth.protocol.HConnection;
|
import gearth.protocol.HConnection;
|
||||||
@ -10,6 +9,7 @@ import gearth.protocol.connection.proxy.flash.NormalFlashProxyProvider;
|
|||||||
import gearth.protocol.connection.proxy.flash.unix.LinuxRawIpFlashProxyProvider;
|
import gearth.protocol.connection.proxy.flash.unix.LinuxRawIpFlashProxyProvider;
|
||||||
import gearth.protocol.connection.proxy.flash.windows.WindowsRawIpFlashProxyProvider;
|
import gearth.protocol.connection.proxy.flash.windows.WindowsRawIpFlashProxyProvider;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
@ -108,9 +108,7 @@ public class ProxyProviderFactory {
|
|||||||
|
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
Alert alert = new Alert(Alert.AlertType.ERROR, "", ButtonType.OK);
|
Alert alert = new Alert(Alert.AlertType.ERROR, "", ButtonType.OK);
|
||||||
alert.getDialogPane().getChildren().add(new Label("G-Earth is already connected to this hotel.\n" +
|
alert.getDialogPane().getChildren().add(new Label(LanguageBundle.get("alert.alreadyconnected.content").replaceAll("\\\\n", System.lineSeparator())));
|
||||||
"Due to current limitations you can only connect one session per hotel to G-Earth in Raw IP mode on Windows.\n\n" +
|
|
||||||
"You can bypass this by using a SOCKS proxy [Extra -> Advanced -> SOCKS]"));
|
|
||||||
alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
|
alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
|
||||||
alert.setResizable(false);
|
alert.setResizable(false);
|
||||||
try {
|
try {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package gearth.protocol.connection.proxy.flash;
|
package gearth.protocol.connection.proxy.flash;
|
||||||
|
|
||||||
import gearth.GEarth;
|
|
||||||
import gearth.protocol.HConnection;
|
import gearth.protocol.HConnection;
|
||||||
import gearth.protocol.connection.HProxy;
|
import gearth.protocol.connection.HProxy;
|
||||||
import gearth.protocol.connection.HProxySetter;
|
import gearth.protocol.connection.HProxySetter;
|
||||||
@ -12,6 +11,7 @@ import gearth.protocol.packethandler.flash.IncomingFlashPacketHandler;
|
|||||||
import gearth.protocol.packethandler.flash.OutgoingFlashPacketHandler;
|
import gearth.protocol.packethandler.flash.OutgoingFlashPacketHandler;
|
||||||
import gearth.protocol.packethandler.flash.FlashPacketHandler;
|
import gearth.protocol.packethandler.flash.FlashPacketHandler;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
@ -126,7 +126,7 @@ public abstract class FlashProxyProvider implements ProxyProvider {
|
|||||||
protected void showInvalidConnectionError() {
|
protected void showInvalidConnectionError() {
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
Alert alert = new Alert(Alert.AlertType.ERROR, "", ButtonType.OK);
|
Alert alert = new Alert(Alert.AlertType.ERROR, "", ButtonType.OK);
|
||||||
alert.getDialogPane().getChildren().add(new Label("You entered invalid connection information, G-Earth could not connect"));
|
alert.getDialogPane().getChildren().add(new Label(LanguageBundle.get("alert.invalidconnection.content")));
|
||||||
alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
|
alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
|
||||||
alert.setResizable(false);
|
alert.setResizable(false);
|
||||||
try {
|
try {
|
||||||
|
@ -5,6 +5,7 @@ import gearth.protocol.connection.proxy.nitro.NitroConstants;
|
|||||||
import gearth.protocol.connection.proxy.nitro.os.NitroOsFunctions;
|
import gearth.protocol.connection.proxy.nitro.os.NitroOsFunctions;
|
||||||
import gearth.protocol.connection.proxy.nitro.os.NitroOsFunctionsFactory;
|
import gearth.protocol.connection.proxy.nitro.os.NitroOsFunctionsFactory;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
@ -50,14 +51,12 @@ public class NitroHttpProxy {
|
|||||||
|
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.WARNING, ADMIN_WARNING_KEY,
|
Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.WARNING, ADMIN_WARNING_KEY,
|
||||||
"Root certificate installation", null,
|
LanguageBundle.get("alert.rootcertificate.title"), null,
|
||||||
"", "Remember my choice",
|
"", LanguageBundle.get("alert.rootcertificate.remember"),
|
||||||
ButtonType.YES, ButtonType.NO
|
ButtonType.YES, ButtonType.NO
|
||||||
);
|
);
|
||||||
|
|
||||||
alert.getDialogPane().setContent(new Label("G-Earth detected that you do not have the root certificate authority installed.\n" +
|
alert.getDialogPane().setContent(new Label(LanguageBundle.get("alert.rootcertificate.content").replaceAll("\\\\n", System.lineSeparator())));
|
||||||
"This is required for Nitro to work, do you want to continue?\n" +
|
|
||||||
"G-Earth will ask you for Administrator permission if you do so."));
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
shouldInstall.set(TitleBarController.create(alert).showAlertAndWait()
|
shouldInstall.set(TitleBarController.create(alert).showAlertAndWait()
|
||||||
|
@ -10,6 +10,7 @@ import gearth.protocol.packethandler.PayloadBuffer;
|
|||||||
import gearth.protocol.packethandler.flash.BufferChangeListener;
|
import gearth.protocol.packethandler.flash.BufferChangeListener;
|
||||||
import gearth.protocol.packethandler.flash.FlashPacketHandler;
|
import gearth.protocol.packethandler.flash.FlashPacketHandler;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
@ -72,10 +73,10 @@ public class Rc4Obtainer {
|
|||||||
System.err.println("COULD NOT FIND RC4 TABLE");
|
System.err.println("COULD NOT FIND RC4 TABLE");
|
||||||
|
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
Alert alert = new Alert(Alert.AlertType.WARNING, "Something went wrong!", ButtonType.OK);
|
Alert alert = new Alert(Alert.AlertType.WARNING, LanguageBundle.get("alert.somethingwentwrong.title"), ButtonType.OK);
|
||||||
|
|
||||||
FlowPane fp = new FlowPane();
|
FlowPane fp = new FlowPane();
|
||||||
Label lbl = new Label("G-Earth has experienced an issue" + System.lineSeparator() + System.lineSeparator() + "Head over to our Troubleshooting page to solve the problem:");
|
Label lbl = new Label(LanguageBundle.get("alert.somethingwentwrong.content").replaceAll("\\\\n", System.lineSeparator()));
|
||||||
Hyperlink link = new Hyperlink("https://github.com/sirjonasxx/G-Earth/wiki/Troubleshooting");
|
Hyperlink link = new Hyperlink("https://github.com/sirjonasxx/G-Earth/wiki/Troubleshooting");
|
||||||
fp.getChildren().addAll(lbl, link);
|
fp.getChildren().addAll(lbl, link);
|
||||||
link.setOnAction(event -> {
|
link.setOnAction(event -> {
|
||||||
|
@ -3,6 +3,7 @@ package gearth.services.extension_handler.extensions.implementations.network.aut
|
|||||||
import gearth.misc.ConfirmationDialog;
|
import gearth.misc.ConfirmationDialog;
|
||||||
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtension;
|
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtension;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
@ -68,13 +69,12 @@ public class Authenticator {
|
|||||||
boolean[] done = {false};
|
boolean[] done = {false};
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.WARNING, connectExtensionKey
|
Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.WARNING, connectExtensionKey
|
||||||
,"Confirmation Dialog", null,
|
, LanguageBundle.get("alert.confirmation.windowtitle"), null,
|
||||||
"", "Remember my choice",
|
"", LanguageBundle.get("alert.confirmation.button.remember"),
|
||||||
ButtonType.YES, ButtonType.NO
|
ButtonType.YES, ButtonType.NO
|
||||||
);
|
);
|
||||||
|
|
||||||
alert.getDialogPane().setContent(new Label("Extension \""+extension.getTitle()+"\" tries to connect but isn't known to G-Earth,\n" +
|
alert.getDialogPane().setContent(new Label(String.format(LanguageBundle.get("alert.extconnection.content"), extension.getTitle()).replaceAll("\\\\n", System.lineSeparator())));
|
||||||
"accept this connection?"));
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!(TitleBarController.create(alert).showAlertAndWait()
|
if (!(TitleBarController.create(alert).showAlertAndWait()
|
||||||
|
@ -3,6 +3,7 @@ package gearth.services.g_python;
|
|||||||
import gearth.GEarth;
|
import gearth.GEarth;
|
||||||
import gearth.ui.subforms.extra.ExtraController;
|
import gearth.ui.subforms.extra.ExtraController;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
@ -170,13 +171,11 @@ public class GPythonShell {
|
|||||||
|
|
||||||
private void showError() {
|
private void showError() {
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
Alert alert = new Alert(Alert.AlertType.ERROR, "G-Python error", ButtonType.OK);
|
Alert alert = new Alert(Alert.AlertType.ERROR, LanguageBundle.get("alert.gpythonerror.title"), ButtonType.OK);
|
||||||
alert.setTitle("G-Python error");
|
alert.setTitle(LanguageBundle.get("alert.gpythonerror.title"));
|
||||||
|
|
||||||
FlowPane fp = new FlowPane();
|
FlowPane fp = new FlowPane();
|
||||||
Label lbl = new Label("Something went wrong launching the G-Python shell," +
|
Label lbl = new Label(LanguageBundle.get("alert.gpythonerror.content").replaceAll("\\\\n", System.lineSeparator()));
|
||||||
System.lineSeparator() + "are you sure you followed the installation guide correctly?" +
|
|
||||||
System.lineSeparator() + System.lineSeparator() + "More information here:");
|
|
||||||
Hyperlink link = new Hyperlink(ExtraController.INFO_URL_GPYTHON);
|
Hyperlink link = new Hyperlink(ExtraController.INFO_URL_GPYTHON);
|
||||||
fp.getChildren().addAll(lbl, link);
|
fp.getChildren().addAll(lbl, link);
|
||||||
link.setOnAction(event -> {
|
link.setOnAction(event -> {
|
||||||
|
@ -24,6 +24,7 @@ import java.util.*;
|
|||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class GExtensionStoreController implements Initializable {
|
public class GExtensionStoreController implements Initializable {
|
||||||
|
private static GExtensionStoreController instance;
|
||||||
|
|
||||||
private GExtensionStore extensionStore = null;
|
private GExtensionStore extensionStore = null;
|
||||||
|
|
||||||
@ -38,6 +39,8 @@ public class GExtensionStoreController implements Initializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL location, ResourceBundle resources) {
|
public void initialize(URL location, ResourceBundle resources) {
|
||||||
|
instance = this;
|
||||||
|
|
||||||
webView = new WebView();
|
webView = new WebView();
|
||||||
borderPane.setCenter(webView);
|
borderPane.setCenter(webView);
|
||||||
|
|
||||||
@ -107,6 +110,7 @@ public class GExtensionStoreController implements Initializable {
|
|||||||
});
|
});
|
||||||
|
|
||||||
webView.getEngine().load(GExtensionStoreController.class.getResource("webview/index.html").toString());
|
webView.getEngine().load(GExtensionStoreController.class.getResource("webview/index.html").toString());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -237,4 +241,8 @@ public class GExtensionStoreController implements Initializable {
|
|||||||
public String getContentItemsContainer() {
|
public String getContentItemsContainer() {
|
||||||
return contentItemsContainer;
|
return contentItemsContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void reloadPage() {
|
||||||
|
instance.webView.getEngine().reload();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package gearth.services.internal_extensions.extensionstore.application;
|
package gearth.services.internal_extensions.extensionstore.application;
|
||||||
|
|
||||||
|
import gearth.GEarth;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -43,19 +45,19 @@ public class WebUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String elapsedTime(long time) {
|
public static String elapsedTime(long time) {
|
||||||
if (time < 60) return time + (time == 1 ? " second" : " seconds");
|
if (time < 60) return time + " " + LanguageBundle.get("ext.store.elapsedtime.second." + (time == 1 ? "single": "multiple"));
|
||||||
time = time/60;
|
time = time/60;
|
||||||
if (time < 60) return time + (time == 1 ? " minute" : " minutes");
|
if (time < 60) return time + " " + LanguageBundle.get("ext.store.elapsedtime.minute." + (time == 1 ? "single": "multiple"));
|
||||||
time = time/60;
|
time = time/60;
|
||||||
if (time < 24) return time + (time == 1 ? " hour" : " hours");
|
if (time < 24) return time + " " + LanguageBundle.get("ext.store.elapsedtime.hour." + (time == 1 ? "single": "multiple"));
|
||||||
long days = time/24;
|
long days = time/24;
|
||||||
if (days < 7) return days + (days == 1 ? " day" : " days");
|
if (days < 7) return days + " " + LanguageBundle.get("ext.store.elapsedtime.day." + (days == 1 ? "single": "multiple"));
|
||||||
long weeks = days/7;
|
long weeks = days/7;
|
||||||
if (weeks < 6) return weeks + (weeks == 1 ? " week" : " weeks");
|
if (weeks < 6) return weeks + " " + LanguageBundle.get("ext.store.elapsedtime.week." + (weeks == 1 ? "single": "multiple"));
|
||||||
long months = days/31;
|
long months = days/31;
|
||||||
if (months < 12) return months + (months == 1 ? " month" : " months");
|
if (months < 12) return months + " " + LanguageBundle.get("ext.store.elapsedtime.month." + (months == 1 ? "single": "multiple"));
|
||||||
long years = days/365;
|
long years = days/365;
|
||||||
return years + (years == 1 ? " year" : " years");
|
return years + " " + LanguageBundle.get("ext.store.elapsedtime.year." + (years == 1 ? "single": "multiple"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String escapeMessage(String text) {
|
public static String escapeMessage(String text) {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package gearth.services.internal_extensions.extensionstore.application.entities;
|
package gearth.services.internal_extensions.extensionstore.application.entities;
|
||||||
|
|
||||||
|
import gearth.GEarth;
|
||||||
import gearth.protocol.HMessage;
|
import gearth.protocol.HMessage;
|
||||||
import gearth.protocol.HPacket;
|
import gearth.protocol.HPacket;
|
||||||
import gearth.services.internal_extensions.extensionstore.GExtensionStore;
|
import gearth.services.internal_extensions.extensionstore.GExtensionStore;
|
||||||
@ -9,6 +10,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.e
|
|||||||
import gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews.CategorizedOverview;
|
import gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews.CategorizedOverview;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import netscape.javascript.JSObject;
|
import netscape.javascript.JSObject;
|
||||||
|
|
||||||
public class StoreExtensionItem implements ContentItem {
|
public class StoreExtensionItem implements ContentItem {
|
||||||
@ -56,12 +58,12 @@ public class StoreExtensionItem implements ContentItem {
|
|||||||
|
|
||||||
.append("<div class=\"overview_item_info\">")
|
.append("<div class=\"overview_item_info\">")
|
||||||
.append("<div onclick=\"").append(id).append(".onClick()\" class=\"oii_name clickable\">").append(WebUtils.escapeMessage(storeExtension.getTitle())).append("</div>")
|
.append("<div onclick=\"").append(id).append(".onClick()\" class=\"oii_name clickable\">").append(WebUtils.escapeMessage(storeExtension.getTitle())).append("</div>")
|
||||||
.append("<div class=\"oii_desc\">By ").append(storeExtension.getAuthors().get(0).getName()).append(", last updated ").append(WebUtils.elapsedSince(storeExtension.getUpdateDate())).append(" ago</div>")
|
.append("<div class=\"oii_desc\">").append(String.format(LanguageBundle.get("ext.store.extension.madeby"), storeExtension.getAuthors().get(0).getName())).append(", ").append(String.format(LanguageBundle.get("ext.store.extension.lastupdated"), WebUtils.elapsedSince(storeExtension.getUpdateDate()))).append("</div>")
|
||||||
.append("</div>")
|
.append("</div>")
|
||||||
|
|
||||||
.append("<div onclick=\"").append(id).append(".onClick()\" class=\"overview_item_msgs clickable\">")
|
.append("<div onclick=\"").append(id).append(".onClick()\" class=\"overview_item_msgs clickable\">")
|
||||||
.append("<div class=\"oim_top\">").append("Version: ").append(displayVersion()).append("</div>")
|
.append("<div class=\"oim_top\">").append(LanguageBundle.get("ext.store.extension.version")).append(": ").append(displayVersion()).append("</div>")
|
||||||
.append("<div class=\"oim_bottom\">").append("Rating: ").append(storeExtension.getRating()).append("</div>")
|
.append("<div class=\"oim_bottom\">").append(LanguageBundle.get("ext.store.extension.rating")).append(": ").append(storeExtension.getRating()).append("</div>")
|
||||||
// .append("<div class=\"oim_bottom\">").append(storeExtension.getFramework().getFramework().getName().replace("Native", "")).append(" </div>")
|
// .append("<div class=\"oim_bottom\">").append(storeExtension.getFramework().getFramework().getName().replace("Native", "")).append(" </div>")
|
||||||
.append("</div>")
|
.append("</div>")
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.q
|
|||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
|
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import netscape.javascript.JSObject;
|
import netscape.javascript.JSObject;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -58,7 +59,7 @@ public class CategoryItem implements ContentItem {
|
|||||||
.append("</div>")
|
.append("</div>")
|
||||||
|
|
||||||
.append("<div onclick=\"").append(id).append(".onClick()\" class=\"overview_item_msgs clickable\">")
|
.append("<div onclick=\"").append(id).append(".onClick()\" class=\"overview_item_msgs clickable\">")
|
||||||
.append("<div class=\"oim_top\">").append(releasesCount).append(" releases").append("</div>")
|
.append("<div class=\"oim_top\">").append(releasesCount).append(" ").append(LanguageBundle.get("ext.store.extension.author.releases")).append("</div>")
|
||||||
// .append("<div class=\"oim_bottom\">").append(storeExtension.getFramework().getFramework().getName().replace("Native", "")).append(" </div>")
|
// .append("<div class=\"oim_bottom\">").append(storeExtension.getFramework().getFramework().getName().replace("Native", "")).append(" </div>")
|
||||||
.append("</div>")
|
.append("</div>")
|
||||||
|
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package gearth.services.internal_extensions.extensionstore.application.entities.categories;
|
package gearth.services.internal_extensions.extensionstore.application.entities.categories;
|
||||||
|
|
||||||
|
import gearth.GEarth;
|
||||||
import gearth.services.internal_extensions.extensionstore.GExtensionStore;
|
import gearth.services.internal_extensions.extensionstore.GExtensionStore;
|
||||||
import gearth.services.internal_extensions.extensionstore.application.entities.ContentItem;
|
import gearth.services.internal_extensions.extensionstore.application.entities.ContentItem;
|
||||||
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
|
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
|
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -57,17 +59,17 @@ public class CategoryOverview extends HOverview {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String title() {
|
public String title() {
|
||||||
return "Categories";
|
return LanguageBundle.get("ext.store.categories.title");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String description() {
|
public String description() {
|
||||||
return "Explore the different kinds of extensions G-Earth has to offer";
|
return LanguageBundle.get("ext.store.categories.description");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String contentTitle() {
|
public String contentTitle() {
|
||||||
return "Categories";
|
return LanguageBundle.get("ext.store.categories.contenttitle");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.H
|
|||||||
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
|
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
||||||
import gearth.services.internal_extensions.extensionstore.tools.EncodingUtil;
|
import gearth.services.internal_extensions.extensionstore.tools.EncodingUtil;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import netscape.javascript.JSObject;
|
import netscape.javascript.JSObject;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
@ -45,32 +46,32 @@ public class StoreExtensionDetailsItem implements ContentItem {
|
|||||||
|
|
||||||
contentBuilder
|
contentBuilder
|
||||||
.append(String.format("*%s*", storeExtension.getTitle())).append(" - v").append(storeExtension.getVersion()).append("\n\n")
|
.append(String.format("*%s*", storeExtension.getTitle())).append(" - v").append(storeExtension.getVersion()).append("\n\n")
|
||||||
.append("*Description*\n").append(descriptionQuoted).append("\n \n")
|
.append("*").append(LanguageBundle.get("ext.store.extension.details.description")).append(":*\n").append(descriptionQuoted).append("\n \n")
|
||||||
.append("*Author(s):* ").append(storeExtension.getAuthors().stream().map(StoreExtension.Author::getName).collect(Collectors.joining(", "))).append("\n\n")
|
.append("*").append(LanguageBundle.get("ext.store.extension.details.authors")).append(":* ").append(storeExtension.getAuthors().stream().map(StoreExtension.Author::getName).collect(Collectors.joining(", "))).append("\n\n")
|
||||||
.append("*Categories:* ").append(storeExtension.getCategories().stream().map(ExtCategory::getName).collect(Collectors.joining(", "))).append("\n\n");
|
.append("*").append(LanguageBundle.get("ext.store.extension.details.categories")).append(":* ").append(storeExtension.getCategories().stream().map(ExtCategory::getName).collect(Collectors.joining(", "))).append("\n\n");
|
||||||
|
|
||||||
contentBuilder.append("*Technical information*").append("\n");
|
contentBuilder.append("*").append(LanguageBundle.get("ext.store.extension.details.technical_information")).append("*").append("\n");
|
||||||
|
|
||||||
if(storeExtension.getReleases() != null)
|
if(storeExtension.getReleases() != null)
|
||||||
contentBuilder.append("> Releases: --url:Click Here-").append(storeExtension.getReleases()).append("\n");
|
contentBuilder.append("> ").append(LanguageBundle.get("ext.store.extension.details.releases")).append(": --url:").append(LanguageBundle.get("ext.store.extension.details.click_here")).append("-").append(storeExtension.getReleases()).append("\n");
|
||||||
|
|
||||||
contentBuilder.append("> Language: ").append(storeExtension.getLanguage()).append("\n")
|
contentBuilder.append("> ").append(LanguageBundle.get("ext.store.extension.details.language")).append(": ").append(storeExtension.getLanguage()).append("\n")
|
||||||
.append("> Source: --url:Click Here-").append(storeExtension.getSource()).append("\n")
|
.append("> ").append(LanguageBundle.get("ext.store.extension.details.source")).append(": --url:").append(LanguageBundle.get("ext.store.extension.details.click_here")).append("-").append(storeExtension.getSource()).append("\n")
|
||||||
.append("> Framework: ").append(storeExtension.getFramework().getFramework().getName()).append(" - v").append(storeExtension.getFramework().getVersion()).append("\n")
|
.append("> ").append(LanguageBundle.get("ext.store.extension.details.framework")).append(": ").append(storeExtension.getFramework().getFramework().getName()).append(" - v").append(storeExtension.getFramework().getVersion()).append("\n")
|
||||||
.append("> Systems: ").append(String.join(", ", storeExtension.getCompatibility().getSystems())).append("\n \n");
|
.append("> ").append(LanguageBundle.get("ext.store.extension.details.systems")).append(": ").append(String.join(", ", storeExtension.getCompatibility().getSystems())).append("\n \n");
|
||||||
|
|
||||||
contentBuilder.append("*Compatible clients:* ").append(String.join(", ", storeExtension.getCompatibility().getClients())).append("\n\n");
|
contentBuilder.append("*").append(LanguageBundle.get("ext.store.extension.details.clients")).append(":* ").append(String.join(", ", storeExtension.getCompatibility().getClients())).append("\n\n");
|
||||||
|
|
||||||
if (storeExtension.getFramework().getFramework().isInstallationRequired()) {
|
if (storeExtension.getFramework().getFramework().isInstallationRequired()) {
|
||||||
contentBuilder.append("Warning: the framework requires --url:additional installations-")
|
contentBuilder.append(LanguageBundle.get("ext.store.extension.warning.requirement"))
|
||||||
.append(storeExtension.getFramework().getFramework().getInstallationInstructions()).append(" !\n\n");
|
.append(storeExtension.getFramework().getFramework().getInstallationInstructions()).append(" !\n\n");
|
||||||
}
|
}
|
||||||
if (!storeExtension.isStable()) {
|
if (!storeExtension.isStable()) {
|
||||||
contentBuilder.append("Warning: this extension has been marked unstable!\n\n");
|
contentBuilder.append(LanguageBundle.get("ext.store.extension.warning.unstable")).append("\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
contentBuilder.append("--startdiv--")
|
contentBuilder.append("--startdiv--")
|
||||||
.append("\n*Screenshot: *").append("\n")
|
.append("\n*").append(LanguageBundle.get("ext.store.extension.details.screenshot")).append(": *").append("\n")
|
||||||
.append("--img:").append(gExtensionStore.getRepository().getResourceUrl("store", "extensions", storeExtension.getTitle(), "screenshot.png"))
|
.append("--img:").append(gExtensionStore.getRepository().getResourceUrl("store", "extensions", storeExtension.getTitle(), "screenshot.png"))
|
||||||
.append(" --enddiv--");
|
.append(" --enddiv--");
|
||||||
|
|
||||||
@ -151,8 +152,8 @@ public class StoreExtensionDetailsItem implements ContentItem {
|
|||||||
.append("<div class=\"comment_body comment_open\">")
|
.append("<div class=\"comment_body comment_open\">")
|
||||||
.append("<div class=\"cb_author\">")
|
.append("<div class=\"cb_author\">")
|
||||||
.append("<div class=\"cba_name\">").append(WebUtils.escapeMessage(mainAuthor.getName())).append("</div>")
|
.append("<div class=\"cba_name\">").append(WebUtils.escapeMessage(mainAuthor.getName())).append("</div>")
|
||||||
.append("<div class=\"cba_text\">").append(mainAuthor.getReputation()).append(" reputation</div>")
|
.append("<div class=\"cba_text\">").append(mainAuthor.getReputation()).append(" ").append(LanguageBundle.get("ext.store.extension.author.reputation")).append("</div>")
|
||||||
.append("<div class=\"cba_text\">").append(mainAuthor.getExtensionsCount()).append(" releases</div>")
|
.append("<div class=\"cba_text\">").append(mainAuthor.getExtensionsCount()).append(" ").append(LanguageBundle.get("ext.store.extension.author.releases")).append("</div>")
|
||||||
.append("<div class=\"cba_look\"><img src=\"").append(avatarLook).append("\" alt=\"\"></div>") // todo look
|
.append("<div class=\"cba_look\"><img src=\"").append(avatarLook).append("\" alt=\"\"></div>") // todo look
|
||||||
.append("</div>")
|
.append("</div>")
|
||||||
.append("<div class=\"cb_content\">").append(contentsInHtml()).append("</div>")
|
.append("<div class=\"cb_content\">").append(contentsInHtml()).append("</div>")
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package gearth.services.internal_extensions.extensionstore.application.entities.extensiondetails;
|
package gearth.services.internal_extensions.extensionstore.application.entities.extensiondetails;
|
||||||
|
|
||||||
|
import gearth.GEarth;
|
||||||
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionsProducer;
|
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionsProducer;
|
||||||
import gearth.services.extension_handler.extensions.implementations.network.executer.NormalExtensionRunner;
|
import gearth.services.extension_handler.extensions.implementations.network.executer.NormalExtensionRunner;
|
||||||
import gearth.services.internal_extensions.extensionstore.GExtensionStore;
|
import gearth.services.internal_extensions.extensionstore.GExtensionStore;
|
||||||
@ -12,6 +13,7 @@ import gearth.services.internal_extensions.extensionstore.repository.models.Stor
|
|||||||
import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension;
|
import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension;
|
||||||
import gearth.services.internal_extensions.extensionstore.tools.StoreExtensionTools;
|
import gearth.services.internal_extensions.extensionstore.tools.StoreExtensionTools;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
@ -62,7 +64,7 @@ public class StoreExtensionDetailsOverview extends HOverview {
|
|||||||
public String buttonText() {
|
public String buttonText() {
|
||||||
int mode = mode();
|
int mode = mode();
|
||||||
// return mode == 2 ? "Update" : "Install";
|
// return mode == 2 ? "Update" : "Install";
|
||||||
return mode == 0 ? "Install" : (mode == 1 ? "Installed" : "Update");
|
return LanguageBundle.get("ext.store.button." + (mode == 0 ? "install" : (mode == 1 ? "installed" : "update")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -91,23 +93,23 @@ public class StoreExtensionDetailsOverview extends HOverview {
|
|||||||
|
|
||||||
private void awaitPopup(String mode) {
|
private void awaitPopup(String mode) {
|
||||||
popup(Alert.AlertType.WARNING,
|
popup(Alert.AlertType.WARNING,
|
||||||
String.format("%s extension", mode),
|
LanguageBundle.get(String.format("ext.store.extension.status.await.%s", mode)),
|
||||||
String.format("%s extension [%s]", mode, extension.getTitle()),
|
String.format("%s [%s]", LanguageBundle.get(String.format("ext.store.extension.status.await.%s", mode)), extension.getTitle()),
|
||||||
String.format("Press \"OK\" and wait while the extension is being %sed", mode.toLowerCase()));
|
LanguageBundle.get(String.format("ext.store.extension.status.await.%s.message", mode)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void successPopup(String mode) {
|
private void successPopup(String mode) {
|
||||||
popup(Alert.AlertType.INFORMATION,
|
popup(Alert.AlertType.INFORMATION,
|
||||||
String.format("%s completed", mode),
|
LanguageBundle.get(String.format("ext.store.extension.status.success.%s", mode)),
|
||||||
String.format("%s completed [%s]", mode, extension.getTitle()),
|
String.format("%s [%s]", LanguageBundle.get(String.format("ext.store.extension.status.success.%s", mode)), extension.getTitle()),
|
||||||
String.format("Extension %s completed successfully", mode.toLowerCase()));
|
LanguageBundle.get(String.format("ext.store.extension.status.success.%s.message", mode)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void errorPopup(String mode, String error) {
|
private void errorPopup(String mode, String error) {
|
||||||
popup(Alert.AlertType.ERROR,
|
popup(Alert.AlertType.ERROR,
|
||||||
String.format("%s failed", mode),
|
LanguageBundle.get(String.format("ext.store.extension.status.success.%s", mode)),
|
||||||
String.format("%s failed [%s]", mode, extension.getTitle()),
|
String.format("%s [%s]", LanguageBundle.get(String.format("ext.store.extension.status.success.%s", mode)), extension.getTitle()),
|
||||||
String.format("%s failed with the following message: %s", mode, error));
|
String.format("%s: %s", LanguageBundle.get(String.format("ext.store.extension.status.success.%s.message", mode)), error));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void popup(Alert.AlertType alertType, String title, String header, String context) {
|
private void popup(Alert.AlertType alertType, String title, String header, String context) {
|
||||||
@ -128,7 +130,7 @@ public class StoreExtensionDetailsOverview extends HOverview {
|
|||||||
int mode = mode();
|
int mode = mode();
|
||||||
if (mode == 1) return;
|
if (mode == 1) return;
|
||||||
|
|
||||||
String modeString = mode() == 0 ? "Install" : "Update";
|
String modeString = mode() == 0 ? "install" : "update";
|
||||||
HOverview selff = this;
|
HOverview selff = this;
|
||||||
|
|
||||||
StoreExtensionTools.InstallExtListener listener = new StoreExtensionTools.InstallExtListener() {
|
StoreExtensionTools.InstallExtListener listener = new StoreExtensionTools.InstallExtListener() {
|
||||||
|
@ -7,6 +7,7 @@ import gearth.services.internal_extensions.extensionstore.repository.StoreReposi
|
|||||||
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
||||||
import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension;
|
import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension;
|
||||||
import gearth.services.internal_extensions.extensionstore.tools.StoreExtensionTools;
|
import gearth.services.internal_extensions.extensionstore.tools.StoreExtensionTools;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import org.apache.maven.artifact.versioning.ComparableVersion;
|
import org.apache.maven.artifact.versioning.ComparableVersion;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
@ -30,7 +31,7 @@ public class InstalledOverview extends HOverview {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String buttonText() {
|
public String buttonText() {
|
||||||
return "Open folder";
|
return LanguageBundle.get("ext.store.overview.folder");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -75,17 +76,17 @@ public class InstalledOverview extends HOverview {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String title() {
|
public String title() {
|
||||||
return "Installed Extensions";
|
return LanguageBundle.get("ext.store.overview.title");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String description() {
|
public String description() {
|
||||||
return "Extensions that are already installed into G-Earth";
|
return LanguageBundle.get("ext.store.overview.description");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String contentTitle() {
|
public String contentTitle() {
|
||||||
return "Installed extensions";
|
return LanguageBundle.get("ext.store.overview.contenttitle");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import gearth.services.internal_extensions.extensionstore.application.WebUtils;
|
|||||||
import gearth.services.internal_extensions.extensionstore.application.entities.StoreExtensionItem;
|
import gearth.services.internal_extensions.extensionstore.application.entities.StoreExtensionItem;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
||||||
import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension;
|
import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import org.apache.maven.artifact.versioning.ComparableVersion;
|
import org.apache.maven.artifact.versioning.ComparableVersion;
|
||||||
|
|
||||||
public class StoreExtensionInstalledItem extends StoreExtensionItem {
|
public class StoreExtensionInstalledItem extends StoreExtensionItem {
|
||||||
@ -55,11 +56,11 @@ public class StoreExtensionInstalledItem extends StoreExtensionItem {
|
|||||||
|
|
||||||
.append("<div class=\"overview_item_info\">")
|
.append("<div class=\"overview_item_info\">")
|
||||||
.append("<div class=\"oii_name\">").append(WebUtils.escapeMessage(installedExtension.getName())).append("</div>")
|
.append("<div class=\"oii_name\">").append(WebUtils.escapeMessage(installedExtension.getName())).append("</div>")
|
||||||
.append("<div class=\"oii_desc\">Not found in G-ExtensionStore</div>")
|
.append("<div class=\"oii_desc\">").append(LanguageBundle.get("ext.store.extension.notinstore")).append("</div>")
|
||||||
.append("</div>")
|
.append("</div>")
|
||||||
|
|
||||||
.append("<div class=\"overview_item_msgs\">")
|
.append("<div class=\"overview_item_msgs\">")
|
||||||
.append("<div class=\"oim_top\">").append("Version: ").append(displayVersion()).append("</div>")
|
.append("<div class=\"oim_top\">").append(LanguageBundle.get("ext.store.extension.version")).append(": ").append(displayVersion()).append("</div>")
|
||||||
.append("<div class=\"oim_bottom\"></div>")
|
.append("<div class=\"oim_bottom\"></div>")
|
||||||
.append("</div>")
|
.append("</div>")
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews;
|
package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews;
|
||||||
|
|
||||||
import gearth.misc.OSValidator;
|
import gearth.misc.OSValidator;
|
||||||
import gearth.services.internal_extensions.extensionstore.application.GExtensionStoreController;
|
|
||||||
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
|
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -32,17 +32,17 @@ public class ByDateOverview extends QueriedExtensionOverview {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String title() {
|
public String title() {
|
||||||
return "New Releases";
|
return LanguageBundle.get("ext.store.search.ordering.bydate.title");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String description() {
|
public String description() {
|
||||||
return "Extensions that were recently added to the G-ExtensionStore";
|
return LanguageBundle.get("ext.store.search.ordering.bydate.description");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String contentTitle() {
|
public String contentTitle() {
|
||||||
return "New Releases";
|
return LanguageBundle.get("ext.store.search.ordering.bydate.contenttitle");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews;
|
package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews;
|
||||||
|
|
||||||
import gearth.misc.OSValidator;
|
import gearth.misc.OSValidator;
|
||||||
import gearth.services.internal_extensions.extensionstore.application.GExtensionStoreController;
|
|
||||||
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
|
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -32,17 +32,17 @@ public class ByRatingOverview extends QueriedExtensionOverview {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String title() {
|
public String title() {
|
||||||
return "Popular Extensions";
|
return LanguageBundle.get("ext.store.search.ordering.byrating.title");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String description() {
|
public String description() {
|
||||||
return "Extensions sorted by rating";
|
return LanguageBundle.get("ext.store.search.ordering.byrating.description");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String contentTitle() {
|
public String contentTitle() {
|
||||||
return "Popular Extensions";
|
return LanguageBundle.get("ext.store.search.ordering.byrating.contenttitle");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.H
|
|||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -31,17 +32,17 @@ public class ByUpdateOverview extends QueriedExtensionOverview {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String title() {
|
public String title() {
|
||||||
return "Recently Updated";
|
return LanguageBundle.get("ext.store.search.ordering.byupdate.title");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String description() {
|
public String description() {
|
||||||
return "Extensions that were recently updated";
|
return LanguageBundle.get("ext.store.search.ordering.byupdate.description");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String contentTitle() {
|
public String contentTitle() {
|
||||||
return "Recently Updated";
|
return LanguageBundle.get("ext.store.search.ordering.byupdate.contenttitle");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews;
|
package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews;
|
||||||
|
|
||||||
import gearth.misc.OSValidator;
|
import gearth.misc.OSValidator;
|
||||||
import gearth.services.internal_extensions.extensionstore.application.WebUtils;
|
|
||||||
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
|
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
|
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -47,7 +47,7 @@ public class CategorizedOverview extends QueriedExtensionOverview {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String contentTitle() {
|
public String contentTitle() {
|
||||||
return "Category: " + category.getName();
|
return LanguageBundle.get("ext.store.category") + ": " + category.getName();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.H
|
|||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -48,17 +49,17 @@ public class SearchedQueryOverview extends QueriedExtensionOverview {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String title() {
|
public String title() {
|
||||||
return "Search";
|
return LanguageBundle.get("ext.store.search.title");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String description() {
|
public String description() {
|
||||||
return "Find the extension that fits your needs";
|
return LanguageBundle.get("ext.store.search.description");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String contentTitle() {
|
public String contentTitle() {
|
||||||
return "Search results";
|
return LanguageBundle.get("ext.store.search.results");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package gearth.services.internal_extensions.extensionstore.application.entities.search;
|
package gearth.services.internal_extensions.extensionstore.application.entities.search;
|
||||||
|
|
||||||
|
import gearth.GEarth;
|
||||||
import gearth.services.internal_extensions.extensionstore.GExtensionStore;
|
import gearth.services.internal_extensions.extensionstore.GExtensionStore;
|
||||||
import gearth.services.internal_extensions.extensionstore.application.GExtensionStoreController;
|
import gearth.services.internal_extensions.extensionstore.application.GExtensionStoreController;
|
||||||
import gearth.services.internal_extensions.extensionstore.application.entities.ContentItem;
|
import gearth.services.internal_extensions.extensionstore.application.entities.ContentItem;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import netscape.javascript.JSObject;
|
import netscape.javascript.JSObject;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -92,13 +94,13 @@ public class SearchComponent implements ContentItem {
|
|||||||
.append("<div class=\"searchInnerContainer\">")
|
.append("<div class=\"searchInnerContainer\">")
|
||||||
|
|
||||||
.append("<div class=\"centeredFlex\">")
|
.append("<div class=\"centeredFlex\">")
|
||||||
.append("<label for=\"keyword\">Search by keyword:</label>")
|
.append("<label for=\"keyword\">").append(LanguageBundle.get("ext.store.search.bykeyword")).append(":</label>")
|
||||||
.append(String.format("<input id=\"keyword\" value=\"%s\" name=\"keyword\" class=\"inputBox\" type=\"text\" " +
|
.append(String.format("<input id=\"keyword\" value=\"%s\" name=\"keyword\" class=\"inputBox\" type=\"text\" " +
|
||||||
"oninput=\"%s.setSearchKeyword(this.value);\">", searchKeyword, id))
|
"oninput=\"%s.setSearchKeyword(this.value);\">", searchKeyword, id))
|
||||||
.append("</div>")
|
.append("</div>")
|
||||||
|
|
||||||
.append("<div class=\"centeredFlex\">")
|
.append("<div class=\"centeredFlex\">")
|
||||||
.append("<label for=\"ordering\">Extensions ordering:</label>");
|
.append("<label for=\"ordering\">").append(LanguageBundle.get("ext.store.search.ordering")).append("</label>");
|
||||||
|
|
||||||
// add ordering stuff
|
// add ordering stuff
|
||||||
htmlBuilder.append(String.format("<select class=\"inputBox\" name=\"ordering\" id=\"ordering\" " +
|
htmlBuilder.append(String.format("<select class=\"inputBox\" name=\"ordering\" id=\"ordering\" " +
|
||||||
@ -119,13 +121,13 @@ public class SearchComponent implements ContentItem {
|
|||||||
|
|
||||||
.append("<div class=\"filterStuff\">");
|
.append("<div class=\"filterStuff\">");
|
||||||
|
|
||||||
addFilterBoxHtml(htmlBuilder, "Client", "Clients:", clients, id);
|
addFilterBoxHtml(htmlBuilder, "Client", LanguageBundle.get("ext.store.search.filter.clients") + ":", clients, id);
|
||||||
addFilterBoxHtml(htmlBuilder, "Category", "Categories:", categories, id);
|
addFilterBoxHtml(htmlBuilder, "Category", LanguageBundle.get("ext.store.search.filter.categories") + ":", categories, id);
|
||||||
addFilterBoxHtml(htmlBuilder, "Framework", "Frameworks:", frameworks, id);
|
addFilterBoxHtml(htmlBuilder, "Framework", LanguageBundle.get("ext.store.search.filter.frameworks") + ":", frameworks, id);
|
||||||
|
|
||||||
htmlBuilder
|
htmlBuilder
|
||||||
.append("</div>")
|
.append("</div>")
|
||||||
.append("<br><p>Info: you are automatically filtering on the OS you use</p>")
|
.append("<br><p>").append(LanguageBundle.get("ext.store.search.info.automaticosfiltering")).append("</p>")
|
||||||
|
|
||||||
.append("</div>")
|
.append("</div>")
|
||||||
.append("</div>");
|
.append("</div>");
|
||||||
|
@ -6,6 +6,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.H
|
|||||||
import gearth.services.internal_extensions.extensionstore.application.entities.extensiondetails.StoreExtensionDetailsOverview;
|
import gearth.services.internal_extensions.extensionstore.application.entities.extensiondetails.StoreExtensionDetailsOverview;
|
||||||
import gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews.SearchedQueryOverview;
|
import gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews.SearchedQueryOverview;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -27,7 +28,7 @@ public class SearchOverview extends HOverview {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String buttonText() {
|
public String buttonText() {
|
||||||
return "Search";
|
return LanguageBundle.get("ext.store.button.search");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -74,17 +75,17 @@ public class SearchOverview extends HOverview {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String title() {
|
public String title() {
|
||||||
return "Search";
|
return LanguageBundle.get("ext.store.search.title");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String description() {
|
public String description() {
|
||||||
return "Find the extension that fits your needs";
|
return LanguageBundle.get("ext.store.search.description");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String contentTitle() {
|
public String contentTitle() {
|
||||||
return "Search extensions";
|
return LanguageBundle.get("ext.store.search.contenttitle");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,27 +1,29 @@
|
|||||||
package gearth.services.internal_extensions.extensionstore.repository.querying;
|
package gearth.services.internal_extensions.extensionstore.repository.querying;
|
||||||
|
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
|
||||||
public enum ExtensionOrdering {
|
public enum ExtensionOrdering {
|
||||||
|
|
||||||
RATING("Rating"),
|
RATING("ext.store.ordering.rating"),
|
||||||
ALPHABETICAL("Alphabetical"),
|
ALPHABETICAL("ext.store.ordering.alphabetical"),
|
||||||
LAST_UPDATED("Last updated"),
|
LAST_UPDATED("ext.store.ordering.lastupdated"),
|
||||||
NEW_RELEASES("New releases");
|
NEW_RELEASES("ext.store.ordering.newreleases");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private String orderName;
|
private String orderKey;
|
||||||
|
|
||||||
ExtensionOrdering(String orderName) {
|
ExtensionOrdering(String orderKey) {
|
||||||
this.orderName = orderName;
|
this.orderKey = orderKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getOrderName() {
|
public String getOrderName() {
|
||||||
return orderName;
|
return LanguageBundle.get(orderKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ExtensionOrdering fromString(String text) {
|
public static ExtensionOrdering fromString(String text) {
|
||||||
for (ExtensionOrdering b : ExtensionOrdering.values()) {
|
for (ExtensionOrdering b : ExtensionOrdering.values()) {
|
||||||
if (b.orderName.equalsIgnoreCase(text)) {
|
if (LanguageBundle.get(b.orderKey).equalsIgnoreCase(text)) {
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import gearth.services.extension_handler.extensions.implementations.network.exec
|
|||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreFetch;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreFetch;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
|
||||||
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.apache.maven.artifact.versioning.ComparableVersion;
|
import org.apache.maven.artifact.versioning.ComparableVersion;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
@ -137,29 +138,29 @@ public class StoreExtensionTools {
|
|||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
listener.fail("Error while unzipping");
|
listener.fail(LanguageBundle.get("ext.store.fail.unzip"));
|
||||||
removeExtension(path);
|
removeExtension(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (MalformedURLException e) {
|
} catch (MalformedURLException e) {
|
||||||
listener.fail("Invalid extension URL");
|
listener.fail(LanguageBundle.get("ext.store.fail.invalidurl"));
|
||||||
try {
|
try {
|
||||||
removeExtension(path); // cleanup
|
removeExtension(path); // cleanup
|
||||||
} catch (IOException ignore) { }
|
} catch (IOException ignore) { }
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
listener.fail("Extension not available in repository");
|
listener.fail(LanguageBundle.get("ext.store.fail.notavailable"));
|
||||||
try {
|
try {
|
||||||
removeExtension(path); // cleanup
|
removeExtension(path); // cleanup
|
||||||
} catch (IOException ignore) { }
|
} catch (IOException ignore) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
listener.fail("Something went wrong creating the extension directory, does the extension already exist?");
|
listener.fail(LanguageBundle.get("ext.store.fail.alreadyexists"));
|
||||||
// don't do cleanup since you might not want removal of current extension files
|
// don't do cleanup since you might not want removal of current extension files
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
listener.fail("Extension wasn't found");
|
listener.fail(LanguageBundle.get("ext.store.fail.notfound"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}).start();
|
}).start();
|
||||||
@ -233,8 +234,7 @@ public class StoreExtensionTools {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
listener.fail("Something went wrong with uninstalling the extension, make sure to disconnect" +
|
listener.fail(LanguageBundle.get("ext.store.fail.uninstall"));
|
||||||
" the extension if it was still running.");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,9 @@ package gearth.services.internal_extensions.uilogger;
|
|||||||
import gearth.protocol.HMessage;
|
import gearth.protocol.HMessage;
|
||||||
import gearth.protocol.HPacket;
|
import gearth.protocol.HPacket;
|
||||||
import gearth.ui.subforms.logger.loggerdisplays.PacketLogger;
|
import gearth.ui.subforms.logger.loggerdisplays.PacketLogger;
|
||||||
import javafx.application.Platform;
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
import gearth.ui.translations.TranslatableString;
|
||||||
|
import javafx.application.Platform;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
@ -39,7 +41,7 @@ public class UiLoggerController implements Initializable {
|
|||||||
public CheckMenuItem chkViewIncoming;
|
public CheckMenuItem chkViewIncoming;
|
||||||
public CheckMenuItem chkViewOutgoing;
|
public CheckMenuItem chkViewOutgoing;
|
||||||
public CheckMenuItem chkDisplayStructure;
|
public CheckMenuItem chkDisplayStructure;
|
||||||
public Label lblAutoScrolll;
|
public Label lblAutoScroll;
|
||||||
public CheckMenuItem chkAutoscroll;
|
public CheckMenuItem chkAutoscroll;
|
||||||
public CheckMenuItem chkSkipBigPackets;
|
public CheckMenuItem chkSkipBigPackets;
|
||||||
public CheckMenuItem chkMessageName;
|
public CheckMenuItem chkMessageName;
|
||||||
@ -71,6 +73,7 @@ public class UiLoggerController implements Initializable {
|
|||||||
public RadioMenuItem chkReprHex;
|
public RadioMenuItem chkReprHex;
|
||||||
public RadioMenuItem chkReprRawHex;
|
public RadioMenuItem chkReprRawHex;
|
||||||
public RadioMenuItem chkReprNone;
|
public RadioMenuItem chkReprNone;
|
||||||
|
public MenuItem menuItem_clear, menuItem_exportAll;
|
||||||
|
|
||||||
private Map<Integer, LinkedList<Long>> filterTimestamps = new HashMap<>();
|
private Map<Integer, LinkedList<Long>> filterTimestamps = new HashMap<>();
|
||||||
|
|
||||||
@ -86,6 +89,11 @@ public class UiLoggerController implements Initializable {
|
|||||||
private List<MenuItem> allMenuItems = new ArrayList<>();
|
private List<MenuItem> allMenuItems = new ArrayList<>();
|
||||||
private UiLogger uiLogger;
|
private UiLogger uiLogger;
|
||||||
|
|
||||||
|
public Menu menu_window, menu_window_onConnect, menu_window_onDisconnect, menu_view, menu_packets,
|
||||||
|
menu_packets_details, menu_packets_details_byteRep, menu_packets_details_message, menu_packets_antiSpam;
|
||||||
|
|
||||||
|
private TranslatableString viewIncoming, viewOutgoing, autoScroll, packetInfo, filtered;
|
||||||
|
|
||||||
private boolean isSelected(MenuItem item) {
|
private boolean isSelected(MenuItem item) {
|
||||||
if (item instanceof CheckMenuItem) {
|
if (item instanceof CheckMenuItem) {
|
||||||
return ((CheckMenuItem)item).isSelected();
|
return ((CheckMenuItem)item).isSelected();
|
||||||
@ -157,6 +165,8 @@ public class UiLoggerController implements Initializable {
|
|||||||
appendLater.clear();
|
appendLater.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initLanguageBinding();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String cleanTextContent(String text) {
|
private static String cleanTextContent(String text) {
|
||||||
@ -219,7 +229,7 @@ public class UiLoggerController implements Initializable {
|
|||||||
|
|
||||||
|
|
||||||
if (chkTimestamp.isSelected()) {
|
if (chkTimestamp.isSelected()) {
|
||||||
elements.add(new Element(String.format("(timestamp: %d)\n", System.currentTimeMillis()), "timestamp"));
|
elements.add(new Element(String.format("(%s: %d)\n", LanguageBundle.get("ext.logger.element.timestamp"), System.currentTimeMillis()), "timestamp"));
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean packetInfoAvailable = uiLogger.getPacketInfoManager().getPacketInfoList().size() > 0;
|
boolean packetInfoAvailable = uiLogger.getPacketInfoManager().getPacketInfoList().size() > 0;
|
||||||
@ -256,8 +266,8 @@ public class UiLoggerController implements Initializable {
|
|||||||
elements.add(new Element("\n", ""));
|
elements.add(new Element("\n", ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isBlocked) elements.add(new Element("[Blocked]\n", "blocked"));
|
if (isBlocked) elements.add(new Element(String.format("[%s]\n", LanguageBundle.get("ext.logger.element.blocked")), "blocked"));
|
||||||
else if (isReplaced) elements.add(new Element("[Replaced]\n", "replaced"));
|
else if (isReplaced) elements.add(new Element(String.format("[%s]\n", LanguageBundle.get("ext.logger.element.replaced")), "replaced"));
|
||||||
|
|
||||||
if (!chkReprNone.isSelected()) {
|
if (!chkReprNone.isSelected()) {
|
||||||
boolean isSkipped = chkSkipBigPackets.isSelected() && (packet.length() > 4000 || (packet.length() > 1000 && chkReprHex.isSelected()));
|
boolean isSkipped = chkSkipBigPackets.isSelected() && (packet.length() > 4000 || (packet.length() > 1000 && chkReprHex.isSelected()));
|
||||||
@ -265,7 +275,7 @@ public class UiLoggerController implements Initializable {
|
|||||||
Hexdump.hexdump(packet.toBytes()) :
|
Hexdump.hexdump(packet.toBytes()) :
|
||||||
(chkReprRawHex.isSelected() ? Bytes.wrap(packet.toBytes()).encodeHex() : packet.toString());
|
(chkReprRawHex.isSelected() ? Bytes.wrap(packet.toBytes()).encodeHex() : packet.toString());
|
||||||
|
|
||||||
String type = isIncoming ? "Incoming" : "Outgoing";
|
String type = isIncoming ? LanguageBundle.get("ext.logger.element.direction.incoming") : LanguageBundle.get("ext.logger.element.direction.outgoing");
|
||||||
|
|
||||||
if (!chkReprHex.isSelected()) {
|
if (!chkReprHex.isSelected()) {
|
||||||
elements.add(new Element(String.format("%s[", type), type.toLowerCase()));
|
elements.add(new Element(String.format("%s[", type), type.toLowerCase()));
|
||||||
@ -276,7 +286,7 @@ public class UiLoggerController implements Initializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isSkipped) {
|
if (isSkipped) {
|
||||||
elements.add(new Element("<packet skipped>", "skipped"));
|
elements.add(new Element(String.format("<%s>", LanguageBundle.get("ext.logger.element.skipped")), "skipped"));
|
||||||
} else
|
} else
|
||||||
elements.add(new Element(packetRepresentation, String.format(chkReprHex.isSelected() ? "%sHex": "%s", type.toLowerCase())));
|
elements.add(new Element(packetRepresentation, String.format(chkReprHex.isSelected() ? "%sHex": "%s", type.toLowerCase())));
|
||||||
elements.add(new Element("\n", ""));
|
elements.add(new Element("\n", ""));
|
||||||
@ -343,13 +353,13 @@ public class UiLoggerController implements Initializable {
|
|||||||
|
|
||||||
public void updateLoggerInfo() {
|
public void updateLoggerInfo() {
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
lblViewIncoming.setText("View Incoming: " + (chkViewIncoming.isSelected() ? "True" : "False"));
|
viewIncoming.setKey(1, "ext.logger.state." + (chkViewIncoming.isSelected() ? "true" : "false"));
|
||||||
lblViewOutgoing.setText("View Outgoing: " + (chkViewOutgoing.isSelected() ? "True" : "False"));
|
viewIncoming.setKey(1, "ext.logger.state." + (chkViewOutgoing.isSelected() ? "true" : "false"));
|
||||||
lblAutoScrolll.setText("Autoscroll: " + (chkAutoscroll.isSelected() ? "True" : "False"));
|
autoScroll.setKey(1, "ext.logger.state." + (chkAutoscroll.isSelected() ? "true" : "false"));
|
||||||
lblFiltered.setText("Filtered: " + filteredAmount);
|
filtered.setFormat("%s: " + filteredAmount);
|
||||||
|
|
||||||
boolean packetInfoAvailable = uiLogger.getPacketInfoManager().getPacketInfoList().size() > 0;
|
boolean packetInfoAvailable = uiLogger.getPacketInfoManager().getPacketInfoList().size() > 0;
|
||||||
lblPacketInfo.setText("Packet info: " + (packetInfoAvailable ? "True" : "False"));
|
packetInfo.setKey(1, "ext.logger.state." + (packetInfoAvailable ? "true" : "false"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,9 +399,9 @@ public class UiLoggerController implements Initializable {
|
|||||||
|
|
||||||
//Set extension filter
|
//Set extension filter
|
||||||
FileChooser.ExtensionFilter extFilter =
|
FileChooser.ExtensionFilter extFilter =
|
||||||
new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
|
new FileChooser.ExtensionFilter(String.format("%s (*.txt)", LanguageBundle.get("ext.logger.menu.packets.exportall.filetype")), "*.txt");
|
||||||
fileChooser.getExtensionFilters().add(extFilter);
|
fileChooser.getExtensionFilters().add(extFilter);
|
||||||
fileChooser.setTitle("Save Packets");
|
fileChooser.setTitle(LanguageBundle.get("ext.logger.menu.packets.exportall.windowtitle"));
|
||||||
|
|
||||||
//Show save file dialog
|
//Show save file dialog
|
||||||
File file = fileChooser.showSaveDialog(stage);
|
File file = fileChooser.showSaveDialog(stage);
|
||||||
@ -416,4 +426,62 @@ public class UiLoggerController implements Initializable {
|
|||||||
public void init(UiLogger uiLogger) {
|
public void init(UiLogger uiLogger) {
|
||||||
this.uiLogger = uiLogger;
|
this.uiLogger = uiLogger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initLanguageBinding() {
|
||||||
|
menu_window.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window"));
|
||||||
|
chkAlwaysOnTop.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.alwaysontop"));
|
||||||
|
|
||||||
|
menu_window_onConnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.onconnect"));
|
||||||
|
chkOpenOnConnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.onconnect.openwindow"));
|
||||||
|
chkResetOnConnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.onconnect.reset"));
|
||||||
|
|
||||||
|
menu_window_onDisconnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.ondisconnect"));
|
||||||
|
chkHideOnDisconnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.ondisconnect.hidewindow"));
|
||||||
|
chkResetOnDisconnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.ondisconnect.reset"));
|
||||||
|
|
||||||
|
menu_view.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.view"));
|
||||||
|
chkViewIncoming.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.view.incoming"));
|
||||||
|
chkViewOutgoing.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.view.outgoing"));
|
||||||
|
chkAutoscroll.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.view.autoscroll"));
|
||||||
|
menuItem_clear.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.view.cleartext"));
|
||||||
|
|
||||||
|
menu_packets.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets"));
|
||||||
|
menu_packets_details.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails"));
|
||||||
|
chkDisplayStructure.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.structure"));
|
||||||
|
chkTimestamp.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.timestamp"));
|
||||||
|
|
||||||
|
menu_packets_details_byteRep.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.byterep"));
|
||||||
|
chkReprLegacy.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.byterep.legacy"));
|
||||||
|
chkReprHex.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.byterep.hexdump"));
|
||||||
|
chkReprRawHex.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.byterep.rawhex"));
|
||||||
|
chkReprNone.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.byterep.none"));
|
||||||
|
|
||||||
|
menu_packets_details_message.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.message"));
|
||||||
|
chkMessageHash.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.message.hash"));
|
||||||
|
chkMessageName.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.message.name"));
|
||||||
|
chkMessageId.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.message.id"));
|
||||||
|
|
||||||
|
menu_packets_antiSpam.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam"));
|
||||||
|
chkAntiSpam_none.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam.none"));
|
||||||
|
chkAntiSpam_low.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam.low"));
|
||||||
|
chkAntiSpam_medium.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam.med"));
|
||||||
|
chkAntiSpam_high.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam.high"));
|
||||||
|
chkAntiSpam_ultra.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam.ultra"));
|
||||||
|
|
||||||
|
chkSkipBigPackets.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.skipbig"));
|
||||||
|
|
||||||
|
menuItem_exportAll.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.exportall"));
|
||||||
|
|
||||||
|
viewIncoming = new TranslatableString("%s: %s", "ext.logger.menu.view.incoming", "ext.logger.state.true");
|
||||||
|
viewOutgoing = new TranslatableString("%s: %s", "ext.logger.menu.view.outgoing", "ext.logger.state.true");
|
||||||
|
autoScroll = new TranslatableString("%s: %s", "ext.logger.menu.view.autoscroll", "ext.logger.state.true");
|
||||||
|
packetInfo = new TranslatableString("%s: %s", "ext.logger.state.packetinfo", "ext.logger.state.false");
|
||||||
|
filtered = new TranslatableString("%s: 0", "ext.logger.state.filtered");
|
||||||
|
|
||||||
|
lblViewIncoming.textProperty().bind(viewIncoming);
|
||||||
|
lblViewOutgoing.textProperty().bind(viewOutgoing);
|
||||||
|
lblAutoScroll.textProperty().bind(autoScroll);
|
||||||
|
lblPacketInfo.textProperty().bind(packetInfo);
|
||||||
|
lblFiltered.textProperty().bind(filtered);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package gearth.services.internal_extensions.uilogger;
|
package gearth.services.internal_extensions.uilogger;
|
||||||
|
|
||||||
|
import gearth.GEarth;
|
||||||
import gearth.extensions.InternalExtensionFormCreator;
|
import gearth.extensions.InternalExtensionFormCreator;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.scene.Parent;
|
import javafx.scene.Parent;
|
||||||
|
@ -3,8 +3,8 @@ package gearth.ui;
|
|||||||
import gearth.protocol.connection.proxy.ProxyProviderFactory;
|
import gearth.protocol.connection.proxy.ProxyProviderFactory;
|
||||||
import gearth.protocol.connection.proxy.SocksConfiguration;
|
import gearth.protocol.connection.proxy.SocksConfiguration;
|
||||||
import gearth.ui.subforms.logger.loggerdisplays.PacketLoggerFactory;
|
import gearth.ui.subforms.logger.loggerdisplays.PacketLoggerFactory;
|
||||||
|
import gearth.ui.translations.TranslatableString;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.input.MouseEvent;
|
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import gearth.protocol.HConnection;
|
import gearth.protocol.HConnection;
|
||||||
import gearth.ui.subforms.connection.ConnectionController;
|
import gearth.ui.subforms.connection.ConnectionController;
|
||||||
@ -21,7 +21,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public class GEarthController {
|
public class GEarthController {
|
||||||
|
|
||||||
public Tab tab_Logger;
|
public Tab tab_Connection, tab_Logger, tab_Injection, tab_Tools, tab_Scheduler, tab_Extensions, tab_Extra, tab_Info;
|
||||||
public TabPane tabBar;
|
public TabPane tabBar;
|
||||||
private Stage stage = null;
|
private Stage stage = null;
|
||||||
private volatile HConnection hConnection;
|
private volatile HConnection hConnection;
|
||||||
@ -67,6 +67,10 @@ public class GEarthController {
|
|||||||
trySetController();
|
trySetController();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (PacketLoggerFactory.usesUIlogger()) {
|
||||||
|
tabBar.getTabs().remove(tab_Logger);
|
||||||
|
}
|
||||||
|
|
||||||
List<Tab> uiTabs = tabBar.getTabs();
|
List<Tab> uiTabs = tabBar.getTabs();
|
||||||
for (int i = 0; i < uiTabs.size(); i++) {
|
for (int i = 0; i < uiTabs.size(); i++) {
|
||||||
Tab tab = uiTabs.get(i);
|
Tab tab = uiTabs.get(i);
|
||||||
@ -79,11 +83,7 @@ public class GEarthController {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PacketLoggerFactory.usesUIlogger()) {
|
initLanguageBinding();
|
||||||
tabBar.getTabs().remove(tab_Logger);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStage(Stage stage) {
|
public void setStage(Stage stage) {
|
||||||
@ -120,4 +120,13 @@ public class GEarthController {
|
|||||||
hConnection.abort();
|
hConnection.abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initLanguageBinding() {
|
||||||
|
tab_Connection.textProperty().bind(new TranslatableString("%s", "tab.connection"));
|
||||||
|
tab_Injection.textProperty().bind(new TranslatableString("%s", "tab.injection"));
|
||||||
|
tab_Tools.textProperty().bind(new TranslatableString("%s", "tab.tools"));
|
||||||
|
tab_Scheduler.textProperty().bind(new TranslatableString("%s", "tab.scheduler"));
|
||||||
|
tab_Extensions.textProperty().bind(new TranslatableString("%s", "tab.extensions"));
|
||||||
|
tab_Extra.textProperty().bind(new TranslatableString("%s", "tab.extra"));
|
||||||
|
tab_Info.textProperty().bind(new TranslatableString("%s", "tab.info"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import gearth.protocol.connection.HClient;
|
|||||||
import gearth.protocol.connection.HState;
|
import gearth.protocol.connection.HState;
|
||||||
import gearth.protocol.connection.proxy.ProxyProviderFactory;
|
import gearth.protocol.connection.proxy.ProxyProviderFactory;
|
||||||
import gearth.services.Constants;
|
import gearth.services.Constants;
|
||||||
|
import gearth.ui.translations.TranslatableString;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
@ -29,7 +30,7 @@ public class ConnectionController extends SubForm {
|
|||||||
public ComboBox<String> inpPort;
|
public ComboBox<String> inpPort;
|
||||||
public ComboBox<String> inpHost;
|
public ComboBox<String> inpHost;
|
||||||
public Button btnConnect;
|
public Button btnConnect;
|
||||||
public Label lblState;
|
public Label lblInpPort, lblInpHost, lblPort, lblHost, lblHotelVersion, lblClient, lblStateHead, lblState;
|
||||||
public TextField outHost;
|
public TextField outHost;
|
||||||
public TextField outPort;
|
public TextField outPort;
|
||||||
public CheckBox cbx_autodetect;
|
public CheckBox cbx_autodetect;
|
||||||
@ -48,6 +49,8 @@ public class ConnectionController extends SubForm {
|
|||||||
|
|
||||||
private volatile int initcount = 0;
|
private volatile int initcount = 0;
|
||||||
|
|
||||||
|
private TranslatableString connect, state;
|
||||||
|
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
|
|
||||||
Constants.UNITY_PACKETS = rd_unity.isSelected();
|
Constants.UNITY_PACKETS = rd_unity.isSelected();
|
||||||
@ -131,6 +134,8 @@ public class ConnectionController extends SubForm {
|
|||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
tryMaybeConnectOnInit();
|
tryMaybeConnectOnInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initLanguageBinding();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -176,20 +181,20 @@ public class ConnectionController extends SubForm {
|
|||||||
getHConnection().getStateObservable().addListener((oldState, newState) -> Platform.runLater(() -> {
|
getHConnection().getStateObservable().addListener((oldState, newState) -> Platform.runLater(() -> {
|
||||||
updateInputUI();
|
updateInputUI();
|
||||||
if (newState == HState.NOT_CONNECTED) {
|
if (newState == HState.NOT_CONNECTED) {
|
||||||
lblState.setText("Not connected");
|
state.setKey(0, "tab.connection.state.notconnected");
|
||||||
btnConnect.setText("Connect");
|
connect.setKey(0, "tab.connection.button.connect");
|
||||||
outHost.setText("");
|
outHost.setText("");
|
||||||
outPort.setText("");
|
outPort.setText("");
|
||||||
}
|
}
|
||||||
else if (oldState == HState.NOT_CONNECTED) {
|
else if (oldState == HState.NOT_CONNECTED) {
|
||||||
btnConnect.setText("Abort");
|
connect.setKey(0, "tab.connection.button.abort");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newState == HState.CONNECTED) {
|
if (newState == HState.CONNECTED) {
|
||||||
lblState.setText("Connected");
|
state.setKey(0, "tab.connection.state.connected");
|
||||||
}
|
}
|
||||||
if (newState == HState.WAITING_FOR_CLIENT) {
|
if (newState == HState.WAITING_FOR_CLIENT) {
|
||||||
lblState.setText("Waiting for connection");
|
state.setKey(0, "tab.connection.state.waiting");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newState == HState.CONNECTED && useFlash()) {
|
if (newState == HState.CONNECTED && useFlash()) {
|
||||||
@ -314,4 +319,24 @@ public class ConnectionController extends SubForm {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initLanguageBinding() {
|
||||||
|
TranslatableString port = new TranslatableString("%s", "tab.connection.port");
|
||||||
|
TranslatableString host = new TranslatableString("%s", "tab.connection.host");
|
||||||
|
lblInpPort.textProperty().bind(port);
|
||||||
|
lblInpHost.textProperty().bind(host);
|
||||||
|
lblPort.textProperty().bind(port);
|
||||||
|
lblHost.textProperty().bind(host);
|
||||||
|
cbx_autodetect.textProperty().bind(new TranslatableString("%s", "tab.connection.autodetect"));
|
||||||
|
connect = new TranslatableString("%s", "tab.connection.button.connect");
|
||||||
|
btnConnect.textProperty().bind(connect);
|
||||||
|
lblHotelVersion.textProperty().bind(new TranslatableString("%s", "tab.connection.version"));
|
||||||
|
lblClient.textProperty().bind(new TranslatableString("%s", "tab.connection.client"));
|
||||||
|
rd_unity.textProperty().bind(new TranslatableString("%s", "tab.connection.client.unity"));
|
||||||
|
rd_flash.textProperty().bind(new TranslatableString("%s", "tab.connection.client.flash"));
|
||||||
|
rd_nitro.textProperty().bind(new TranslatableString("%s", "tab.connection.client.nitro"));
|
||||||
|
lblStateHead.textProperty().bind(new TranslatableString("%s", "tab.connection.state"));
|
||||||
|
state = new TranslatableString("%s", "tab.connection.state.notconnected");
|
||||||
|
lblState.textProperty().bind(state);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
package gearth.ui.subforms.extensions;
|
package gearth.ui.subforms.extensions;
|
||||||
|
|
||||||
|
import gearth.GEarth;
|
||||||
import gearth.services.extension_handler.extensions.ExtensionType;
|
import gearth.services.extension_handler.extensions.ExtensionType;
|
||||||
import gearth.services.extension_handler.extensions.GEarthExtension;
|
import gearth.services.extension_handler.extensions.GEarthExtension;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
import gearth.ui.translations.TranslatableString;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
@ -80,7 +83,8 @@ public class ExtensionItemContainer extends GridPane {
|
|||||||
add(versionLabel, 3, 0);
|
add(versionLabel, 3, 0);
|
||||||
|
|
||||||
exitButton = new ExitButton();
|
exitButton = new ExitButton();
|
||||||
Tooltip delete = new Tooltip("Close connection with this extension");
|
Tooltip delete = new Tooltip();
|
||||||
|
delete.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.edit.delete.tooltip"));
|
||||||
Tooltip.install(exitButton,delete);
|
Tooltip.install(exitButton,delete);
|
||||||
exitButton.show();
|
exitButton.show();
|
||||||
clickButton = new SimpleClickButton();
|
clickButton = new SimpleClickButton();
|
||||||
@ -89,7 +93,8 @@ public class ExtensionItemContainer extends GridPane {
|
|||||||
buttonsBox = new HBox(clickButton, exitButton);
|
buttonsBox = new HBox(clickButton, exitButton);
|
||||||
|
|
||||||
reloadButton = new ReloadButton();
|
reloadButton = new ReloadButton();
|
||||||
Tooltip reload = new Tooltip("Restart this extension");
|
Tooltip reload = new Tooltip();
|
||||||
|
reload.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.edit.restart.tooltip"));
|
||||||
Tooltip.install(reloadButton, reload);
|
Tooltip.install(reloadButton, reload);
|
||||||
reloadButton.show();
|
reloadButton.show();
|
||||||
reloadButton.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
|
reloadButton.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
|
||||||
@ -99,8 +104,6 @@ public class ExtensionItemContainer extends GridPane {
|
|||||||
});
|
});
|
||||||
|
|
||||||
DeleteButton deleteButton = new DeleteButton();
|
DeleteButton deleteButton = new DeleteButton();
|
||||||
Tooltip uninstall = new Tooltip("Uninstall this extension");
|
|
||||||
Tooltip.install(deleteButton, uninstall);
|
|
||||||
deleteButton.show();
|
deleteButton.show();
|
||||||
GridPane this2 = this;
|
GridPane this2 = this;
|
||||||
|
|
||||||
@ -110,8 +113,8 @@ public class ExtensionItemContainer extends GridPane {
|
|||||||
|
|
||||||
if (ConfirmationDialog.showDialog(uninstallKey)) {
|
if (ConfirmationDialog.showDialog(uninstallKey)) {
|
||||||
Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.CONFIRMATION, uninstallKey
|
Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.CONFIRMATION, uninstallKey
|
||||||
,"Confirmation Dialog", null,
|
, LanguageBundle.get("alert.confirmation.windowtitle"), null,
|
||||||
"Are you sure want to uninstall this extension?", "Do not ask again",
|
LanguageBundle.get("tab.extensions.table.edit.uninstall.confirmation"), LanguageBundle.get("alert.confirmation.button.donotaskagain"),
|
||||||
ButtonType.YES, ButtonType.NO
|
ButtonType.YES, ButtonType.NO
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -217,4 +220,8 @@ public class ExtensionItemContainer extends GridPane {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initLanguageBinding() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package gearth.ui.subforms.extensions;
|
package gearth.ui.subforms.extensions;
|
||||||
|
|
||||||
|
import gearth.GEarth;
|
||||||
import gearth.services.extension_handler.ExtensionHandler;
|
import gearth.services.extension_handler.ExtensionHandler;
|
||||||
import gearth.services.extension_handler.extensions.ExtensionListener;
|
import gearth.services.extension_handler.extensions.ExtensionListener;
|
||||||
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionsProducer;
|
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionsProducer;
|
||||||
@ -10,6 +11,8 @@ import gearth.services.extension_handler.extensions.implementations.network.exec
|
|||||||
import gearth.services.g_python.GPythonShell;
|
import gearth.services.g_python.GPythonShell;
|
||||||
import gearth.ui.SubForm;
|
import gearth.ui.SubForm;
|
||||||
import gearth.ui.subforms.extensions.logger.ExtensionLogger;
|
import gearth.ui.subforms.extensions.logger.ExtensionLogger;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
import gearth.ui.translations.TranslatableString;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
@ -39,12 +42,14 @@ public class ExtensionsController extends SubForm {
|
|||||||
private NetworkExtensionsProducer networkExtensionsProducer; // needed for port
|
private NetworkExtensionsProducer networkExtensionsProducer; // needed for port
|
||||||
private ExtensionLogger extensionLogger = null;
|
private ExtensionLogger extensionLogger = null;
|
||||||
|
|
||||||
|
public Label lbl_tableTitle, lbl_tableDesc, lbl_tableAuthor, lbl_tableVersion, lbl_tableEdit, lbl_port;
|
||||||
|
|
||||||
|
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
scroller.widthProperty().addListener(observable -> header_ext.setPrefWidth(scroller.getWidth()));
|
scroller.widthProperty().addListener(observable -> header_ext.setPrefWidth(scroller.getWidth()));
|
||||||
extensionLogger = new ExtensionLogger();
|
extensionLogger = new ExtensionLogger();
|
||||||
|
|
||||||
|
initLanguageBinding();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onParentSet() {
|
protected void onParentSet() {
|
||||||
@ -80,9 +85,9 @@ public class ExtensionsController extends SubForm {
|
|||||||
|
|
||||||
public void installBtnClicked(ActionEvent actionEvent) {
|
public void installBtnClicked(ActionEvent actionEvent) {
|
||||||
FileChooser fileChooser = new FileChooser();
|
FileChooser fileChooser = new FileChooser();
|
||||||
fileChooser.setTitle("Install extension");
|
fileChooser.setTitle(LanguageBundle.get("tab.extensions.button.install.windowtitle"));
|
||||||
fileChooser.getExtensionFilters().addAll(
|
fileChooser.getExtensionFilters().addAll(
|
||||||
new FileChooser.ExtensionFilter("G-Earth extensions", ExecutionInfo.ALLOWEDEXTENSIONTYPES));
|
new FileChooser.ExtensionFilter(LanguageBundle.get("tab.extensions.button.install.filetype"), ExecutionInfo.ALLOWEDEXTENSIONTYPES));
|
||||||
File selectedFile = fileChooser.showOpenDialog(parentController.getStage());
|
File selectedFile = fileChooser.showOpenDialog(parentController.getStage());
|
||||||
if (selectedFile != null) {
|
if (selectedFile != null) {
|
||||||
extensionRunner.installAndRunExtension(selectedFile.getPath(), networkExtensionsProducer.getPort());
|
extensionRunner.installAndRunExtension(selectedFile.getPath(), networkExtensionsProducer.getPort());
|
||||||
@ -116,7 +121,7 @@ public class ExtensionsController extends SubForm {
|
|||||||
pythonShellLaunching = true;
|
pythonShellLaunching = true;
|
||||||
Platform.runLater(() -> btn_gpython.setDisable(true));
|
Platform.runLater(() -> btn_gpython.setDisable(true));
|
||||||
GPythonShell shell = new GPythonShell(
|
GPythonShell shell = new GPythonShell(
|
||||||
"Scripting shell " + gpytonShellCounter++,
|
String.format("%s %d", LanguageBundle.get("tab.extensions.button.pythonshell.windowtitle"),gpytonShellCounter++),
|
||||||
networkExtensionsProducer.getPort(),
|
networkExtensionsProducer.getPort(),
|
||||||
Authenticator.generatePermanentCookie()
|
Authenticator.generatePermanentCookie()
|
||||||
);
|
);
|
||||||
@ -129,4 +134,18 @@ public class ExtensionsController extends SubForm {
|
|||||||
public ExtensionHandler getExtensionHandler() {
|
public ExtensionHandler getExtensionHandler() {
|
||||||
return extensionHandler;
|
return extensionHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initLanguageBinding() {
|
||||||
|
lbl_tableTitle.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.title"));
|
||||||
|
lbl_tableDesc.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.description"));
|
||||||
|
lbl_tableAuthor.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.author"));
|
||||||
|
lbl_tableVersion.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.version"));
|
||||||
|
lbl_tableEdit.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.edit"));
|
||||||
|
|
||||||
|
lbl_port.textProperty().bind(new TranslatableString("%s:", "tab.extensions.port"));
|
||||||
|
|
||||||
|
btn_gpython.textProperty().bind(new TranslatableString("%s", "tab.extensions.button.pythonshell"));
|
||||||
|
btn_viewExtensionConsole.textProperty().bind(new TranslatableString("%s", "tab.extensions.button.logs"));
|
||||||
|
btn_install.textProperty().bind(new TranslatableString("%s", "tab.extensions.button.install"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import gearth.GEarth;
|
|||||||
import gearth.ui.titlebar.DefaultTitleBarConfig;
|
import gearth.ui.titlebar.DefaultTitleBarConfig;
|
||||||
import gearth.ui.titlebar.GEarthThemedTitleBarConfig;
|
import gearth.ui.titlebar.GEarthThemedTitleBarConfig;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.TranslatableString;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.scene.Parent;
|
import javafx.scene.Parent;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
@ -38,7 +39,7 @@ public class ExtensionLogger {
|
|||||||
|
|
||||||
|
|
||||||
stage = new Stage();
|
stage = new Stage();
|
||||||
stage.setTitle("G-Earth | Extension Console");
|
stage.titleProperty().bind(new TranslatableString("G-Earth | %s", "tab.extensions.button.logs.windowtitle"));
|
||||||
stage.initModality(Modality.NONE);
|
stage.initModality(Modality.NONE);
|
||||||
stage.setAlwaysOnTop(true);
|
stage.setAlwaysOnTop(true);
|
||||||
stage.setMinHeight(235);
|
stage.setMinHeight(235);
|
||||||
|
@ -11,6 +11,8 @@ import gearth.services.g_python.GPythonVersionUtils;
|
|||||||
import gearth.ui.SubForm;
|
import gearth.ui.SubForm;
|
||||||
import gearth.ui.subforms.info.InfoController;
|
import gearth.ui.subforms.info.InfoController;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
import gearth.ui.translations.TranslatableString;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
@ -59,6 +61,7 @@ public class ExtraController extends SubForm implements SocksConfiguration {
|
|||||||
public TextField txt_socksPort;
|
public TextField txt_socksPort;
|
||||||
public TextField txt_socksIp;
|
public TextField txt_socksIp;
|
||||||
public CheckBox cbx_admin;
|
public CheckBox cbx_admin;
|
||||||
|
public Label lbl_notepad, lbl_proxyIp, lbl_proxyPort;
|
||||||
|
|
||||||
private AdminService adminService;
|
private AdminService adminService;
|
||||||
|
|
||||||
@ -92,6 +95,8 @@ public class ExtraController extends SubForm implements SocksConfiguration {
|
|||||||
cbx_useSocks.selectedProperty().addListener(observable -> grd_socksInfo.setDisable(!cbx_useSocks.isSelected()));
|
cbx_useSocks.selectedProperty().addListener(observable -> grd_socksInfo.setDisable(!cbx_useSocks.isSelected()));
|
||||||
|
|
||||||
ProxyProviderFactory.setSocksConfig(this);
|
ProxyProviderFactory.setSocksConfig(this);
|
||||||
|
|
||||||
|
initLanguageBinding();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -177,12 +182,13 @@ public class ExtraController extends SubForm implements SocksConfiguration {
|
|||||||
});
|
});
|
||||||
if (!GPythonVersionUtils.validInstallation()) {
|
if (!GPythonVersionUtils.validInstallation()) {
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
Alert alert = new Alert(Alert.AlertType.ERROR, "G-Python installation", ButtonType.OK);
|
Alert alert = new Alert(Alert.AlertType.ERROR, LanguageBundle.get("tab.extra.options.pythonscripting.alert.title"), ButtonType.OK);
|
||||||
alert.setTitle("G-Python installation");
|
alert.setTitle(LanguageBundle.get("tab.extra.options.pythonscripting.alert.title"));
|
||||||
|
|
||||||
FlowPane fp = new FlowPane();
|
FlowPane fp = new FlowPane();
|
||||||
Label lbl = new Label("Before using G-Python, install the right packages using pip!" +
|
Label lbl = new Label(LanguageBundle.get("tab.extra.options.pythonscripting.alert.content") +
|
||||||
System.lineSeparator() + System.lineSeparator() + "More information here:");
|
System.lineSeparator() + System.lineSeparator() +
|
||||||
|
LanguageBundle.get("tab.extra.options.pythonscripting.alert.moreinformation"));
|
||||||
Hyperlink link = new Hyperlink(INFO_URL_GPYTHON);
|
Hyperlink link = new Hyperlink(INFO_URL_GPYTHON);
|
||||||
fp.getChildren().addAll( lbl, link);
|
fp.getChildren().addAll( lbl, link);
|
||||||
link.setOnAction(event -> {
|
link.setOnAction(event -> {
|
||||||
@ -219,4 +225,22 @@ public class ExtraController extends SubForm implements SocksConfiguration {
|
|||||||
adminService.setEnabled(cbx_admin.isSelected());
|
adminService.setEnabled(cbx_admin.isSelected());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initLanguageBinding() {
|
||||||
|
url_troubleshooting.textProperty().bind(new TranslatableString("%s", "tab.extra.troubleshooting"));
|
||||||
|
|
||||||
|
lbl_notepad.textProperty().bind(new TranslatableString("%s:", "tab.extra.notepad"));
|
||||||
|
lbl_proxyIp.textProperty().bind(new TranslatableString("%s:", "tab.extra.options.advanced.proxy.ip"));
|
||||||
|
lbl_proxyPort.textProperty().bind(new TranslatableString("%s:", "tab.extra.options.advanced.proxy.port"));
|
||||||
|
|
||||||
|
cbx_alwaysOnTop.textProperty().bind(new TranslatableString("%s", "tab.extra.options.alwaysontop"));
|
||||||
|
|
||||||
|
cbx_admin.textProperty().bind(new TranslatableString("%s", "tab.extra.options.staffpermissions"));
|
||||||
|
cbx_gpython.textProperty().bind(new TranslatableString("%s", "tab.extra.options.pythonscripting"));
|
||||||
|
cbx_advanced.textProperty().bind(new TranslatableString("%s", "tab.extra.options.advanced"));
|
||||||
|
|
||||||
|
cbx_useSocks.textProperty().bind(new TranslatableString("%s", "tab.extra.options.advanced.socks"));
|
||||||
|
cbx_disableDecryption.textProperty().bind(new TranslatableString("%s", "tab.extra.options.advanced.disabledecryption"));
|
||||||
|
cbx_debug.textProperty().bind(new TranslatableString("%s", "tab.extra.options.advanced.debugstdout"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@ package gearth.ui.subforms.info;
|
|||||||
|
|
||||||
import gearth.GEarth;
|
import gearth.GEarth;
|
||||||
import gearth.ui.titlebar.TitleBarController;
|
import gearth.ui.titlebar.TitleBarController;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
import gearth.ui.translations.TranslatableString;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import gearth.ui.SubForm;
|
import gearth.ui.SubForm;
|
||||||
@ -24,7 +26,8 @@ public class InfoController extends SubForm {
|
|||||||
public Hyperlink link_g_store;
|
public Hyperlink link_g_store;
|
||||||
public Hyperlink link_t_gearth;
|
public Hyperlink link_t_gearth;
|
||||||
|
|
||||||
public Label version;
|
public Label version, lbl_description, lbl_createdBy, lbl_contrib, lbl_links;
|
||||||
|
public Button btn_donate;
|
||||||
|
|
||||||
public static void activateHyperlink(Hyperlink link) {
|
public static void activateHyperlink(Hyperlink link) {
|
||||||
link.setOnAction((ActionEvent event) -> {
|
link.setOnAction((ActionEvent event) -> {
|
||||||
@ -49,16 +52,18 @@ public class InfoController extends SubForm {
|
|||||||
activateHyperlink(link_g_tanji);
|
activateHyperlink(link_g_tanji);
|
||||||
activateHyperlink(link_g_store);
|
activateHyperlink(link_g_store);
|
||||||
activateHyperlink(link_t_gearth);
|
activateHyperlink(link_t_gearth);
|
||||||
|
|
||||||
|
initLanguageBinding();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void donate(ActionEvent actionEvent) {
|
public void donate(ActionEvent actionEvent) {
|
||||||
String pubkey = "1GEarthEV9Ua3RcixsKTcuc1PPZd9hqri3";
|
String pubkey = "1GEarthEV9Ua3RcixsKTcuc1PPZd9hqri3";
|
||||||
|
|
||||||
Alert alert = new Alert(Alert.AlertType.INFORMATION, "Donate Bitcoins", ButtonType.OK);
|
Alert alert = new Alert(Alert.AlertType.INFORMATION, LanguageBundle.get("tab.info.donate.alert.title"), ButtonType.OK);
|
||||||
alert.setHeaderText("Donate Bitcoins");
|
alert.setHeaderText(LanguageBundle.get("tab.info.donate.alert.title"));
|
||||||
|
|
||||||
VBox test = new VBox();
|
VBox test = new VBox();
|
||||||
test.getChildren().add(new Label("Bitcoin public address:"));
|
test.getChildren().add(new Label(LanguageBundle.get("tab.info.donate.alert.content")));
|
||||||
TextArea pubText = new TextArea(pubkey);
|
TextArea pubText = new TextArea(pubkey);
|
||||||
pubText.setPrefHeight(28);
|
pubText.setPrefHeight(28);
|
||||||
pubText.setMaxWidth(250);
|
pubText.setMaxWidth(250);
|
||||||
@ -73,4 +78,13 @@ public class InfoController extends SubForm {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initLanguageBinding() {
|
||||||
|
lbl_description.textProperty().bind(new TranslatableString("%s", "tab.info.description"));
|
||||||
|
lbl_createdBy.textProperty().bind(new TranslatableString("%s:", "tab.info.createdby"));
|
||||||
|
lbl_contrib.textProperty().bind(new TranslatableString("%s:", "tab.info.contributors"));
|
||||||
|
lbl_links.textProperty().bind(new TranslatableString("%s:", "tab.info.links"));
|
||||||
|
|
||||||
|
btn_donate.textProperty().bind(new TranslatableString("%s", "tab.info.donate"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package gearth.ui.subforms.injection;
|
package gearth.ui.subforms.injection;
|
||||||
|
|
||||||
|
import gearth.GEarth;
|
||||||
import gearth.misc.StringifyAble;
|
import gearth.misc.StringifyAble;
|
||||||
import gearth.protocol.HMessage;
|
import gearth.protocol.HMessage;
|
||||||
import gearth.protocol.HPacket;
|
import gearth.protocol.HPacket;
|
||||||
import gearth.services.packet_info.PacketInfo;
|
import gearth.services.packet_info.PacketInfo;
|
||||||
import gearth.services.packet_info.PacketInfoManager;
|
import gearth.services.packet_info.PacketInfoManager;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -19,7 +21,7 @@ public class InjectedPackets implements StringifyAble {
|
|||||||
public InjectedPackets(String packetsAsString, int amountPackets, PacketInfoManager packetInfoManager, HMessage.Direction direction) {
|
public InjectedPackets(String packetsAsString, int amountPackets, PacketInfoManager packetInfoManager, HMessage.Direction direction) {
|
||||||
String description;
|
String description;
|
||||||
if (amountPackets > 1) {
|
if (amountPackets > 1) {
|
||||||
description = String.format("(packets: %d, length: %d)", amountPackets, packetsAsString.length());
|
description = String.format("(%s: %d, %s: %d)", LanguageBundle.get("tab.injection.description.packets"), amountPackets, LanguageBundle.get("tab.injection.description.length"), packetsAsString.length());
|
||||||
}
|
}
|
||||||
else { // assume 1 packet
|
else { // assume 1 packet
|
||||||
HPacket packet = new HPacket(packetsAsString);
|
HPacket packet = new HPacket(packetsAsString);
|
||||||
@ -40,7 +42,7 @@ public class InjectedPackets implements StringifyAble {
|
|||||||
description = String.format("%s", identifier);
|
description = String.format("%s", identifier);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
description = String.format("(id: %d, length: %d)", packet.headerId(), packet.length());
|
description = String.format("(%s: %d, %s: %d)", LanguageBundle.get("tab.injection.description.id"), packet.headerId(), LanguageBundle.get("tab.injection.description.length"), packet.length());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
package gearth.ui.subforms.injection;
|
package gearth.ui.subforms.injection;
|
||||||
|
|
||||||
|
import gearth.GEarth;
|
||||||
import gearth.misc.Cacher;
|
import gearth.misc.Cacher;
|
||||||
import gearth.services.packet_info.PacketInfoManager;
|
import gearth.services.packet_info.PacketInfoManager;
|
||||||
import gearth.protocol.HMessage;
|
import gearth.protocol.HMessage;
|
||||||
import gearth.protocol.connection.HState;
|
import gearth.protocol.connection.HState;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
import gearth.ui.translations.TranslatableString;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
@ -26,12 +29,15 @@ public class InjectionController extends SubForm {
|
|||||||
private static final int historylimit = 69;
|
private static final int historylimit = 69;
|
||||||
|
|
||||||
public TextArea inputPacket;
|
public TextArea inputPacket;
|
||||||
public Text lbl_corrruption;
|
public Text lbl_corruption;
|
||||||
public Text lbl_pcktInfo;
|
public Text lbl_pcktInfo;
|
||||||
public Button btn_sendToServer;
|
public Button btn_sendToServer;
|
||||||
public Button btn_sendToClient;
|
public Button btn_sendToClient;
|
||||||
public ListView<InjectedPackets> history;
|
public ListView<InjectedPackets> history;
|
||||||
public Label lblHistory;
|
public Label lblHistory;
|
||||||
|
public Hyperlink lnk_clearHistory;
|
||||||
|
|
||||||
|
private TranslatableString corruption, pcktInfo;
|
||||||
|
|
||||||
protected void onParentSet() {
|
protected void onParentSet() {
|
||||||
getHConnection().getStateObservable().addListener((oldState, newState) -> Platform.runLater(this::updateUI));
|
getHConnection().getStateObservable().addListener((oldState, newState) -> Platform.runLater(this::updateUI));
|
||||||
@ -52,14 +58,14 @@ public class InjectionController extends SubForm {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
lblHistory.setTooltip(new Tooltip("Double click a packet to restore it"));
|
|
||||||
|
|
||||||
List<Object> rawHistory = Cacher.getList(HISTORY_CACHE_KEY);
|
List<Object> rawHistory = Cacher.getList(HISTORY_CACHE_KEY);
|
||||||
if (rawHistory != null) {
|
if (rawHistory != null) {
|
||||||
List<InjectedPackets> history = rawHistory.stream()
|
List<InjectedPackets> history = rawHistory.stream()
|
||||||
.map(o -> (String)o).limit(historylimit - 1).map(InjectedPackets::new).collect(Collectors.toList());
|
.map(o -> (String)o).limit(historylimit - 1).map(InjectedPackets::new).collect(Collectors.toList());
|
||||||
updateHistoryView(history);
|
updateHistoryView(history);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initLanguageBinding();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isPacketIncomplete(String line) {
|
private static boolean isPacketIncomplete(String line) {
|
||||||
@ -103,33 +109,34 @@ public class InjectionController extends SubForm {
|
|||||||
private void updateUI() {
|
private void updateUI() {
|
||||||
boolean dirty = false;
|
boolean dirty = false;
|
||||||
|
|
||||||
lbl_corrruption.setText("isCorrupted: False");
|
corruption.setKey(1, "tab.injection.corrupted.false");
|
||||||
lbl_corrruption.getStyleClass().clear();
|
lbl_corruption.getStyleClass().clear();
|
||||||
lbl_corrruption.getStyleClass().add("not-corrupted-label");
|
lbl_corruption.getStyleClass().add("not-corrupted-label");
|
||||||
|
|
||||||
HPacket[] packets = parsePackets(inputPacket.getText());
|
HPacket[] packets = parsePackets(inputPacket.getText());
|
||||||
|
|
||||||
if (packets.length == 0) {
|
if (packets.length == 0) {
|
||||||
dirty = true;
|
dirty = true;
|
||||||
lbl_corrruption.setFill(Paint.valueOf("#ee0404b2"));
|
lbl_corruption.setFill(Paint.valueOf("#ee0404b2"));
|
||||||
lbl_corrruption.getStyleClass().clear();
|
lbl_corruption.getStyleClass().clear();
|
||||||
lbl_corrruption.getStyleClass().add("corrupted-label");
|
lbl_corruption.getStyleClass().add("corrupted-label");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < packets.length; i++) {
|
for (int i = 0; i < packets.length; i++) {
|
||||||
if (packets[i].isCorrupted()) {
|
if (packets[i].isCorrupted()) {
|
||||||
if (!dirty) {
|
if (!dirty) {
|
||||||
lbl_corrruption.setText("isCorrupted: True -> " + i);
|
corruption.setFormat("%s: %s -> " + i);
|
||||||
lbl_corrruption.getStyleClass().clear();
|
corruption.setKey(1, "tab.injection.corrupted.true");
|
||||||
lbl_corrruption.getStyleClass().add("corrupted-label");
|
lbl_corruption.getStyleClass().clear();
|
||||||
|
lbl_corruption.getStyleClass().add("corrupted-label");
|
||||||
dirty = true;
|
dirty = true;
|
||||||
} else
|
} else
|
||||||
lbl_corrruption.setText(lbl_corrruption.getText() + ", " + i);
|
corruption.setFormat(corruption.getFormat() + ", " + i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dirty && packets.length == 1) {
|
if (dirty && packets.length == 1) {
|
||||||
lbl_corrruption.setText("isCorrupted: True"); // no index needed
|
corruption.setFormatAndKeys("%s: %s", "tab.injection.corrupted", "tab.injection.corrupted.true");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dirty) {
|
if (!dirty) {
|
||||||
@ -147,18 +154,23 @@ public class InjectionController extends SubForm {
|
|||||||
btn_sendToClient.setDisable(!canSendToClient || getHConnection().getState() != HState.CONNECTED);
|
btn_sendToClient.setDisable(!canSendToClient || getHConnection().getState() != HState.CONNECTED);
|
||||||
btn_sendToServer.setDisable(!canSendToServer || getHConnection().getState() != HState.CONNECTED);
|
btn_sendToServer.setDisable(!canSendToServer || getHConnection().getState() != HState.CONNECTED);
|
||||||
if (packets.length == 1) {
|
if (packets.length == 1) {
|
||||||
lbl_pcktInfo.setText("header (id:" + packets[0].headerId() + ", length:" +
|
pcktInfo.setFormatAndKeys("%s (%s: " + packets[0].headerId() + ", %s: " + packets[0].length() + ")",
|
||||||
packets[0].length() + ")");
|
"tab.injection.description.header",
|
||||||
|
"tab.injection.description.id",
|
||||||
|
"tab.injection.description.length");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
lbl_pcktInfo.setText("");
|
lbl_pcktInfo.setText("");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (packets.length == 1) {
|
if (packets.length == 1) {
|
||||||
lbl_pcktInfo.setText("header (id:NULL, length:" + packets[0].getBytesLength()+")");
|
pcktInfo.setFormatAndKeys("%s (%s:NULL, %s: " + packets[0].getBytesLength() + ")",
|
||||||
|
"tab.injection.description.header",
|
||||||
|
"tab.injection.description.id",
|
||||||
|
"tab.injection.description.length");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
lbl_pcktInfo.setText("");
|
pcktInfo.setFormatAndKeys("");
|
||||||
}
|
}
|
||||||
|
|
||||||
btn_sendToClient.setDisable(true);
|
btn_sendToClient.setDisable(true);
|
||||||
@ -171,7 +183,7 @@ public class InjectionController extends SubForm {
|
|||||||
HPacket[] packets = parsePackets(inputPacket.getText());
|
HPacket[] packets = parsePackets(inputPacket.getText());
|
||||||
for (HPacket packet : packets) {
|
for (HPacket packet : packets) {
|
||||||
getHConnection().sendToServer(packet);
|
getHConnection().sendToServer(packet);
|
||||||
writeToLog(Color.BLUE, "SS -> packet with id: " + packet.headerId());
|
writeToLog(Color.BLUE, String.format("SS -> %s: %d", LanguageBundle.get("tab.injection.log.packetwithid"), packet.headerId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
addToHistory(packets, inputPacket.getText(), HMessage.Direction.TOSERVER);
|
addToHistory(packets, inputPacket.getText(), HMessage.Direction.TOSERVER);
|
||||||
@ -181,7 +193,7 @@ public class InjectionController extends SubForm {
|
|||||||
HPacket[] packets = parsePackets(inputPacket.getText());
|
HPacket[] packets = parsePackets(inputPacket.getText());
|
||||||
for (HPacket packet : packets) {
|
for (HPacket packet : packets) {
|
||||||
getHConnection().sendToClient(packet);
|
getHConnection().sendToClient(packet);
|
||||||
writeToLog(Color.RED, "CS -> packet with id: " + packet.headerId());
|
writeToLog(Color.RED, String.format("CS -> %s: %d", LanguageBundle.get("tab.injection.log.packetwithid"), packet.headerId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
addToHistory(packets, inputPacket.getText(), HMessage.Direction.TOCLIENT);
|
addToHistory(packets, inputPacket.getText(), HMessage.Direction.TOCLIENT);
|
||||||
@ -224,6 +236,23 @@ public class InjectionController extends SubForm {
|
|||||||
updateHistoryView(new ArrayList<>());
|
updateHistoryView(new ArrayList<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initLanguageBinding() {
|
||||||
|
lblHistory.textProperty().bind(new TranslatableString("%s", "tab.injection.history"));
|
||||||
|
lblHistory.setTooltip(new Tooltip());
|
||||||
|
lblHistory.getTooltip().textProperty().bind(new TranslatableString("%s", "tab.injection.history.tooltip"));
|
||||||
|
|
||||||
|
corruption = new TranslatableString("%s: %s", "tab.injection.corrupted", "tab.injection.corrupted.true");
|
||||||
|
lbl_corruption.textProperty().bind(corruption);
|
||||||
|
|
||||||
|
pcktInfo = new TranslatableString("%s (%s:NULL, %s:0)", "tab.injection.description.header", "tab.injection.description.id", "tab.injection.description.length");
|
||||||
|
lbl_pcktInfo.textProperty().bind(pcktInfo);
|
||||||
|
|
||||||
|
btn_sendToServer.textProperty().bind(new TranslatableString("%s", "tab.injection.send.toserver"));
|
||||||
|
btn_sendToClient.textProperty().bind(new TranslatableString("%s", "tab.injection.send.toclient"));
|
||||||
|
|
||||||
|
lnk_clearHistory.textProperty().bind(new TranslatableString("%s", "tab.injection.history.clear"));
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
HPacket[] packets = parsePackets("{l}{h:3}{i:967585}{i:9589}{s:\"furni_inscriptionfuckfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\"}{s:\"sirjonasxx-II\"}{s:\"\"}{i:188}{i:0}{i:0}{b:false}");
|
HPacket[] packets = parsePackets("{l}{h:3}{i:967585}{i:9589}{s:\"furni_inscriptionfuckfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\"}{s:\"sirjonasxx-II\"}{s:\"\"}{i:188}{i:0}{i:0}{b:false}");
|
||||||
System.out.println(new HPacket("{l}{h:2550}{s:\"ClientPerf\"\"ormance\\\"}\"}{s:\"23\"}{s:\"fps\"}{s:\"Avatars: 1, Objects: 0\"}{i:76970180}").toExpression());
|
System.out.println(new HPacket("{l}{h:2550}{s:\"ClientPerf\"\"ormance\\\"}\"}{s:\"23\"}{s:\"fps\"}{s:\"Avatars: 1, Objects: 0\"}{i:76970180}").toExpression());
|
||||||
|
@ -55,7 +55,7 @@ class LinuxTerminalLogger extends SimpleTerminalLogger {
|
|||||||
packet.toString()
|
packet.toString()
|
||||||
);
|
);
|
||||||
|
|
||||||
output.append(colorizePackets.get("DEFAULT"));
|
output.append(colorizePackets.get("ENGLISH"));
|
||||||
|
|
||||||
System.out.println(output.toString());
|
System.out.println(output.toString());
|
||||||
}
|
}
|
||||||
@ -67,7 +67,7 @@ class LinuxTerminalLogger extends SimpleTerminalLogger {
|
|||||||
System.out.println(
|
System.out.println(
|
||||||
colorizePackets.get("EXPRESSION") +
|
colorizePackets.get("EXPRESSION") +
|
||||||
expr +
|
expr +
|
||||||
colorizePackets.get("DEFAULT")
|
colorizePackets.get("ENGLISH")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
package gearth.ui.subforms.scheduler;
|
package gearth.ui.subforms.scheduler;
|
||||||
|
|
||||||
import com.tulskiy.keymaster.common.Provider;
|
import com.tulskiy.keymaster.common.Provider;
|
||||||
|
import gearth.GEarth;
|
||||||
import gearth.services.scheduler.Interval;
|
import gearth.services.scheduler.Interval;
|
||||||
import gearth.services.scheduler.Scheduler;
|
import gearth.services.scheduler.Scheduler;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
|
import gearth.ui.translations.TranslatableString;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.layout.GridPane;
|
import javafx.scene.layout.GridPane;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
@ -48,6 +52,9 @@ public class SchedulerController extends SubForm {
|
|||||||
|
|
||||||
private Scheduler<InteractableScheduleItem> scheduler = null;
|
private Scheduler<InteractableScheduleItem> scheduler = null;
|
||||||
|
|
||||||
|
private TranslatableString addoredit;
|
||||||
|
public Label lbl_tableIndex, lbl_tablePacket, lbl_tableInterval, lbl_tableDest, lbl_tableEdit, lbl_setupPacket, lbl_setupInterval;
|
||||||
|
|
||||||
|
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
scrollpane.widthProperty().addListener(observable -> header.setPrefWidth(scrollpane.getWidth()));
|
scrollpane.widthProperty().addListener(observable -> header.setPrefWidth(scrollpane.getWidth()));
|
||||||
@ -56,10 +63,6 @@ public class SchedulerController extends SubForm {
|
|||||||
txt_packet.textProperty().addListener(event -> Platform.runLater(this::updateUI));
|
txt_packet.textProperty().addListener(event -> Platform.runLater(this::updateUI));
|
||||||
txt_delay.textProperty().addListener(event -> Platform.runLater(this::updateUI));
|
txt_delay.textProperty().addListener(event -> Platform.runLater(this::updateUI));
|
||||||
|
|
||||||
btn_clear.setTooltip(new Tooltip("Clear all items"));
|
|
||||||
btn_save.setTooltip(new Tooltip("Save to file"));
|
|
||||||
btn_load.setTooltip(new Tooltip("Load from file"));
|
|
||||||
|
|
||||||
updateUI();
|
updateUI();
|
||||||
|
|
||||||
//register hotkeys
|
//register hotkeys
|
||||||
@ -76,6 +79,8 @@ public class SchedulerController extends SubForm {
|
|||||||
provider.register(KeyStroke.getKeyStroke("control shift " + ii[0]), hotKey -> switchPauseHotkey(ii[0]));
|
provider.register(KeyStroke.getKeyStroke("control shift " + ii[0]), hotKey -> switchPauseHotkey(ii[0]));
|
||||||
}
|
}
|
||||||
System.setErr(err);
|
System.setErr(err);
|
||||||
|
|
||||||
|
initLanguageBinding();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -157,7 +162,7 @@ public class SchedulerController extends SubForm {
|
|||||||
rb_outgoing.setSelected(newItem.getDestinationProperty().get() == HMessage.Direction.TOSERVER);
|
rb_outgoing.setSelected(newItem.getDestinationProperty().get() == HMessage.Direction.TOSERVER);
|
||||||
|
|
||||||
isBeingEdited = newItem;
|
isBeingEdited = newItem;
|
||||||
btn_addoredit.setText("Edit");
|
addoredit.setKey(0, "tab.scheduler.button.edit");
|
||||||
updateUI();
|
updateUI();
|
||||||
newItem.onIsBeingUpdatedTrigger();
|
newItem.onIsBeingUpdatedTrigger();
|
||||||
}
|
}
|
||||||
@ -175,7 +180,7 @@ public class SchedulerController extends SubForm {
|
|||||||
rb_incoming.setSelected(true);
|
rb_incoming.setSelected(true);
|
||||||
rb_outgoing.setSelected(false);
|
rb_outgoing.setSelected(false);
|
||||||
|
|
||||||
btn_addoredit.setText("Add");
|
addoredit.setKey(0, "tab.scheduler.button.add");
|
||||||
updateUI();
|
updateUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,9 +208,9 @@ public class SchedulerController extends SubForm {
|
|||||||
|
|
||||||
//Set extension filter
|
//Set extension filter
|
||||||
FileChooser.ExtensionFilter extFilter =
|
FileChooser.ExtensionFilter extFilter =
|
||||||
new FileChooser.ExtensionFilter("SCHED files (*.sched)", "*.sched");
|
new FileChooser.ExtensionFilter(LanguageBundle.get("tab.scheduler.filetype"), "*.sched");
|
||||||
fileChooser.getExtensionFilters().add(extFilter);
|
fileChooser.getExtensionFilters().add(extFilter);
|
||||||
fileChooser.setTitle("Save Schedule File");
|
fileChooser.setTitle(LanguageBundle.get("tab.scheduler.button.save.windowtitle"));
|
||||||
|
|
||||||
//Show save file dialog
|
//Show save file dialog
|
||||||
File file = fileChooser.showSaveDialog(parentController.getStage());
|
File file = fileChooser.showSaveDialog(parentController.getStage());
|
||||||
@ -234,9 +239,9 @@ public class SchedulerController extends SubForm {
|
|||||||
List<InteractableScheduleItem> list = new ArrayList<>();
|
List<InteractableScheduleItem> list = new ArrayList<>();
|
||||||
|
|
||||||
FileChooser fileChooser = new FileChooser();
|
FileChooser fileChooser = new FileChooser();
|
||||||
fileChooser.setTitle("Load Schedule File");
|
fileChooser.setTitle(LanguageBundle.get("tab.scheduler.button.load.windowtitle"));
|
||||||
fileChooser.getExtensionFilters().addAll(
|
fileChooser.getExtensionFilters().addAll(
|
||||||
new FileChooser.ExtensionFilter("Schedule Files", "*.sched"));
|
new FileChooser.ExtensionFilter(LanguageBundle.get("tab.scheduler.filetype"), "*.sched"));
|
||||||
File selectedFile = fileChooser.showOpenDialog(parentController.getStage());
|
File selectedFile = fileChooser.showOpenDialog(parentController.getStage());
|
||||||
if (selectedFile != null) {
|
if (selectedFile != null) {
|
||||||
|
|
||||||
@ -262,4 +267,35 @@ public class SchedulerController extends SubForm {
|
|||||||
load(list);
|
load(list);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initLanguageBinding() {
|
||||||
|
addoredit = new TranslatableString("%s", "tab.scheduler.button.add");
|
||||||
|
btn_addoredit.textProperty().bind(addoredit);
|
||||||
|
|
||||||
|
btn_clear.textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.clear"));
|
||||||
|
btn_clear.setTooltip(new Tooltip());
|
||||||
|
btn_clear.getTooltip().textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.clear.tooltip"));
|
||||||
|
|
||||||
|
btn_save.textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.save"));
|
||||||
|
btn_save.setTooltip(new Tooltip());
|
||||||
|
btn_save.getTooltip().textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.save.tooltip"));
|
||||||
|
|
||||||
|
btn_load.textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.load"));
|
||||||
|
btn_load.setTooltip(new Tooltip());
|
||||||
|
btn_load.getTooltip().textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.load.tooltip"));
|
||||||
|
|
||||||
|
lbl_tableIndex.textProperty().bind(new TranslatableString("%s", "tab.scheduler.table.index"));
|
||||||
|
lbl_tablePacket.textProperty().bind(new TranslatableString("%s", "tab.scheduler.table.packet"));
|
||||||
|
lbl_tableInterval.textProperty().bind(new TranslatableString("%s", "tab.scheduler.table.interval"));
|
||||||
|
lbl_tableDest.textProperty().bind(new TranslatableString("%s", "tab.scheduler.table.destination"));
|
||||||
|
lbl_tableEdit.textProperty().bind(new TranslatableString("%s", "tab.scheduler.table.edit"));
|
||||||
|
|
||||||
|
lbl_setupPacket.textProperty().bind(new TranslatableString("%s:", "tab.scheduler.setup.packet"));
|
||||||
|
lbl_setupInterval.textProperty().bind(new TranslatableString("%s:", "tab.scheduler.setup.interval"));
|
||||||
|
|
||||||
|
rb_incoming.textProperty().bind(new TranslatableString("%s", "tab.scheduler.direction.in"));
|
||||||
|
rb_outgoing.textProperty().bind(new TranslatableString("%s", "tab.scheduler.direction.out"));
|
||||||
|
|
||||||
|
cbx_hotkeys.textProperty().bind(new TranslatableString("%s", "tab.scheduler.hotkeys"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package gearth.ui.subforms.tools;
|
package gearth.ui.subforms.tools;
|
||||||
|
|
||||||
import gearth.services.packet_info.PacketInfoManager;
|
import gearth.services.packet_info.PacketInfoManager;
|
||||||
|
import gearth.ui.translations.TranslatableString;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.TextArea;
|
import javafx.scene.control.TextArea;
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
import javafx.scene.input.KeyCode;
|
import javafx.scene.input.KeyCode;
|
||||||
@ -27,6 +29,8 @@ public class ToolsController extends SubForm {
|
|||||||
public Button btn_toPacket;
|
public Button btn_toPacket;
|
||||||
public TextArea txt_exprArea;
|
public TextArea txt_exprArea;
|
||||||
|
|
||||||
|
public Label lbl_integer, lbl_uShort, lbl_encodingDecoding, lbl_packetToExpression;
|
||||||
|
|
||||||
//TODO: toExpression() without bytelength limit for this use only
|
//TODO: toExpression() without bytelength limit for this use only
|
||||||
|
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
@ -115,6 +119,7 @@ public class ToolsController extends SubForm {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
initLanguageBinding();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void btnEncodeInt_clicked(ActionEvent actionEvent) {
|
public void btnEncodeInt_clicked(ActionEvent actionEvent) {
|
||||||
@ -156,4 +161,20 @@ public class ToolsController extends SubForm {
|
|||||||
public void btn_toPacket_clicked(ActionEvent actionEvent) {
|
public void btn_toPacket_clicked(ActionEvent actionEvent) {
|
||||||
txt_packetArea.setText(parseToPacket(txt_exprArea.getText()).toString());
|
txt_packetArea.setText(parseToPacket(txt_exprArea.getText()).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initLanguageBinding() {
|
||||||
|
lbl_integer.textProperty().bind(new TranslatableString("%s:", "tab.tools.type.integer"));
|
||||||
|
lbl_uShort.textProperty().bind(new TranslatableString("%s:", "tab.tools.type.ushort"));
|
||||||
|
|
||||||
|
TranslatableString encode = new TranslatableString("%s", "tab.tools.button.encode");
|
||||||
|
TranslatableString decode = new TranslatableString("%s", "tab.tools.button.decode");
|
||||||
|
btnEncodeInt.textProperty().bind(encode);
|
||||||
|
btnEncodeUShort.textProperty().bind(encode);
|
||||||
|
btnDecodeInt.textProperty().bind(decode);
|
||||||
|
btnDecodeUshort.textProperty().bind(decode);
|
||||||
|
|
||||||
|
lbl_encodingDecoding.textProperty().bind(new TranslatableString("%s/%s", "tab.tools.encoding", "tab.tools.decoding"));
|
||||||
|
|
||||||
|
lbl_packetToExpression.textProperty().bind(new TranslatableString("%s <-> %s", "tab.tools.packet", "tab.tools.expression"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,16 +2,18 @@ package gearth.ui.titlebar;
|
|||||||
|
|
||||||
import gearth.GEarth;
|
import gearth.GEarth;
|
||||||
import gearth.ui.themes.ThemeFactory;
|
import gearth.ui.themes.ThemeFactory;
|
||||||
|
import gearth.ui.translations.Language;
|
||||||
|
import gearth.ui.translations.LanguageBundle;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.beans.InvalidationListener;
|
import javafx.beans.InvalidationListener;
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.scene.Parent;
|
import javafx.scene.Parent;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.control.ButtonType;
|
|
||||||
import javafx.scene.control.Label;
|
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
|
import javafx.scene.input.ContextMenuEvent;
|
||||||
import javafx.scene.input.MouseEvent;
|
import javafx.scene.input.MouseEvent;
|
||||||
import javafx.scene.layout.GridPane;
|
import javafx.scene.layout.GridPane;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
@ -19,6 +21,7 @@ import javafx.scene.layout.VBox;
|
|||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import javafx.stage.StageStyle;
|
import javafx.stage.StageStyle;
|
||||||
|
import javafx.stage.WindowEvent;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@ -30,6 +33,7 @@ public class TitleBarController {
|
|||||||
public ImageView titleIcon;
|
public ImageView titleIcon;
|
||||||
public ImageView themeBtn;
|
public ImageView themeBtn;
|
||||||
public ImageView minimizeBtn;
|
public ImageView minimizeBtn;
|
||||||
|
public MenuButton languagePicker;
|
||||||
|
|
||||||
private Stage stage;
|
private Stage stage;
|
||||||
private TitleBarConfig config;
|
private TitleBarConfig config;
|
||||||
@ -83,6 +87,9 @@ public class TitleBarController {
|
|||||||
stage.titleProperty().addListener((i) -> controller.setTitle(stage.getTitle()));
|
stage.titleProperty().addListener((i) -> controller.setTitle(stage.getTitle()));
|
||||||
controller.setTitle(stage.getTitle());
|
controller.setTitle(stage.getTitle());
|
||||||
|
|
||||||
|
controller.languagePicker.getItems().addAll(Language.getMenuItems());
|
||||||
|
controller.languagePicker.setGraphic(LanguageBundle.getLanguage().getIcon());
|
||||||
|
|
||||||
stage.getIcons().addListener((InvalidationListener) observable -> controller.updateIcon());
|
stage.getIcons().addListener((InvalidationListener) observable -> controller.updateIcon());
|
||||||
controller.updateIcon();
|
controller.updateIcon();
|
||||||
|
|
||||||
@ -96,11 +103,16 @@ public class TitleBarController {
|
|||||||
|
|
||||||
if (!config.displayThemePicker()) {
|
if (!config.displayThemePicker()) {
|
||||||
((GridPane) controller.themeBtn.getParent()).getChildren().remove(controller.themeBtn);
|
((GridPane) controller.themeBtn.getParent()).getChildren().remove(controller.themeBtn);
|
||||||
|
((GridPane) controller.languagePicker.getParent()).getChildren().remove(controller.languagePicker);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return controller;
|
return controller;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void initLanguagePicker() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void updateIcon() {
|
public void updateIcon() {
|
||||||
Platform.runLater(() -> titleIcon.setImage(stage.getIcons().size() > 0 ? stage.getIcons().get(0) :
|
Platform.runLater(() -> titleIcon.setImage(stage.getIcons().size() > 0 ? stage.getIcons().get(0) :
|
||||||
new Image(GEarth.class.getResourceAsStream(
|
new Image(GEarth.class.getResourceAsStream(
|
||||||
@ -158,5 +170,4 @@ public class TitleBarController {
|
|||||||
}
|
}
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
82
G-Earth/src/main/java/gearth/ui/translations/Language.java
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
package gearth.ui.translations;
|
||||||
|
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
|
import javafx.scene.control.ContextMenu;
|
||||||
|
import javafx.scene.control.MenuButton;
|
||||||
|
import javafx.scene.control.MenuItem;
|
||||||
|
import javafx.scene.image.ImageView;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.PropertyResourceBundle;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
public enum Language {
|
||||||
|
ENGLISH ("en"),
|
||||||
|
DUTCH ("nl"),
|
||||||
|
FRENCH ("fr"),
|
||||||
|
GERMAN ("de"),
|
||||||
|
SPANISH ("es"),
|
||||||
|
PORTUGUESE ("pt"),
|
||||||
|
ITALIAN ("it"),
|
||||||
|
FINNISH ("fi"),
|
||||||
|
TURKISH ("tr");
|
||||||
|
|
||||||
|
public final ResourceBundle messages;
|
||||||
|
private final String locale;
|
||||||
|
|
||||||
|
Language(String locale) {
|
||||||
|
this.locale = locale;
|
||||||
|
|
||||||
|
ResourceBundle resBundle;
|
||||||
|
try {
|
||||||
|
InputStream stream = Language.class.getResourceAsStream(String.format("/gearth/ui/translations/messages_%s.properties", locale));
|
||||||
|
InputStreamReader isr = new InputStreamReader(stream, StandardCharsets.UTF_8);
|
||||||
|
resBundle = new PropertyResourceBundle(isr);
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.printf("/gearth/ui/translations/messages_%s.properties%n", locale);
|
||||||
|
System.out.println("Couldn't load language file: " + locale);
|
||||||
|
resBundle = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.messages = resBundle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MenuItem asMenuItem() {
|
||||||
|
MenuItem menuItem = new MenuItem(null, getIcon());
|
||||||
|
menuItem.setOnAction(this::onSelect);
|
||||||
|
return menuItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onSelect(ActionEvent actionEvent) {
|
||||||
|
ContextMenu ctxMenu = ((MenuItem) actionEvent.getSource()).getParentPopup();
|
||||||
|
((MenuButton) ctxMenu.getOwnerNode()).setGraphic(getIcon());
|
||||||
|
LanguageBundle.setLanguage(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ImageView getIcon() {
|
||||||
|
ImageView icon = new ImageView();
|
||||||
|
icon.getStyleClass().addAll("language-icon", locale);
|
||||||
|
icon.setFitWidth(18);
|
||||||
|
icon.setFitHeight(18);
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MenuItem[] getMenuItems() {
|
||||||
|
return Arrays.stream(values())
|
||||||
|
.map(Language::asMenuItem)
|
||||||
|
.toArray(MenuItem[]::new);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Language getSystemLanguage() {
|
||||||
|
String locale = System.getProperty("user.language");
|
||||||
|
System.out.println(locale);
|
||||||
|
for (Language l : values())
|
||||||
|
if (l.locale.equals(locale))
|
||||||
|
return l;
|
||||||
|
|
||||||
|
return ENGLISH;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
package gearth.ui.translations;
|
||||||
|
|
||||||
|
import gearth.misc.Cacher;
|
||||||
|
import gearth.services.internal_extensions.extensionstore.application.GExtensionStoreController;
|
||||||
|
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class LanguageBundle extends ResourceBundle {
|
||||||
|
|
||||||
|
private static final String LANGUAGE_CACHE_KEY = "language";
|
||||||
|
private static Language current;
|
||||||
|
private static final Set<TranslatableString> requireUpdate = new HashSet<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
current = Language.valueOf((String) Cacher.get(LANGUAGE_CACHE_KEY));
|
||||||
|
} catch (Exception e) {
|
||||||
|
current = Language.getSystemLanguage();
|
||||||
|
Cacher.put(LANGUAGE_CACHE_KEY, current.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addTranslatableString(TranslatableString translatableString) {
|
||||||
|
requireUpdate.add(translatableString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Object handleGetObject(String key) {
|
||||||
|
return current.messages.getObject(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Enumeration<String> getKeys() {
|
||||||
|
return current.messages.getKeys();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setLanguage(Language lang) {
|
||||||
|
current = lang;
|
||||||
|
requireUpdate.forEach(TranslatableString::trigger);
|
||||||
|
GExtensionStoreController.reloadPage();
|
||||||
|
Cacher.put(LANGUAGE_CACHE_KEY, current.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Language getLanguage() {
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String get(String key) {
|
||||||
|
return current.messages.getString(key);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
package gearth.ui.translations;
|
||||||
|
|
||||||
|
import gearth.misc.StringifyAble;
|
||||||
|
import javafx.beans.value.ObservableValueBase;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class TranslatableString extends ObservableValueBase<String> implements StringifyAble {
|
||||||
|
private String format;
|
||||||
|
private String[] keys;
|
||||||
|
|
||||||
|
public TranslatableString(String format, String... keys) {
|
||||||
|
this.format = format;
|
||||||
|
this.keys = keys;
|
||||||
|
this.fireValueChangedEvent();
|
||||||
|
LanguageBundle.addTranslatableString(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TranslatableString(String fromString) {
|
||||||
|
constructFromString(fromString);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFormat() {
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getValue() {
|
||||||
|
return String.format(format, Arrays.stream(keys).map(LanguageBundle::get).toArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKey(int index, String key) {
|
||||||
|
keys[index] = key;
|
||||||
|
fireValueChangedEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeys(String... keys) {
|
||||||
|
this.keys = keys;
|
||||||
|
fireValueChangedEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFormat(String format) {
|
||||||
|
this.format = format;
|
||||||
|
fireValueChangedEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFormatAndKeys(String format, String... keys) {
|
||||||
|
this.format = format;
|
||||||
|
this.keys = keys;
|
||||||
|
fireValueChangedEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void trigger() {
|
||||||
|
fireValueChangedEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String stringify() {
|
||||||
|
return new JSONObject()
|
||||||
|
.put("format", format)
|
||||||
|
.put("keys", keys)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void constructFromString(String str) {
|
||||||
|
JSONObject jsonObject = new JSONObject(str);
|
||||||
|
this.format = jsonObject.getString("format");
|
||||||
|
this.keys = jsonObject.getJSONArray("keys")
|
||||||
|
.toList().stream()
|
||||||
|
.map(k -> (String) k)
|
||||||
|
.toArray(String[]::new);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TranslatableString fromString(String str) {
|
||||||
|
return new TranslatableString(str);
|
||||||
|
}
|
||||||
|
}
|
@ -5,19 +5,19 @@
|
|||||||
<?import javafx.scene.input.*?>
|
<?import javafx.scene.input.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
|
|
||||||
<BorderPane fx:id="borderPane" prefHeight="560.0" prefWidth="820.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.services.internal_extensions.uilogger.UiLoggerController">
|
<BorderPane fx:id="borderPane" prefHeight="560.0" prefWidth="820.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.services.internal_extensions.uilogger.UiLoggerController">
|
||||||
<top>
|
<top>
|
||||||
<MenuBar BorderPane.alignment="CENTER">
|
<MenuBar BorderPane.alignment="CENTER">
|
||||||
<Menu mnemonicParsing="false" text="Window">
|
<Menu fx:id="menu_window" mnemonicParsing="false" text="Window">
|
||||||
<items>
|
<items>
|
||||||
<CheckMenuItem fx:id="chkAlwaysOnTop" mnemonicParsing="false" onAction="#toggleAlwaysOnTop" text="Always on top" />
|
<CheckMenuItem fx:id="chkAlwaysOnTop" mnemonicParsing="false" onAction="#toggleAlwaysOnTop" text="Always on top" />
|
||||||
<Menu mnemonicParsing="false" text="On connect">
|
<Menu fx:id="menu_window_onConnect" mnemonicParsing="false" text="On connect">
|
||||||
<items>
|
<items>
|
||||||
<CheckMenuItem fx:id="chkOpenOnConnect" mnemonicParsing="false" text="Open window" />
|
<CheckMenuItem fx:id="chkOpenOnConnect" mnemonicParsing="false" text="Open window" />
|
||||||
<CheckMenuItem fx:id="chkResetOnConnect" mnemonicParsing="false" selected="true" text="Reset packetlogger" />
|
<CheckMenuItem fx:id="chkResetOnConnect" mnemonicParsing="false" selected="true" text="Reset packetlogger" />
|
||||||
</items>
|
</items>
|
||||||
</Menu>
|
</Menu>
|
||||||
<Menu mnemonicParsing="false" text="On disconnect">
|
<Menu fx:id="menu_window_onDisconnect" mnemonicParsing="false" text="On disconnect">
|
||||||
<items>
|
<items>
|
||||||
<CheckMenuItem fx:id="chkHideOnDisconnect" mnemonicParsing="false" selected="true" text="Hide window" />
|
<CheckMenuItem fx:id="chkHideOnDisconnect" mnemonicParsing="false" selected="true" text="Hide window" />
|
||||||
<CheckMenuItem fx:id="chkResetOnDisconnect" mnemonicParsing="false" text="Reset packetlogger" />
|
<CheckMenuItem fx:id="chkResetOnDisconnect" mnemonicParsing="false" text="Reset packetlogger" />
|
||||||
@ -25,12 +25,12 @@
|
|||||||
</Menu>
|
</Menu>
|
||||||
</items>
|
</items>
|
||||||
</Menu>
|
</Menu>
|
||||||
<Menu mnemonicParsing="false" text="View">
|
<Menu fx:id="menu_view" mnemonicParsing="false" text="View">
|
||||||
<CheckMenuItem fx:id="chkViewIncoming" mnemonicParsing="false" text="View Incoming">
|
<CheckMenuItem fx:id="chkViewIncoming" mnemonicParsing="false" text="View incoming">
|
||||||
<accelerator>
|
<accelerator>
|
||||||
<KeyCodeCombination alt="UP" code="I" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
|
<KeyCodeCombination alt="UP" code="I" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
|
||||||
</accelerator></CheckMenuItem>
|
</accelerator></CheckMenuItem>
|
||||||
<CheckMenuItem fx:id="chkViewOutgoing" mnemonicParsing="false" selected="true" text="View Outgoing">
|
<CheckMenuItem fx:id="chkViewOutgoing" mnemonicParsing="false" selected="true" text="View outgoing">
|
||||||
<accelerator>
|
<accelerator>
|
||||||
<KeyCodeCombination alt="UP" code="O" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
|
<KeyCodeCombination alt="UP" code="O" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
|
||||||
</accelerator></CheckMenuItem>
|
</accelerator></CheckMenuItem>
|
||||||
@ -38,16 +38,16 @@
|
|||||||
<accelerator>
|
<accelerator>
|
||||||
<KeyCodeCombination alt="UP" code="L" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
|
<KeyCodeCombination alt="UP" code="L" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
|
||||||
</accelerator></CheckMenuItem>
|
</accelerator></CheckMenuItem>
|
||||||
<MenuItem mnemonicParsing="false" onAction="#clearText" text="Clear text">
|
<MenuItem fx:id="menuItem_clear" mnemonicParsing="false" onAction="#clearText" text="Clear text">
|
||||||
<accelerator>
|
<accelerator>
|
||||||
<KeyCodeCombination alt="UP" code="E" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
|
<KeyCodeCombination alt="UP" code="E" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
|
||||||
</accelerator></MenuItem>
|
</accelerator></MenuItem>
|
||||||
</Menu>
|
</Menu>
|
||||||
<Menu mnemonicParsing="false" text="Packets">
|
<Menu fx:id="menu_packets" mnemonicParsing="false" text="Packets">
|
||||||
<items>
|
<items>
|
||||||
<Menu mnemonicParsing="false" text="Display Details">
|
<Menu fx:id="menu_packets_details" mnemonicParsing="false" text="Display details">
|
||||||
<items>
|
<items>
|
||||||
<Menu mnemonicParsing="false" text="Byte representation">
|
<Menu fx:id="menu_packets_details_byteRep" mnemonicParsing="false" text="Byte representation">
|
||||||
<items>
|
<items>
|
||||||
<RadioMenuItem fx:id="chkReprLegacy" mnemonicParsing="false" selected="true" text="Legacy">
|
<RadioMenuItem fx:id="chkReprLegacy" mnemonicParsing="false" selected="true" text="Legacy">
|
||||||
<toggleGroup>
|
<toggleGroup>
|
||||||
@ -59,7 +59,7 @@
|
|||||||
<RadioMenuItem fx:id="chkReprNone" mnemonicParsing="false" text="None" toggleGroup="$byterepr" />
|
<RadioMenuItem fx:id="chkReprNone" mnemonicParsing="false" text="None" toggleGroup="$byterepr" />
|
||||||
</items>
|
</items>
|
||||||
</Menu>
|
</Menu>
|
||||||
<Menu mnemonicParsing="false" text="Message">
|
<Menu fx:id="menu_packets_details_message" mnemonicParsing="false" text="Message">
|
||||||
<items>
|
<items>
|
||||||
<CheckMenuItem fx:id="chkMessageName" mnemonicParsing="false" selected="true" text="Name" />
|
<CheckMenuItem fx:id="chkMessageName" mnemonicParsing="false" selected="true" text="Name" />
|
||||||
<CheckMenuItem fx:id="chkMessageHash" mnemonicParsing="false" text="Hash" />
|
<CheckMenuItem fx:id="chkMessageHash" mnemonicParsing="false" text="Hash" />
|
||||||
@ -70,7 +70,7 @@
|
|||||||
<CheckMenuItem fx:id="chkTimestamp" mnemonicParsing="false" text="Timestamp" />
|
<CheckMenuItem fx:id="chkTimestamp" mnemonicParsing="false" text="Timestamp" />
|
||||||
</items>
|
</items>
|
||||||
</Menu>
|
</Menu>
|
||||||
<Menu mnemonicParsing="false" text="Anti-spam filter">
|
<Menu fx:id="menu_packets_antiSpam" mnemonicParsing="false" text="Anti-spam filter">
|
||||||
<items>
|
<items>
|
||||||
<RadioMenuItem fx:id="chkAntiSpam_none" mnemonicParsing="false" selected="true" text="None">
|
<RadioMenuItem fx:id="chkAntiSpam_none" mnemonicParsing="false" selected="true" text="None">
|
||||||
<toggleGroup>
|
<toggleGroup>
|
||||||
@ -84,7 +84,7 @@
|
|||||||
</items>
|
</items>
|
||||||
</Menu>
|
</Menu>
|
||||||
<CheckMenuItem fx:id="chkSkipBigPackets" mnemonicParsing="false" selected="true" text="Skip big packets" />
|
<CheckMenuItem fx:id="chkSkipBigPackets" mnemonicParsing="false" selected="true" text="Skip big packets" />
|
||||||
<MenuItem mnemonicParsing="false" onAction="#exportAll" text="Export all" />
|
<MenuItem fx:id="menuItem_exportAll" mnemonicParsing="false" onAction="#exportAll" text="Export all" />
|
||||||
</items>
|
</items>
|
||||||
</Menu>
|
</Menu>
|
||||||
</MenuBar>
|
</MenuBar>
|
||||||
@ -94,7 +94,7 @@
|
|||||||
<padding>
|
<padding>
|
||||||
<Insets left="10.0" top="1.0" />
|
<Insets left="10.0" top="1.0" />
|
||||||
</padding>
|
</padding>
|
||||||
<Label fx:id="lblViewIncoming" style="-fx-text-fill: black !important" text="View Incoming: True">
|
<Label fx:id="lblViewIncoming" style="-fx-text-fill: black !important" text="View incoming: True">
|
||||||
<FlowPane.margin>
|
<FlowPane.margin>
|
||||||
<Insets right="10.0" />
|
<Insets right="10.0" />
|
||||||
</FlowPane.margin>
|
</FlowPane.margin>
|
||||||
@ -104,7 +104,7 @@
|
|||||||
<Insets right="10.0" />
|
<Insets right="10.0" />
|
||||||
</FlowPane.margin>
|
</FlowPane.margin>
|
||||||
</Label>
|
</Label>
|
||||||
<Label fx:id="lblViewOutgoing" style="-fx-text-fill: black !important" text="View Outgoing: True">
|
<Label fx:id="lblViewOutgoing" style="-fx-text-fill: black !important" text="View outgoing: True">
|
||||||
<FlowPane.margin>
|
<FlowPane.margin>
|
||||||
<Insets right="10.0" />
|
<Insets right="10.0" />
|
||||||
</FlowPane.margin>
|
</FlowPane.margin>
|
||||||
@ -114,7 +114,7 @@
|
|||||||
<Insets right="10.0" />
|
<Insets right="10.0" />
|
||||||
</FlowPane.margin>
|
</FlowPane.margin>
|
||||||
</Label>
|
</Label>
|
||||||
<Label fx:id="lblAutoScrolll" layoutX="151.0" layoutY="11.0" style="-fx-text-fill: black !important" text="Autoscroll: True">
|
<Label fx:id="lblAutoScroll" layoutX="151.0" layoutY="11.0" style="-fx-text-fill: black !important" text="Autoscroll: True">
|
||||||
<FlowPane.margin>
|
<FlowPane.margin>
|
||||||
<Insets right="10.0" />
|
<Insets right="10.0" />
|
||||||
</FlowPane.margin></Label>
|
</FlowPane.margin></Label>
|
||||||
@ -123,7 +123,7 @@
|
|||||||
<Insets right="10.0" />
|
<Insets right="10.0" />
|
||||||
</FlowPane.margin>
|
</FlowPane.margin>
|
||||||
</Label>
|
</Label>
|
||||||
<Label fx:id="lblPacketInfo" layoutX="283.0" layoutY="11.0" style="-fx-text-fill: black !important" text="Packet info: False">
|
<Label fx:id="lblPacketInfo" layoutX="283.0" layoutY="11.0" style="-fx-text-fill: black !important" text="Packetinfo: False">
|
||||||
<FlowPane.margin>
|
<FlowPane.margin>
|
||||||
<Insets right="10.0" />
|
<Insets right="10.0" />
|
||||||
</FlowPane.margin>
|
</FlowPane.margin>
|
||||||
|
@ -5,30 +5,31 @@
|
|||||||
|
|
||||||
<!--maxHeight="19.0" minHeight="19.0"-->
|
<!--maxHeight="19.0" minHeight="19.0"-->
|
||||||
|
|
||||||
<VBox prefWidth="650.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.GEarthController">
|
<VBox prefWidth="650.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.GEarthController">
|
||||||
<TabPane id="main-tab-pane" fx:id="tabBar" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="295.0" prefWidth="650.0" tabClosingPolicy="UNAVAILABLE">
|
<TabPane id="main-tab-pane" fx:id="tabBar" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="295.0" prefWidth="650.0" tabClosingPolicy="UNAVAILABLE">
|
||||||
<Tab text="Connection">
|
<Tab fx:id="tab_Connection" text="Connection">
|
||||||
|
<text>tab.connection</text>
|
||||||
<fx:include fx:id="connection" source="subforms/connection/Connection.fxml" />
|
<fx:include fx:id="connection" source="subforms/connection/Connection.fxml" />
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab fx:id="tab_Logger" text="Logger">
|
<Tab fx:id="tab_Logger" text="Logger">
|
||||||
<fx:include fx:id="logger" source="subforms/logger/Logger.fxml" />
|
<fx:include fx:id="logger" source="subforms/logger/Logger.fxml" />
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab text="Injection">
|
<Tab fx:id="tab_Injection" text="Injection">
|
||||||
<fx:include fx:id="injection" source="subforms/injection/Injection.fxml" />
|
<fx:include fx:id="injection" source="subforms/injection/Injection.fxml" />
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab text="Tools">
|
<Tab fx:id="tab_Tools" text="Tools">
|
||||||
<fx:include fx:id="tools" source="subforms/tools/Tools.fxml" />
|
<fx:include fx:id="tools" source="subforms/tools/Tools.fxml" />
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab text="Scheduler">
|
<Tab fx:id="tab_Scheduler" text="Scheduler">
|
||||||
<fx:include fx:id="scheduler" source="subforms/scheduler/Scheduler.fxml" />
|
<fx:include fx:id="scheduler" source="subforms/scheduler/Scheduler.fxml" />
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab text="Extensions">
|
<Tab fx:id="tab_Extensions" text="Extensions">
|
||||||
<fx:include fx:id="extensions" source="subforms/extensions/Extensions.fxml" />
|
<fx:include fx:id="extensions" source="subforms/extensions/Extensions.fxml" />
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab text="Extra">
|
<Tab fx:id="tab_Extra" text="Extra">
|
||||||
<fx:include fx:id="extra" source="subforms/extra/Extra.fxml" />
|
<fx:include fx:id="extra" source="subforms/extra/Extra.fxml" />
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab text="Info">
|
<Tab fx:id="tab_Info" text="Info">
|
||||||
<fx:include fx:id="info" source="subforms/info/Info.fxml" />
|
<fx:include fx:id="info" source="subforms/info/Info.fxml" />
|
||||||
</Tab>
|
</Tab>
|
||||||
</TabPane>
|
</TabPane>
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<Label text="Port:" GridPane.halignment="CENTER" GridPane.valignment="CENTER" />
|
<Label fx:id="lblInpPort" text="Port:" GridPane.halignment="CENTER" GridPane.valignment="CENTER" />
|
||||||
<ComboBox fx:id="inpPort" disable="true" editable="true" prefWidth="183.0" GridPane.columnIndex="1">
|
<ComboBox fx:id="inpPort" disable="true" editable="true" prefWidth="183.0" GridPane.columnIndex="1">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets right="15.0" />
|
<Insets right="15.0" />
|
||||||
@ -60,7 +60,7 @@
|
|||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<Label text="Host:" GridPane.halignment="CENTER" GridPane.valignment="CENTER" />
|
<Label fx:id="lblInpHost" text="Host:" GridPane.halignment="CENTER" GridPane.valignment="CENTER" />
|
||||||
<ComboBox fx:id="inpHost" disable="true" editable="true" GridPane.columnIndex="1">
|
<ComboBox fx:id="inpHost" disable="true" editable="true" GridPane.columnIndex="1">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets right="15.0" />
|
<Insets right="15.0" />
|
||||||
@ -78,13 +78,10 @@
|
|||||||
<RowConstraints />
|
<RowConstraints />
|
||||||
<RowConstraints />
|
<RowConstraints />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<CheckBox fx:id="cbx_autodetect" mnemonicParsing="false" selected="true" text="Auto-detect" textFill="#000000a9" GridPane.columnIndex="1" GridPane.rowIndex="3">
|
<CheckBox fx:id="cbx_autodetect" mnemonicParsing="false" selected="true" text="Auto-detect" textAlignment="CENTER" textFill="#000000a9" wrapText="true" GridPane.columnIndex="1" GridPane.rowIndex="3">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="-5.0" />
|
<Insets left="-5.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
<font>
|
|
||||||
<Font size="12.0" />
|
|
||||||
</font>
|
|
||||||
</CheckBox>
|
</CheckBox>
|
||||||
<Button fx:id="btnConnect" alignment="CENTER" maxWidth="1.7976931348623157E308" onAction="#btnConnect_clicked" text="Connect" GridPane.halignment="CENTER" GridPane.rowIndex="3" GridPane.valignment="CENTER">
|
<Button fx:id="btnConnect" alignment="CENTER" maxWidth="1.7976931348623157E308" onAction="#btnConnect_clicked" text="Connect" GridPane.halignment="CENTER" GridPane.rowIndex="3" GridPane.valignment="CENTER">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
@ -114,7 +111,7 @@
|
|||||||
<RowConstraints maxHeight="86.0" minHeight="10.0" prefHeight="40.0" vgrow="SOMETIMES" />
|
<RowConstraints maxHeight="86.0" minHeight="10.0" prefHeight="40.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<Label text="Hotel version:" textFill="#000000cc" />
|
<Label fx:id="lblHotelVersion" text="Hotel version:" textFill="#000000cc" />
|
||||||
<TextField fx:id="txtfield_hotelversion" editable="false" prefHeight="17.0" prefWidth="285.0" GridPane.rowIndex="1">
|
<TextField fx:id="txtfield_hotelversion" editable="false" prefHeight="17.0" prefWidth="285.0" GridPane.rowIndex="1">
|
||||||
<opaqueInsets>
|
<opaqueInsets>
|
||||||
<Insets />
|
<Insets />
|
||||||
@ -140,10 +137,13 @@
|
|||||||
<RowConstraints minHeight="20.0" prefHeight="34.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="20.0" prefHeight="34.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Client type:" textFill="#000000cd">
|
<Label fx:id="lblClient" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="22.0" prefWidth="94.0" text="Client type:" textFill="#000000cd">
|
||||||
<padding>
|
<padding>
|
||||||
<Insets left="12.0" />
|
<Insets left="8.0" />
|
||||||
</padding>
|
</padding>
|
||||||
|
<GridPane.margin>
|
||||||
|
<Insets right="-20.0" />
|
||||||
|
</GridPane.margin>
|
||||||
</Label>
|
</Label>
|
||||||
<RadioButton fx:id="rd_unity" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Unity" GridPane.columnIndex="3" GridPane.hgrow="ALWAYS" GridPane.vgrow="ALWAYS">
|
<RadioButton fx:id="rd_unity" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Unity" GridPane.columnIndex="3" GridPane.hgrow="ALWAYS" GridPane.vgrow="ALWAYS">
|
||||||
<toggleGroup>
|
<toggleGroup>
|
||||||
@ -196,7 +196,7 @@
|
|||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets bottom="14.0" left="20.0" right="20.0" />
|
<Insets bottom="14.0" left="20.0" right="20.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
<Label text="Connection state:" textFill="#000000ba" GridPane.valignment="BOTTOM">
|
<Label fx:id="lblStateHead" text="Connection state:" textFill="#000000ba" GridPane.valignment="BOTTOM">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets bottom="5.0" left="2.0" />
|
<Insets bottom="5.0" left="2.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
@ -225,12 +225,12 @@
|
|||||||
<padding>
|
<padding>
|
||||||
<Insets bottom="7.0" top="7.0" />
|
<Insets bottom="7.0" top="7.0" />
|
||||||
</padding>
|
</padding>
|
||||||
<Label text="Game host:" textFill="#000000cc">
|
<Label fx:id="lblHost" text="Host:" textFill="#000000cc">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="10.0" />
|
<Insets left="10.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
</Label>
|
</Label>
|
||||||
<Label text="Port:" textFill="#000000cc" GridPane.rowIndex="1">
|
<Label fx:id="lblPort" text="Port:" textFill="#000000cc" GridPane.rowIndex="1">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="10.0" />
|
<Insets left="10.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
|
@ -31,11 +31,11 @@
|
|||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets bottom="-2.0" left="-2.0" right="-2.0" top="-2.0" />
|
<Insets bottom="-2.0" left="-2.0" right="-2.0" top="-2.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Title" />
|
<Label fx:id="lbl_tableTitle" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Title" />
|
||||||
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Description" GridPane.columnIndex="1" />
|
<Label fx:id="lbl_tableDesc" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Description" GridPane.columnIndex="1" />
|
||||||
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Author" GridPane.columnIndex="2" />
|
<Label fx:id="lbl_tableAuthor" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Author" GridPane.columnIndex="2" />
|
||||||
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Version" GridPane.columnIndex="3" />
|
<Label fx:id="lbl_tableVersion" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Version" GridPane.columnIndex="3" />
|
||||||
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Edit" GridPane.columnIndex="4" />
|
<Label fx:id="lbl_tableEdit" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Edit" GridPane.columnIndex="4" />
|
||||||
</GridPane>
|
</GridPane>
|
||||||
</VBox>
|
</VBox>
|
||||||
</ScrollPane>
|
</ScrollPane>
|
||||||
@ -61,13 +61,13 @@
|
|||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<Button fx:id="btn_gpython" disable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#gpythonBtnClicked" text="G-Python shell" GridPane.columnIndex="3" />
|
<Button fx:id="btn_gpython" disable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#gpythonBtnClicked" text="G-Python Shell" GridPane.columnIndex="3" />
|
||||||
<TextField fx:id="ext_port" editable="false" prefHeight="26.0" prefWidth="157.0" GridPane.columnIndex="1">
|
<TextField fx:id="ext_port" editable="false" prefHeight="26.0" prefWidth="157.0" GridPane.columnIndex="1">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="-7.0" />
|
<Insets left="-7.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
</TextField>
|
</TextField>
|
||||||
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Port:" textFill="#000000bb">
|
<Label fx:id="lbl_port" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Port:" textFill="#000000bb">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="3.0" />
|
<Insets left="3.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
|
|
||||||
<GridPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="258.0" prefWidth="650.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.subforms.extra.ExtraController">
|
<GridPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="258.0" prefWidth="650.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.subforms.extra.ExtraController">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" maxWidth="331.0" minWidth="10.0" prefWidth="318.0" />
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="331.0" minWidth="10.0" prefWidth="318.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" maxWidth="390.0" minWidth="10.0" prefWidth="247.0" />
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="390.0" minWidth="10.0" prefWidth="247.0" />
|
||||||
@ -16,8 +16,8 @@
|
|||||||
<AnchorPane prefHeight="262.0" prefWidth="318.0">
|
<AnchorPane prefHeight="262.0" prefWidth="318.0">
|
||||||
<children>
|
<children>
|
||||||
<CheckBox fx:id="cbx_alwaysOnTop" layoutX="14.0" layoutY="232.0" mnemonicParsing="false" text="Always on top" />
|
<CheckBox fx:id="cbx_alwaysOnTop" layoutX="14.0" layoutY="232.0" mnemonicParsing="false" text="Always on top" />
|
||||||
<Hyperlink fx:id="url_troubleshooting" layoutX="223.0" layoutY="232.0" text="Troubleshooting" />
|
<Hyperlink fx:id="url_troubleshooting" alignment="CENTER_RIGHT" layoutX="170.0" layoutY="232.0" prefWidth="150.0" text="Troubleshooting" />
|
||||||
<Label layoutX="14.0" layoutY="8.0" text="Notepad:" textFill="#000000bd" />
|
<Label fx:id="lbl_notepad" layoutX="14.0" layoutY="8.0" text="Notepad:" textFill="#000000bd" />
|
||||||
<TextArea fx:id="txtarea_notepad" layoutX="11.0" layoutY="31.0" prefHeight="197.0" prefWidth="312.0" />
|
<TextArea fx:id="txtarea_notepad" layoutX="11.0" layoutY="31.0" prefHeight="197.0" prefWidth="312.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
@ -77,8 +77,8 @@
|
|||||||
<RowConstraints maxHeight="29.0" minHeight="29.0" prefHeight="29.0" vgrow="SOMETIMES" />
|
<RowConstraints maxHeight="29.0" minHeight="29.0" prefHeight="29.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<Label text="Proxy IP:" />
|
<Label fx:id="lbl_proxyIp" text="Proxy IP:" />
|
||||||
<Label text="Proxy port:" GridPane.rowIndex="1" />
|
<Label fx:id="lbl_proxyPort" text="Proxy port:" GridPane.rowIndex="1" />
|
||||||
<TextField fx:id="txt_socksPort" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
<TextField fx:id="txt_socksPort" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
||||||
<opaqueInsets>
|
<opaqueInsets>
|
||||||
<Insets />
|
<Insets />
|
||||||
|
@ -20,22 +20,22 @@
|
|||||||
<Font size="18.0" />
|
<Font size="18.0" />
|
||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
<Label layoutX="260.0" layoutY="57.0" text="Habbo packet manipulator for Linux, Windows & Mac" textFill="#000000b2">
|
<Label fx:id="lbl_description" layoutX="260.0" layoutY="57.0" text="Habbo packet manipulator for Linux, Windows & Mac" textFill="#000000b2">
|
||||||
<font>
|
<font>
|
||||||
<Font size="14.0" />
|
<Font size="14.0" />
|
||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
<Label layoutX="260.0" layoutY="92.0" text="Created by:" textFill="#000000b2">
|
<Label fx:id="lbl_createdBy" layoutX="260.0" layoutY="92.0" text="Created by:" textFill="#000000b2">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="14.0" />
|
<Font name="System Bold" size="14.0" />
|
||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
<Label layoutX="344.0" layoutY="92.0" text="sirjonasxx" textFill="#000000b2">
|
<Label layoutX="363.0" layoutY="92.0" text="sirjonasxx" textFill="#000000b2">
|
||||||
<font>
|
<font>
|
||||||
<Font size="14.0" />
|
<Font size="14.0" />
|
||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
<Label layoutX="260.0" layoutY="124.0" text="Contributors:" textFill="#000000b2">
|
<Label fx:id="lbl_contrib" layoutX="260.0" layoutY="124.0" text="Contributors:" textFill="#000000b2">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="14.0" />
|
<Font name="System Bold" size="14.0" />
|
||||||
</font>
|
</font>
|
||||||
@ -75,7 +75,7 @@
|
|||||||
<Font size="14.0" />
|
<Font size="14.0" />
|
||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
<Label layoutX="491.0" layoutY="92.0" text="Links:" textFill="#000000b2">
|
<Label fx:id="lbl_links" layoutX="491.0" layoutY="92.0" text="Links:" textFill="#000000b2">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="14.0" />
|
<Font name="System Bold" size="14.0" />
|
||||||
</font>
|
</font>
|
||||||
@ -85,7 +85,7 @@
|
|||||||
<Hyperlink fx:id="link_g_tanji" layoutX="487.0" layoutY="152.0" text="Github - Tanji" />
|
<Hyperlink fx:id="link_g_tanji" layoutX="487.0" layoutY="152.0" text="Github - Tanji" />
|
||||||
<Hyperlink fx:id="link_d_gearth" layoutX="487.0" layoutY="172.0" text="Discord - G-Earth" />
|
<Hyperlink fx:id="link_d_gearth" layoutX="487.0" layoutY="172.0" text="Discord - G-Earth" />
|
||||||
<Hyperlink fx:id="link_g_store" layoutX="487.0" layoutY="212.0" text="G-ExtensionStore" />
|
<Hyperlink fx:id="link_g_store" layoutX="487.0" layoutY="212.0" text="G-ExtensionStore" />
|
||||||
<Button layoutX="537.0" layoutY="14.0" mnemonicParsing="false" onAction="#donate" prefHeight="20.0" prefWidth="100.0" text="Donate BTC" />
|
<Button fx:id="btn_donate" layoutX="537.0" layoutY="14.0" mnemonicParsing="false" onAction="#donate" prefHeight="20.0" prefWidth="100.0" text="Donate BTC" />
|
||||||
<Hyperlink fx:id="link_t_gearth" layoutX="487.0" layoutY="192.0" text="Twitter - G-Earth" />
|
<Hyperlink fx:id="link_t_gearth" layoutX="487.0" layoutY="192.0" text="Twitter - G-Earth" />
|
||||||
<!--<Hyperlink fx:id="link_d_bonnie" layoutX="400.0" layoutY="221.0" text="Discord - BonnieScripting (pt/br)" />-->
|
<!--<Hyperlink fx:id="link_d_bonnie" layoutX="400.0" layoutY="221.0" text="Discord - BonnieScripting (pt/br)" />-->
|
||||||
</children>
|
</children>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
<?import javafx.scene.text.*?>
|
<?import javafx.scene.text.*?>
|
||||||
|
|
||||||
<GridPane prefHeight="258.0" prefWidth="650.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.subforms.injection.InjectionController">
|
<GridPane prefHeight="258.0" prefWidth="650.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.subforms.injection.InjectionController">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" maxWidth="180.0" minWidth="180.0" prefWidth="180.0" />
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="180.0" minWidth="180.0" prefWidth="180.0" />
|
||||||
@ -37,12 +37,12 @@
|
|||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="13.0" right="13.0" top="4.0" />
|
<Insets left="13.0" right="13.0" top="4.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
<Text fx:id="lbl_corrruption" styleClass="corrupted-label" strokeType="OUTSIDE" strokeWidth="0.0" text="isCorrupted: True">
|
<Text fx:id="lbl_corruption" strokeType="OUTSIDE" strokeWidth="0.0" styleClass="corrupted-label" text="isCorrupted: True">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Italic" size="11.0" />
|
<Font name="System Italic" size="11.0" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
<Text fx:id="lbl_pcktInfo" fill="#000000b2" styleClass="pckt-info" nodeOrientation="LEFT_TO_RIGHT" strokeType="OUTSIDE" strokeWidth="0.0" text="header (id:NULL, length:0)" GridPane.columnIndex="1" GridPane.halignment="RIGHT">
|
<Text fx:id="lbl_pcktInfo" fill="#000000b2" nodeOrientation="LEFT_TO_RIGHT" strokeType="OUTSIDE" strokeWidth="0.0" styleClass="pckt-info" text="header (id=NULL, length=0)" GridPane.columnIndex="1" GridPane.halignment="RIGHT">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Italic" size="11.0" />
|
<Font name="System Italic" size="11.0" />
|
||||||
</font>
|
</font>
|
||||||
@ -92,7 +92,7 @@
|
|||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<Hyperlink alignment="CENTER_RIGHT" onAction="#clearHistoryClick" text="Clear" GridPane.columnIndex="1">
|
<Hyperlink fx:id="lnk_clearHistory" alignment="CENTER_RIGHT" onAction="#clearHistoryClick" text="Clear" GridPane.columnIndex="1">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets right="6.0" />
|
<Insets right="6.0" />
|
||||||
</GridPane.margin></Hyperlink>
|
</GridPane.margin></Hyperlink>
|
||||||
|
@ -31,11 +31,11 @@
|
|||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets bottom="-2.0" left="-2.0" right="-2.0" top="-2.0" />
|
<Insets bottom="-2.0" left="-2.0" right="-2.0" top="-2.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Index" />
|
<Label fx:id="lbl_tableIndex" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Index" />
|
||||||
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Packet" GridPane.columnIndex="1" />
|
<Label fx:id="lbl_tablePacket" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Packet" GridPane.columnIndex="1" />
|
||||||
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Interval" GridPane.columnIndex="2" />
|
<Label fx:id="lbl_tableInterval" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Interval" GridPane.columnIndex="2" />
|
||||||
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Destination" GridPane.columnIndex="3" />
|
<Label fx:id="lbl_tableDest" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Destination" GridPane.columnIndex="3" />
|
||||||
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Edit" GridPane.columnIndex="4" />
|
<Label fx:id="lbl_tableEdit" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Edit" GridPane.columnIndex="4" />
|
||||||
</GridPane>
|
</GridPane>
|
||||||
</VBox>
|
</VBox>
|
||||||
</ScrollPane>
|
</ScrollPane>
|
||||||
@ -67,7 +67,7 @@
|
|||||||
<Insets left="-7.0" />
|
<Insets left="-7.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
</TextField>
|
</TextField>
|
||||||
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Packet:" textFill="#000000bb">
|
<Label fx:id="lbl_setupPacket" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Packet:" textFill="#000000bb">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="3.0" />
|
<Insets left="3.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
@ -96,7 +96,7 @@
|
|||||||
<Insets right="5.0" />
|
<Insets right="5.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
</TextField>
|
</TextField>
|
||||||
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Interval:" textFill="#000000bb">
|
<Label fx:id="lbl_setupInterval" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Interval:" textFill="#000000bb">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="3.0" />
|
<Insets left="3.0" />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets/>
|
<Insets/>
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
<Label alignment="CENTER" text="Integer:">
|
<Label fx:id="lbl_integer" alignment="CENTER" text="Integer:">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="10.0"/>
|
<Insets left="10.0"/>
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
@ -80,7 +80,7 @@
|
|||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
</TextField>
|
</TextField>
|
||||||
|
|
||||||
<Label alignment="CENTER" text="Ushort:" GridPane.rowIndex="1">
|
<Label fx:id="lbl_uShort" alignment="CENTER" text="Ushort:" GridPane.rowIndex="1">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="10.0"/>
|
<Insets left="10.0"/>
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
@ -116,7 +116,7 @@
|
|||||||
</TextField>
|
</TextField>
|
||||||
|
|
||||||
</GridPane>
|
</GridPane>
|
||||||
<Label text="Encoding/decoding" textFill="#000000cc">
|
<Label fx:id="lbl_encodingDecoding" text="Encoding/Decoding" textFill="#000000cc">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="6.0" top="5.0"/>
|
<Insets left="6.0" top="5.0"/>
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
@ -179,7 +179,7 @@
|
|||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
</TextArea>
|
</TextArea>
|
||||||
</GridPane>
|
</GridPane>
|
||||||
<Label text="Packet <-> expression" textFill="#000000cc">
|
<Label fx:id="lbl_packetToExpression" text="Packet <-> Expression" textFill="#000000cc">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets left="6.0" top="2.0"/>
|
<Insets left="6.0" top="2.0"/>
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
|
BIN
G-Earth/src/main/resources/gearth/ui/themes/G-Earth/lang/DE.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/G-Earth/lang/EN.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/G-Earth/lang/ES.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/G-Earth/lang/FI.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/G-Earth/lang/FR.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/G-Earth/lang/IT.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/G-Earth/lang/NL.png
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/G-Earth/lang/PT.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/G-Earth/lang/TR.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
@ -1007,3 +1007,71 @@ VBox > .split-menu-button.last > .arrow-button {
|
|||||||
.scroll-pane {
|
.scroll-pane {
|
||||||
-fx-background-color: white;
|
-fx-background-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#language-picker {
|
||||||
|
-fx-background-color: transparent;
|
||||||
|
-fx-border-color: transparent;
|
||||||
|
-fx-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .context-menu {
|
||||||
|
-fx-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .context-menu .menu-item {
|
||||||
|
-fx-padding: 10 0 0 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .label {
|
||||||
|
-fx-padding: 0 5;
|
||||||
|
-fx-max-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .arrow,
|
||||||
|
#language-picker .arrow-button {
|
||||||
|
-fx-opacity: 0;
|
||||||
|
-fx-max-width: 0;
|
||||||
|
-fx-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .menu-item .label {
|
||||||
|
-fx-max-width: 0;
|
||||||
|
-fx-padding: 0;
|
||||||
|
-fx-label-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.en {
|
||||||
|
-fx-image: url("lang/EN.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.nl {
|
||||||
|
-fx-image: url("lang/NL.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.fr {
|
||||||
|
-fx-image: url("lang/FR.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.es {
|
||||||
|
-fx-image: url("lang/ES.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.de {
|
||||||
|
-fx-image: url("lang/DE.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.tr {
|
||||||
|
-fx-image: url("lang/TR.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.pt {
|
||||||
|
-fx-image: url("lang/PT.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.fi {
|
||||||
|
-fx-image: url("lang/FI.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.it {
|
||||||
|
-fx-image: url("lang/IT.png");
|
||||||
|
}
|
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 9.4 KiB |
@ -1113,3 +1113,71 @@ VBox > .split-menu-button.last > .arrow-button {
|
|||||||
-fx-border-radius: 10;
|
-fx-border-radius: 10;
|
||||||
-fx-border-color: rgba(240, 240, 240, 0.8);
|
-fx-border-color: rgba(240, 240, 240, 0.8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#language-picker {
|
||||||
|
-fx-background-color: transparent;
|
||||||
|
-fx-border-color: transparent;
|
||||||
|
-fx-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .context-menu {
|
||||||
|
-fx-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .context-menu .menu-item {
|
||||||
|
-fx-padding: 10 0 0 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .label {
|
||||||
|
-fx-padding: 0;
|
||||||
|
-fx-max-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .arrow,
|
||||||
|
#language-picker .arrow-button {
|
||||||
|
-fx-opacity: 0;
|
||||||
|
-fx-max-width: 0;
|
||||||
|
-fx-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .menu-item .label {
|
||||||
|
-fx-max-width: 0;
|
||||||
|
-fx-padding: 0;
|
||||||
|
-fx-label-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.en {
|
||||||
|
-fx-image: url("lang/EN.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.nl {
|
||||||
|
-fx-image: url("lang/NL.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.fr {
|
||||||
|
-fx-image: url("lang/FR.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.es {
|
||||||
|
-fx-image: url("lang/ES.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.de {
|
||||||
|
-fx-image: url("lang/DE.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.tr {
|
||||||
|
-fx-image: url("lang/TR.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.pt {
|
||||||
|
-fx-image: url("lang/PT.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.fi {
|
||||||
|
-fx-image: url("lang/FI.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.it {
|
||||||
|
-fx-image: url("lang/IT.png");
|
||||||
|
}
|
BIN
G-Earth/src/main/resources/gearth/ui/themes/Tanji/lang/DE.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/Tanji/lang/EN.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/Tanji/lang/ES.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/Tanji/lang/FI.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/Tanji/lang/FR.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/Tanji/lang/IT.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/Tanji/lang/NL.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/Tanji/lang/PT.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
G-Earth/src/main/resources/gearth/ui/themes/Tanji/lang/TR.png
Normal file
After Width: | Height: | Size: 9.0 KiB |
@ -1006,3 +1006,71 @@ VBox > .split-menu-button.last > .arrow-button {
|
|||||||
.scroll-pane {
|
.scroll-pane {
|
||||||
-fx-background-color: white;
|
-fx-background-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#language-picker {
|
||||||
|
-fx-background-color: transparent;
|
||||||
|
-fx-border-color: transparent;
|
||||||
|
-fx-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .context-menu {
|
||||||
|
-fx-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .context-menu .menu-item {
|
||||||
|
-fx-padding: 10 0 0 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .label {
|
||||||
|
-fx-padding: 0;
|
||||||
|
-fx-max-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .arrow,
|
||||||
|
#language-picker .arrow-button {
|
||||||
|
-fx-opacity: 0;
|
||||||
|
-fx-max-width: 0;
|
||||||
|
-fx-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language-picker .menu-item .label {
|
||||||
|
-fx-max-width: 0;
|
||||||
|
-fx-padding: 0;
|
||||||
|
-fx-label-padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.en {
|
||||||
|
-fx-image: url("lang/EN.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.nl {
|
||||||
|
-fx-image: url("lang/NL.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.fr {
|
||||||
|
-fx-image: url("lang/FR.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.es {
|
||||||
|
-fx-image: url("lang/ES.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.de {
|
||||||
|
-fx-image: url("lang/DE.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.tr {
|
||||||
|
-fx-image: url("lang/TR.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.pt {
|
||||||
|
-fx-image: url("lang/PT.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.fi {
|
||||||
|
-fx-image: url("lang/FI.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-icon.it {
|
||||||
|
-fx-image: url("lang/IT.png");
|
||||||
|
}
|
@ -5,54 +5,59 @@
|
|||||||
<?import javafx.scene.image.*?>
|
<?import javafx.scene.image.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
|
|
||||||
<GridPane id="title-bar" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.titlebar.TitleBarController">
|
<GridPane id="title-bar" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.titlebar.TitleBarController">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" />
|
<ColumnConstraints hgrow="SOMETIMES" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" />
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" />
|
|
||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints maxHeight="25.0" minHeight="25.0" prefHeight="25.0" vgrow="SOMETIMES" />
|
<RowConstraints maxHeight="25.0" minHeight="25.0" prefHeight="25.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<ImageView fx:id="minimizeBtn" id="minimize-button" fitHeight="25.0" fitWidth="50.0" onMouseClicked="#handleMinimizeAction" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1">
|
<ImageView id="minimize-button" fx:id="minimizeBtn" fitHeight="25.0" fitWidth="50.0" onMouseClicked="#handleMinimizeAction" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@files/minimizeButton.png" />
|
<Image url="@files/minimizeButton.png" />
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
<ImageView id="close-button" fitHeight="25.0" fitWidth="50.0" onMouseClicked="#handleCloseAction" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="2">
|
<ImageView id="close-button" fitHeight="25.0" fitWidth="50.0" onMouseClicked="#handleCloseAction" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="2">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@files/closeButton.png" />
|
<Image url="@files/closeButton.png" />
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
<GridPane maxHeight="25.0" maxWidth="1.7976931348623157E308" minHeight="25.0" minWidth="-Infinity" onMouseDragged="#handleMovementAction" onMousePressed="#handleClickAction" onMouseReleased="#handleClickReleaseAction" prefHeight="25.0">
|
<GridPane maxHeight="25.0" maxWidth="1.7976931348623157E308" minHeight="25.0" minWidth="-Infinity" onMouseDragged="#handleMovementAction" onMousePressed="#handleClickAction" onMouseReleased="#handleClickReleaseAction" prefHeight="25.0">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" maxWidth="7.0" minWidth="7.0" prefWidth="7.0" />
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="7.0" minWidth="7.0" prefWidth="7.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" />
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" />
|
||||||
<ColumnConstraints hgrow="ALWAYS" />
|
<ColumnConstraints hgrow="ALWAYS" />
|
||||||
<ColumnConstraints maxWidth="-Infinity" />
|
<ColumnConstraints maxWidth="-Infinity" />
|
||||||
<ColumnConstraints maxWidth="7.0" minWidth="7.0" prefWidth="7.0" />
|
<ColumnConstraints maxWidth="-Infinity" />
|
||||||
</columnConstraints>
|
<ColumnConstraints maxWidth="7.0" minWidth="7.0" prefWidth="7.0" />
|
||||||
<rowConstraints>
|
</columnConstraints>
|
||||||
<RowConstraints maxHeight="25.0" minHeight="25.0" prefHeight="25.0" vgrow="SOMETIMES" />
|
<rowConstraints>
|
||||||
</rowConstraints>
|
<RowConstraints maxHeight="25.0" minHeight="25.0" prefHeight="25.0" vgrow="SOMETIMES" />
|
||||||
<children>
|
</rowConstraints>
|
||||||
<ImageView id="icon" fx:id="titleIcon" fitHeight="16.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1">
|
<children>
|
||||||
<image>
|
<ImageView id="icon" fx:id="titleIcon" fitHeight="16.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1">
|
||||||
<Image url="@../themes/G-Earth/logoSmall.png" />
|
<image>
|
||||||
</image>
|
<Image url="@../themes/G-Earth/logoSmall.png" />
|
||||||
</ImageView>
|
</image>
|
||||||
<Label fx:id="titleLabel" text="Placeholder" GridPane.columnIndex="2">
|
</ImageView>
|
||||||
<padding>
|
<Label fx:id="titleLabel" text="Placeholder" GridPane.columnIndex="2">
|
||||||
<Insets left="2.0" />
|
<padding>
|
||||||
</padding>
|
<Insets left="2.0" />
|
||||||
</Label>
|
</padding>
|
||||||
<ImageView fx:id="themeBtn" id="theme-button" fitHeight="20.0" fitWidth="38.0" onMouseClicked="#toggleTheme" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="3">
|
</Label>
|
||||||
<image>
|
<MenuButton id="language-picker" fx:id="languagePicker" alignment="CENTER" contentDisplay="CENTER" graphicTextGap="0.0" mnemonicParsing="false" translateX="-5.0" GridPane.columnIndex="3">
|
||||||
<Image url="@../themes/G-Earth/themeButton.png" />
|
<items>
|
||||||
</image>
|
</items>
|
||||||
</ImageView>
|
</MenuButton>
|
||||||
</children>
|
<ImageView id="theme-button" fx:id="themeBtn" fitHeight="20.0" fitWidth="38.0" onMouseClicked="#toggleTheme" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="4">
|
||||||
</GridPane>
|
<image>
|
||||||
</children>
|
<Image url="@../themes/G-Earth/themeButton.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
</GridPane>
|
</GridPane>
|
||||||
|
@ -0,0 +1,329 @@
|
|||||||
|
# German (Translated by @MAIK#5094)
|
||||||
|
|
||||||
|
! (English messages provided below, require translation to German)
|
||||||
|
|
||||||
|
## Tabs
|
||||||
|
|
||||||
|
### Tab - Connection
|
||||||
|
tab.connection=Verbindung
|
||||||
|
tab.connection.client=Client Typ:
|
||||||
|
tab.connection.client.flash=Flash / Air
|
||||||
|
tab.connection.client.unity=Unity
|
||||||
|
tab.connection.client.nitro=Nitro
|
||||||
|
tab.connection.version=Hotel Version:
|
||||||
|
tab.connection.state=Verbindungsstatus:
|
||||||
|
tab.connection.state.notconnected=Nicht verbunden.
|
||||||
|
tab.connection.state.connected=Verbunden!
|
||||||
|
tab.connection.state.waiting=Auf Verbindung warten...
|
||||||
|
tab.connection.port=Port:
|
||||||
|
tab.connection.host=Host:
|
||||||
|
tab.connection.button.connect=Verbinden
|
||||||
|
tab.connection.button.abort=Abbrechen
|
||||||
|
tab.connection.autodetect=Automatisch
|
||||||
|
|
||||||
|
### Tab - Injection
|
||||||
|
tab.injection=Injektion
|
||||||
|
tab.injection.corrupted=Paket fehlerhaft?
|
||||||
|
tab.injection.corrupted.true=Ja
|
||||||
|
tab.injection.corrupted.false=Nein
|
||||||
|
tab.injection.description.header=Header
|
||||||
|
tab.injection.description.packets=Pakete
|
||||||
|
tab.injection.description.id=ID
|
||||||
|
tab.injection.description.length=Länge
|
||||||
|
tab.injection.send.toserver=Zum Server senden
|
||||||
|
tab.injection.send.toclient=Zum Client senden
|
||||||
|
tab.injection.history=Verlauf:
|
||||||
|
tab.injection.history.clear=Leeren
|
||||||
|
tab.injection.history.tooltip=Doppelklick, um ein Paket wiederherzustellen
|
||||||
|
tab.injection.log.packetwithid=Paket mit ID
|
||||||
|
|
||||||
|
### Tab - Tools
|
||||||
|
tab.tools=Tools
|
||||||
|
tab.tools.button.encode=kodieren
|
||||||
|
tab.tools.button.decode=dekodieren
|
||||||
|
tab.tools.type.integer=Ganze Zahl
|
||||||
|
tab.tools.type.ushort=Kurze Zahl
|
||||||
|
tab.tools.encoding=Codierung
|
||||||
|
tab.tools.decoding=Dekodierung
|
||||||
|
tab.tools.packet=Paket
|
||||||
|
tab.tools.expression=Bezeichnung
|
||||||
|
|
||||||
|
### Tab - Scheduler
|
||||||
|
tab.scheduler=Ablauf
|
||||||
|
tab.scheduler.table.index=Nr.
|
||||||
|
tab.scheduler.table.packet=Paket
|
||||||
|
tab.scheduler.table.interval=Intervall
|
||||||
|
tab.scheduler.table.destination=Server/Client
|
||||||
|
tab.scheduler.table.edit=Aktionen
|
||||||
|
tab.scheduler.setup.packet=Paket
|
||||||
|
tab.scheduler.setup.interval=Intervall
|
||||||
|
tab.scheduler.button.clear=Leeren
|
||||||
|
tab.scheduler.button.clear.tooltip=Alles löschen
|
||||||
|
tab.scheduler.button.save=S
|
||||||
|
tab.scheduler.button.save.tooltip=Datei speichern
|
||||||
|
tab.scheduler.button.save.windowtitle=Planer Datei speichern
|
||||||
|
tab.scheduler.button.load=Ö
|
||||||
|
tab.scheduler.button.load.tooltip=Datei öffnen
|
||||||
|
tab.scheduler.button.load.windowtitle=Ablauf-Datei öffnen
|
||||||
|
tab.scheduler.button.add=Hinzufügen
|
||||||
|
tab.scheduler.button.edit=Ändern
|
||||||
|
tab.scheduler.direction.in=In
|
||||||
|
tab.scheduler.direction.out=Out
|
||||||
|
tab.scheduler.hotkeys=Hotkey nutzen (Strg+Shift+Nr.)
|
||||||
|
tab.scheduler.filetype=Ablauf-Dateien (*.sched)
|
||||||
|
|
||||||
|
### Tab - Extensions
|
||||||
|
tab.extensions=Erweiterungen
|
||||||
|
tab.extensions.table.title=Titel
|
||||||
|
tab.extensions.table.description=Beschreibung
|
||||||
|
tab.extensions.table.author=Autor(en)
|
||||||
|
tab.extensions.table.version=Version
|
||||||
|
tab.extensions.table.edit=Aktionen
|
||||||
|
tab.extensions.table.edit.delete.tooltip=Verbindung der Erweiterung abbrechen
|
||||||
|
tab.extensions.table.edit.restart.tooltip=Erweiterung neustarten
|
||||||
|
tab.extensions.table.edit.uninstall.tooltip=Erweiterung deinstallieren
|
||||||
|
tab.extensions.table.edit.uninstall.confirmation=Bist du dir sicher, dass du die Erweiterung deinstallieren möchtest?
|
||||||
|
tab.extensions.port=Port
|
||||||
|
tab.extensions.button.pythonshell=G-Python Shell
|
||||||
|
tab.extensions.button.pythonshell.windowtitle=Scripting Shell
|
||||||
|
tab.extensions.button.install=Installieren
|
||||||
|
tab.extensions.button.install.windowtitle=Erweiterung installieren
|
||||||
|
tab.extensions.button.install.filetype=G-Earth Erweiterungen
|
||||||
|
tab.extensions.button.logs=Verlauf
|
||||||
|
tab.extensions.button.logs.windowtitle=Verlauf der Erweiterungen
|
||||||
|
|
||||||
|
### Tab - Extra
|
||||||
|
tab.extra=Extras
|
||||||
|
tab.extra.notepad=Notepad
|
||||||
|
tab.extra.troubleshooting=Fehlerbehebungen
|
||||||
|
tab.extra.options.alwaysontop=Immer im Vordergrund
|
||||||
|
tab.extra.options.staffpermissions=Client-seitige Staff-Berechtigungen
|
||||||
|
tab.extra.options.pythonscripting=G-Python Scripting
|
||||||
|
tab.extra.options.pythonscripting.alert.title=G-Python Installation
|
||||||
|
tab.extra.options.pythonscripting.alert.content=Bevor du G-Python verwendest, installiere die richtigen Pakete mit "pip"!
|
||||||
|
tab.extra.options.pythonscripting.alert.moreinformation=Weitere Informationen hier:
|
||||||
|
tab.extra.options.advanced=Erweitert
|
||||||
|
tab.extra.options.advanced.socks=SOCKS Proxy benutzen
|
||||||
|
tab.extra.options.advanced.proxy.ip=Proxy IP
|
||||||
|
tab.extra.options.advanced.proxy.port=Proxy Port
|
||||||
|
tab.extra.options.advanced.disabledecryption=Entschlüsselung deaktivieren
|
||||||
|
tab.extra.options.advanced.debugstdout=Debuggen nach stdout
|
||||||
|
|
||||||
|
### Tab - Info
|
||||||
|
tab.info=Info
|
||||||
|
tab.info.description=Habbo Paket-Manipulator für Linux, Windows & Mac
|
||||||
|
tab.info.donate=BTC spenden
|
||||||
|
tab.info.donate.alert.title=Bitcoins spenden
|
||||||
|
tab.info.donate.alert.content=Öffentliche Bitcoin-Adresse:
|
||||||
|
tab.info.createdby=Erstellt von
|
||||||
|
tab.info.links=Links
|
||||||
|
tab.info.contributors=Mitwirkende
|
||||||
|
|
||||||
|
|
||||||
|
## Alert
|
||||||
|
|
||||||
|
### Alert - Confirmation
|
||||||
|
alert.confirmation.windowtitle=Halt, du musst vorher noch etwas bestätigen
|
||||||
|
alert.confirmation.button.donotaskagain=Nicht nochmal nachfragen
|
||||||
|
alert.confirmation.button.remember=Meine Auswahl merken
|
||||||
|
|
||||||
|
### Alert - AdminValidator
|
||||||
|
alert.adminvalidator.content=G-Earth braucht Administrator-Rechte, damit der Flash-Client funktioniert,\n\
|
||||||
|
bitte starte G-Earth mit Administrator-Rechten neu,\n\
|
||||||
|
außer du möchtest dich mit dem Unity-Client einloggen.
|
||||||
|
|
||||||
|
### Alert - Outdated
|
||||||
|
alert.outdated.title=Huch, G-Earth ist veraltet!
|
||||||
|
alert.outdated.content.newversion=Eine neue Version von G-Earth wurde gefunden.
|
||||||
|
alert.outdated.content.update=Auf neueste Version updaten
|
||||||
|
|
||||||
|
### Alert - Invalid connection
|
||||||
|
alert.invalidconnection.content=Du hast falsche Verbindungsinformationen eingegeben, G-Earth kann dazu keine Verbindung herstellen
|
||||||
|
|
||||||
|
### Alert - Nitro root certificate
|
||||||
|
alert.rootcertificate.title=Root Zertifikat Installation
|
||||||
|
alert.rootcertificate.remember=Meine Auswahl merken
|
||||||
|
alert.rootcertificate.content=G-Earth meldet, dass du noch nicht das Root Zertifikat installiert hast.\n\
|
||||||
|
Dies ist notwendig, damit der Nitro-Client funktioniert. Möchtest du fortfahren?\n\
|
||||||
|
G-Earth wird dich nach Administrator-Rechten fragen, wenn du fortfährst.
|
||||||
|
|
||||||
|
### Alert - Already connected
|
||||||
|
alert.alreadyconnected.content=G-Earth ist bereits zu diesem Hotel verbunden.\n\
|
||||||
|
Aufgrund aktuelles Einschränkungen, kannst du nur pro Hotel nur eine Verbindung aufbauen im Raw IP Modus auf Windows.\n\
|
||||||
|
\n\
|
||||||
|
Du kannst dies mit SOCKS Proxys umgehen [Extras -> Erweitert -> SOCKS]
|
||||||
|
|
||||||
|
### Alert - Something went wrong
|
||||||
|
alert.somethingwentwrong.title=Oops, etwas ist schiefgelaufen!
|
||||||
|
alert.somethingwentwrong.content=Oops, da ist wohl etwas schiefgelaufen!\n\
|
||||||
|
\n\
|
||||||
|
Geh zu unserer Fehlerbehebungs-Seite, um das Problem zu lösen:
|
||||||
|
|
||||||
|
### Alert - Allow extension connection
|
||||||
|
alert.extconnection.content=Die Erweiterung "%s" versucht eine Verbindung zu G-Earth aufzubauen.\n\
|
||||||
|
Diese ist aber nicht in G-Earth bekannt, akzeptierst du trotzdem die Verbindung?
|
||||||
|
|
||||||
|
### Alert - G-Python error
|
||||||
|
alert.gpythonerror.title=G-Python Fehler
|
||||||
|
alert.gpythonerror.content=Etwas ist schiefgelaufen beim Start von G-Python Shell,\n\
|
||||||
|
bist du sicher, dass du die Installation richtig durchgeführt hast?\n\
|
||||||
|
\n\
|
||||||
|
Weitere Informationen hier:
|
||||||
|
|
||||||
|
|
||||||
|
## Internal extension
|
||||||
|
|
||||||
|
### Internal extension - G-Erweiterungs-Laden
|
||||||
|
ext.store.elapsedtime.second.single=Sekunde
|
||||||
|
ext.store.elapsedtime.second.multiple=Sekunden
|
||||||
|
ext.store.elapsedtime.minute.single=Minute
|
||||||
|
ext.store.elapsedtime.minute.multiple=Minuten
|
||||||
|
ext.store.elapsedtime.hour.single=Stunde
|
||||||
|
ext.store.elapsedtime.hour.multiple=Stunden
|
||||||
|
ext.store.elapsedtime.day.single=Tag
|
||||||
|
ext.store.elapsedtime.day.multiple=Tagen
|
||||||
|
ext.store.elapsedtime.week.single=Woche
|
||||||
|
ext.store.elapsedtime.week.multiple=Wochen
|
||||||
|
ext.store.elapsedtime.month.single=Monat
|
||||||
|
ext.store.elapsedtime.month.multiple=Monaten
|
||||||
|
ext.store.elapsedtime.year.single=Jahr
|
||||||
|
ext.store.elapsedtime.year.multiple=Jahren
|
||||||
|
|
||||||
|
ext.store.extension.version=Version
|
||||||
|
ext.store.extension.rating=Bewertung
|
||||||
|
ext.store.extension.madeby=von %s
|
||||||
|
ext.store.extension.lastupdated=letzte Aktualisierung vor %s
|
||||||
|
ext.store.extension.notinstore=Nicht im G-Erweiterungs-Laden gefunden
|
||||||
|
|
||||||
|
ext.store.extension.details.description=Beschreibung
|
||||||
|
ext.store.extension.details.authors=Autor(en)
|
||||||
|
ext.store.extension.details.categories=Kategorie(n)
|
||||||
|
ext.store.extension.details.technical_information=Technische Informationen:
|
||||||
|
ext.store.extension.details.click_here=Hier klicken
|
||||||
|
ext.store.extension.details.releases=Release
|
||||||
|
ext.store.extension.details.language=Sprache
|
||||||
|
ext.store.extension.details.source=Quelle
|
||||||
|
ext.store.extension.details.framework=Framework
|
||||||
|
ext.store.extension.details.systems=System(e)
|
||||||
|
ext.store.extension.details.clients=Kompatibel mit folgenden Clienten
|
||||||
|
ext.store.extension.details.screenshot=Screenshot
|
||||||
|
|
||||||
|
ext.store.extension.author.reputation=Bewertungen
|
||||||
|
ext.store.extension.author.releases=Releases
|
||||||
|
|
||||||
|
ext.store.extension.warning.requirement=Warnung: Das Framework benötigt --url:additional installations-
|
||||||
|
! IMPORTANT: the previous line has to end with the --url component like the english version
|
||||||
|
ext.store.extension.warning.unstable=Warnung: Diese Erweiterung ist als instabil gekennzeichnet!
|
||||||
|
|
||||||
|
ext.store.extension.status.await.install=Erweiterung installieren
|
||||||
|
ext.store.extension.status.await.install.message=Klick auf "OK" und warte, bis die Erweiterung installiert ist
|
||||||
|
ext.store.extension.status.await.update=Erweiterung aktualisieren
|
||||||
|
ext.store.extension.status.await.update.message=Klick auf "OK" und warte bis die Erweiterung aktualisiert worden ist
|
||||||
|
ext.store.extension.status.success.install=Installation beendet
|
||||||
|
ext.store.extension.status.success.install.message=Die Erweiterung wurde erfolgreich installiert
|
||||||
|
ext.store.extension.status.success.update=Aktualisierung beendet
|
||||||
|
ext.store.extension.status.success.update.message=Die Erweiterung wurde erfolgreich aktualisiert
|
||||||
|
ext.store.extension.status.error.install=Installation fehlgeschlagen
|
||||||
|
ext.store.extension.status.error.install.message=Die Installation ist mit folgendem Hinweis fehlgeschlagen
|
||||||
|
ext.store.extension.status.error.update=Aktualisierung fehlgeschlagen
|
||||||
|
ext.store.extension.status.error.update.message=Die Aktualisierung ist mit folgendem Hinweis fehlgeschlagen
|
||||||
|
|
||||||
|
ext.store.button.search=Suche
|
||||||
|
ext.store.button.install=Installieren
|
||||||
|
ext.store.button.installed=Installiert
|
||||||
|
ext.store.button.update=Aktualisieren
|
||||||
|
|
||||||
|
ext.store.search.title=Suche
|
||||||
|
ext.store.search.description=Du bist auf der Suche nach Erweiterungen? Hier kannst du nach Erweiterungen suchen!
|
||||||
|
ext.store.search.contenttitle=Erweiterung suchen
|
||||||
|
ext.store.search.bykeyword=Nach Stichwort suchen
|
||||||
|
ext.store.search.results=Suchergebnisse
|
||||||
|
ext.store.search.ordering=Sortieren nach:
|
||||||
|
ext.store.search.ordering.bydate.title=Neuste Releases
|
||||||
|
ext.store.search.ordering.bydate.description=Diese Erweiterungen sind vor kurzem hinzugefügt worden.
|
||||||
|
ext.store.search.ordering.bydate.contenttitle=Neuste Releases
|
||||||
|
ext.store.search.ordering.byrating.title=Beliebte Erweiterungen
|
||||||
|
ext.store.search.ordering.byrating.description=Diese Erweiterungen kommen gut bei anderen Nutzern an.
|
||||||
|
ext.store.search.ordering.byrating.contenttitle=Beliebte Erweiterungen
|
||||||
|
ext.store.search.ordering.byupdate.title=Zuletzt aktualisiert
|
||||||
|
ext.store.search.ordering.byupdate.description=Diese Erweiterungen sind vor kurzem aktualisiert worden und somit auf dem neusten Stand!
|
||||||
|
ext.store.search.ordering.byupdate.contenttitle=Vor kurzem aktualisiert
|
||||||
|
ext.store.search.filter.clients=Client
|
||||||
|
ext.store.search.filter.categories=Kategorien
|
||||||
|
ext.store.search.filter.frameworks=Framework
|
||||||
|
ext.store.search.info.automaticosfiltering=Hinweis: Du filterst automatisch nach dem Betriebssystem, welches du aktuell verwendest.
|
||||||
|
|
||||||
|
ext.store.category=Kategorien
|
||||||
|
|
||||||
|
ext.store.overview.title=Installierte Erweiterungen
|
||||||
|
ext.store.overview.description=Hier siehst du alle Erweiterungen, die du bereits installiert hast.
|
||||||
|
ext.store.overview.contenttitle=Bereits installierte Erweiterungen
|
||||||
|
ext.store.overview.folder=Ordner öffnen
|
||||||
|
|
||||||
|
ext.store.categories.title=Kategorien
|
||||||
|
ext.store.categories.description=Hier findest du die verschiedesten Kategorien. Schau sie dir mal an, vielleicht findest du eine Erweiterung, die dir helfen kann.
|
||||||
|
ext.store.categories.contenttitle=Kategorie
|
||||||
|
|
||||||
|
ext.store.fail.unzip=Beim Entpacken ist ein Fehler aufgetreten
|
||||||
|
ext.store.fail.invalidurl=Ungültige Erweiterungs-URL
|
||||||
|
ext.store.fail.notavailable=Erweiterung nicht verfügbar
|
||||||
|
ext.store.fail.alreadyexists=Oops, etwas ist beim Erstellen des Erweiterungs-Verzeichnis schiefgelaufen, existiert die Erweiterung bereits?
|
||||||
|
ext.store.fail.notfound=Erweiterung nicht gefunden
|
||||||
|
ext.store.fail.uninstall=Oops, etwas ist beim Deinstallieren der Erweiterung schiefgelaufen. Achte darauf, dass du die Erweiterung erst beendest und dann die Deinstallation beginnst.
|
||||||
|
|
||||||
|
ext.store.ordering.rating=Bewertungen
|
||||||
|
ext.store.ordering.alphabetical=Alphabet (A-Z)
|
||||||
|
ext.store.ordering.lastupdated=Zuletzt aktualisiert
|
||||||
|
ext.store.ordering.newreleases=Neuste Release
|
||||||
|
|
||||||
|
### Internal extension - Logger
|
||||||
|
ext.logger.menu.window=Fenster
|
||||||
|
ext.logger.menu.window.alwaysontop=Immer im Vordergrund
|
||||||
|
ext.logger.menu.window.onconnect=Beim verbinden ...
|
||||||
|
ext.logger.menu.window.onconnect.openwindow=Fenster öffnen
|
||||||
|
ext.logger.menu.window.onconnect.reset=Paketlogger reseten
|
||||||
|
ext.logger.menu.window.ondisconnect=Beim beenden ...
|
||||||
|
ext.logger.menu.window.ondisconnect.hidewindow=Fenster verstecken
|
||||||
|
ext.logger.menu.window.ondisconnect.reset=Paketlogger reseten
|
||||||
|
|
||||||
|
ext.logger.menu.view=Ein-/Ausblenden
|
||||||
|
ext.logger.menu.view.incoming=Incoming (ankommende) Pakete anzeigen
|
||||||
|
ext.logger.menu.view.outgoing=Outgoing (weggehende) Pakete anzeigen
|
||||||
|
ext.logger.menu.view.autoscroll=Automatisch scrollen
|
||||||
|
ext.logger.menu.view.cleartext=Inhalt leeren
|
||||||
|
|
||||||
|
ext.logger.menu.packets=Pakete
|
||||||
|
ext.logger.menu.packets.displaydetails=Details anzeigen
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep=Byte-Darstellung
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.none=Keine
|
||||||
|
ext.logger.menu.packets.displaydetails.message=Message
|
||||||
|
ext.logger.menu.packets.displaydetails.message.name=Name
|
||||||
|
ext.logger.menu.packets.displaydetails.message.hash=Hash
|
||||||
|
ext.logger.menu.packets.displaydetails.message.id=ID
|
||||||
|
ext.logger.menu.packets.displaydetails.structure=Structure
|
||||||
|
ext.logger.menu.packets.displaydetails.timestamp=Timestamp
|
||||||
|
ext.logger.menu.packets.antispam=Anti-Spam Filter
|
||||||
|
ext.logger.menu.packets.antispam.none=Keiner
|
||||||
|
ext.logger.menu.packets.antispam.low=Gering
|
||||||
|
ext.logger.menu.packets.antispam.med=Medium
|
||||||
|
ext.logger.menu.packets.antispam.high=Hoch
|
||||||
|
ext.logger.menu.packets.antispam.ultra=Sehr hoch
|
||||||
|
ext.logger.menu.packets.skipbig=Große Pakete überspringen
|
||||||
|
ext.logger.menu.packets.exportall=Alle Pakete exportieren
|
||||||
|
ext.logger.menu.packets.exportall.windowtitle=Pakete speichern
|
||||||
|
ext.logger.menu.packets.exportall.filetype=.TXT Dateien
|
||||||
|
|
||||||
|
ext.logger.state.packetinfo=Paket-Info
|
||||||
|
ext.logger.state.filtered=Gefiltert
|
||||||
|
|
||||||
|
ext.logger.element.timestamp=Zeitstempel
|
||||||
|
ext.logger.element.blocked=Blockiert
|
||||||
|
ext.logger.element.replaced=Ersetzt
|
||||||
|
ext.logger.element.direction.outgoing=Outgoing (weggehen)
|
||||||
|
ext.logger.element.direction.incoming=Incoming (ankommen)
|
||||||
|
ext.logger.element.skipped=Paket übersprungen
|
||||||
|
ext.logger.state.true=Ja
|
||||||
|
ext.logger.state.false=Nein
|
@ -0,0 +1,325 @@
|
|||||||
|
# English (Original)
|
||||||
|
|
||||||
|
## Tabs
|
||||||
|
|
||||||
|
### Tab - Connection
|
||||||
|
tab.connection=Connection
|
||||||
|
tab.connection.client=Client type:
|
||||||
|
tab.connection.client.flash=Flash / Air
|
||||||
|
tab.connection.client.unity=Unity
|
||||||
|
tab.connection.client.nitro=Nitro
|
||||||
|
tab.connection.version=Hotel version:
|
||||||
|
tab.connection.state=Connection state:
|
||||||
|
tab.connection.state.notconnected=Not connected
|
||||||
|
tab.connection.state.connected=Connected
|
||||||
|
tab.connection.state.waiting=Waiting for connection
|
||||||
|
tab.connection.port=Port:
|
||||||
|
tab.connection.host=Host:
|
||||||
|
tab.connection.button.connect=Connect
|
||||||
|
tab.connection.button.abort=Abort
|
||||||
|
tab.connection.autodetect=Auto-detect
|
||||||
|
|
||||||
|
### Tab - Injection
|
||||||
|
tab.injection=Injection
|
||||||
|
tab.injection.corrupted=isCorrupted
|
||||||
|
tab.injection.corrupted.true=True
|
||||||
|
tab.injection.corrupted.false=False
|
||||||
|
tab.injection.description.header=header
|
||||||
|
tab.injection.description.packets=packets
|
||||||
|
tab.injection.description.id=id
|
||||||
|
tab.injection.description.length=length
|
||||||
|
tab.injection.send.toserver=Send to server
|
||||||
|
tab.injection.send.toclient=Send to client
|
||||||
|
tab.injection.history=History:
|
||||||
|
tab.injection.history.clear=Clear
|
||||||
|
tab.injection.history.tooltip=Double click a packet to restore it
|
||||||
|
tab.injection.log.packetwithid=Packet with id
|
||||||
|
|
||||||
|
### Tab - Tools
|
||||||
|
tab.tools=Tools
|
||||||
|
tab.tools.button.encode=Encode
|
||||||
|
tab.tools.button.decode=Decode
|
||||||
|
tab.tools.type.integer=Integer
|
||||||
|
tab.tools.type.ushort=Ushort
|
||||||
|
tab.tools.encoding=Encoding
|
||||||
|
tab.tools.decoding=Decoding
|
||||||
|
tab.tools.packet=Packet
|
||||||
|
tab.tools.expression=Expression
|
||||||
|
### Tab - Scheduler
|
||||||
|
tab.scheduler=Scheduler
|
||||||
|
tab.scheduler.table.index=Index
|
||||||
|
tab.scheduler.table.packet=Packet
|
||||||
|
tab.scheduler.table.interval=Interval
|
||||||
|
tab.scheduler.table.destination=Destination
|
||||||
|
tab.scheduler.table.edit=Edit
|
||||||
|
tab.scheduler.setup.packet=Packet
|
||||||
|
tab.scheduler.setup.interval=Interval
|
||||||
|
tab.scheduler.button.clear=Clear
|
||||||
|
tab.scheduler.button.clear.tooltip=Clear all items
|
||||||
|
tab.scheduler.button.save=S
|
||||||
|
tab.scheduler.button.save.tooltip=Save to file
|
||||||
|
tab.scheduler.button.save.windowtitle=Save Schedule File
|
||||||
|
tab.scheduler.button.load=L
|
||||||
|
tab.scheduler.button.load.tooltip=Load from file
|
||||||
|
tab.scheduler.button.load.windowtitle=Load Schedule File
|
||||||
|
tab.scheduler.button.add=Add
|
||||||
|
tab.scheduler.button.edit=Edit
|
||||||
|
tab.scheduler.direction.in=In
|
||||||
|
tab.scheduler.direction.out=Out
|
||||||
|
tab.scheduler.hotkeys=Enable hotkeys (Ctrl+Shift+Index)
|
||||||
|
tab.scheduler.filetype=Schedule Files (*.sched)
|
||||||
|
|
||||||
|
### Tab - Extensions
|
||||||
|
tab.extensions=Extensions
|
||||||
|
tab.extensions.table.title=Title
|
||||||
|
tab.extensions.table.description=Description
|
||||||
|
tab.extensions.table.author=Author
|
||||||
|
tab.extensions.table.version=Version
|
||||||
|
tab.extensions.table.edit=Edit
|
||||||
|
tab.extensions.table.edit.delete.tooltip=Close connection with this extension
|
||||||
|
tab.extensions.table.edit.restart.tooltip=Restart this extension
|
||||||
|
tab.extensions.table.edit.uninstall.tooltip=Uninstall this extension
|
||||||
|
tab.extensions.table.edit.uninstall.confirmation=Are you sure want to uninstall this extension?
|
||||||
|
tab.extensions.port=Port
|
||||||
|
tab.extensions.button.pythonshell=G-Python shell
|
||||||
|
tab.extensions.button.pythonshell.windowtitle=Scripting shell
|
||||||
|
tab.extensions.button.install=Install
|
||||||
|
tab.extensions.button.install.windowtitle=Install extension
|
||||||
|
tab.extensions.button.install.filetype=G-Earth extensions
|
||||||
|
tab.extensions.button.logs=View logs
|
||||||
|
tab.extensions.button.logs.windowtitle=Extension Console
|
||||||
|
|
||||||
|
### Tab - Extra
|
||||||
|
tab.extra=Extra
|
||||||
|
tab.extra.notepad=Notepad
|
||||||
|
tab.extra.troubleshooting=Troubleshooting
|
||||||
|
tab.extra.options.alwaysontop=Always on top
|
||||||
|
tab.extra.options.staffpermissions=Client-side staff permissions
|
||||||
|
tab.extra.options.pythonscripting=G-Python scripting
|
||||||
|
tab.extra.options.pythonscripting.alert.title=G-Python installation
|
||||||
|
tab.extra.options.pythonscripting.alert.content=Before using G-Python, install the right packages using pip!
|
||||||
|
tab.extra.options.pythonscripting.alert.moreinformation=More information here:
|
||||||
|
tab.extra.options.advanced=Advanced
|
||||||
|
tab.extra.options.advanced.socks=Use SOCKS proxy
|
||||||
|
tab.extra.options.advanced.proxy.ip=Proxy IP
|
||||||
|
tab.extra.options.advanced.proxy.port=Proxy port
|
||||||
|
tab.extra.options.advanced.disabledecryption=Disable decryption
|
||||||
|
tab.extra.options.advanced.debugstdout=Debug to stdout
|
||||||
|
|
||||||
|
### Tab - Info
|
||||||
|
tab.info=Info
|
||||||
|
tab.info.description=Habbo packet manipulator for Linux, Windows & Mac
|
||||||
|
tab.info.donate=Donate BTC
|
||||||
|
tab.info.donate.alert.title=Donate Bitcoins
|
||||||
|
tab.info.donate.alert.content=Bitcoin public address:
|
||||||
|
tab.info.createdby=Created by
|
||||||
|
tab.info.links=Links
|
||||||
|
tab.info.contributors=Contributors
|
||||||
|
|
||||||
|
|
||||||
|
## Alert
|
||||||
|
|
||||||
|
### Alert - Confirmation
|
||||||
|
alert.confirmation.windowtitle=Confirmation Dialog
|
||||||
|
alert.confirmation.button.donotaskagain=Do not ask again
|
||||||
|
alert.confirmation.button.remember=Remember my choice
|
||||||
|
|
||||||
|
### Alert - AdminValidator
|
||||||
|
alert.adminvalidator.content=G-Earth needs admin privileges in order to work on Flash,\n\
|
||||||
|
please restart G-Earth with admin permissions unless\n\
|
||||||
|
you're using Unity
|
||||||
|
|
||||||
|
### Alert - Outdated
|
||||||
|
alert.outdated.title=G-Earth is outdated!
|
||||||
|
alert.outdated.content.newversion=A new version of G-Earth has been found
|
||||||
|
alert.outdated.content.update=Update to the latest version
|
||||||
|
|
||||||
|
### Alert - Invalid connection
|
||||||
|
alert.invalidconnection.content=You entered invalid connection information, G-Earth could not connect
|
||||||
|
|
||||||
|
### Alert - Nitro root certificate
|
||||||
|
alert.rootcertificate.title=Root certificate installation
|
||||||
|
alert.rootcertificate.remember=Remember my choice
|
||||||
|
alert.rootcertificate.content=G-Earth detected that you do not have the root certificate authority installed.\n\
|
||||||
|
This is required for Nitro to work, do you want to continue?\n\
|
||||||
|
G-Earth will ask you for Administrator permission if you do so.
|
||||||
|
|
||||||
|
### Alert - Already connected
|
||||||
|
alert.alreadyconnected.content=G-Earth is already connected to this hotel.\n\
|
||||||
|
Due to current limitations you can only connect one session per hotel to G-Earth in Raw IP mode on Windows.\n\
|
||||||
|
\n\
|
||||||
|
You can bypass this by using a SOCKS proxy [Extra -> Advanced -> SOCKS]
|
||||||
|
|
||||||
|
### Alert - Something went wrong
|
||||||
|
alert.somethingwentwrong.title=Something went wrong!
|
||||||
|
alert.somethingwentwrong.content=Something went wrong!\n\
|
||||||
|
\n\
|
||||||
|
Head over to our Troubleshooting page to solve the problem:
|
||||||
|
|
||||||
|
### Alert - Allow extension connection
|
||||||
|
alert.extconnection.content=Extension "%s" tries to connect but isn't known to G-Earth,\n\
|
||||||
|
accept this connection?
|
||||||
|
|
||||||
|
### Alert - G-Python error
|
||||||
|
alert.gpythonerror.title=G-Python error
|
||||||
|
alert.gpythonerror.content=Something went wrong launching the G-Python shell,\n\
|
||||||
|
are you sure you followed the installation guide correctly?\n\
|
||||||
|
\n\
|
||||||
|
More information here:
|
||||||
|
|
||||||
|
|
||||||
|
## Internal extension
|
||||||
|
|
||||||
|
### Internal extension - G-ExtensionStore
|
||||||
|
ext.store.elapsedtime.second.single=second
|
||||||
|
ext.store.elapsedtime.second.multiple=seconds
|
||||||
|
ext.store.elapsedtime.minute.single=minute
|
||||||
|
ext.store.elapsedtime.minute.multiple=minutes
|
||||||
|
ext.store.elapsedtime.hour.single=hour
|
||||||
|
ext.store.elapsedtime.hour.multiple=hours
|
||||||
|
ext.store.elapsedtime.day.single=day
|
||||||
|
ext.store.elapsedtime.day.multiple=days
|
||||||
|
ext.store.elapsedtime.week.single=week
|
||||||
|
ext.store.elapsedtime.week.multiple=weeks
|
||||||
|
ext.store.elapsedtime.month.single=month
|
||||||
|
ext.store.elapsedtime.month.multiple=months
|
||||||
|
ext.store.elapsedtime.year.single=year
|
||||||
|
ext.store.elapsedtime.year.multiple=years
|
||||||
|
|
||||||
|
ext.store.extension.version=Version
|
||||||
|
ext.store.extension.rating=Rating
|
||||||
|
ext.store.extension.madeby=By %s
|
||||||
|
ext.store.extension.lastupdated=last updated %s ago
|
||||||
|
ext.store.extension.notinstore=Not found in G-ExtensionStore
|
||||||
|
|
||||||
|
ext.store.extension.details.description=Description
|
||||||
|
ext.store.extension.details.authors=Author(s)
|
||||||
|
ext.store.extension.details.categories=Categories
|
||||||
|
ext.store.extension.details.technical_information=Technical information
|
||||||
|
ext.store.extension.details.click_here=Click here
|
||||||
|
ext.store.extension.details.releases=Releases
|
||||||
|
ext.store.extension.details.language=Language
|
||||||
|
ext.store.extension.details.source=Source
|
||||||
|
ext.store.extension.details.framework=Framework
|
||||||
|
ext.store.extension.details.systems=Systems
|
||||||
|
ext.store.extension.details.clients=Compatible clients
|
||||||
|
ext.store.extension.details.screenshot=Screenshot
|
||||||
|
|
||||||
|
ext.store.extension.author.reputation=reputation
|
||||||
|
ext.store.extension.author.releases=releases
|
||||||
|
|
||||||
|
ext.store.extension.warning.requirement=Warning: the framework requires --url:additional installations-
|
||||||
|
! IMPORTANT: the previous line has to end with the --url component like the english version
|
||||||
|
ext.store.extension.warning.unstable=Warning: this extension has been marked unstable!
|
||||||
|
|
||||||
|
ext.store.extension.status.await.install=Install extension
|
||||||
|
ext.store.extension.status.await.install.message=Press "OK" and wait while the extension is begin installed
|
||||||
|
ext.store.extension.status.await.update=Update extension
|
||||||
|
ext.store.extension.status.await.update.message=Press "OK" and wait while the extension is begin updated
|
||||||
|
ext.store.extension.status.success.install=Install completed
|
||||||
|
ext.store.extension.status.success.install.message=Extension installation completed successfully
|
||||||
|
ext.store.extension.status.success.update=Update completed
|
||||||
|
ext.store.extension.status.success.update.message=Extension update completed successfully
|
||||||
|
ext.store.extension.status.error.install=Install failed
|
||||||
|
ext.store.extension.status.error.install.message=Installation failed with the following message
|
||||||
|
ext.store.extension.status.error.update=Update failed
|
||||||
|
ext.store.extension.status.error.update.message=Update failed with the following message
|
||||||
|
|
||||||
|
ext.store.button.search=Search
|
||||||
|
ext.store.button.install=Install
|
||||||
|
ext.store.button.installed=Installed
|
||||||
|
ext.store.button.update=Update
|
||||||
|
|
||||||
|
ext.store.search.title=Search
|
||||||
|
ext.store.search.description=Find the extension that fits your needs
|
||||||
|
ext.store.search.contenttitle=Search extensions
|
||||||
|
ext.store.search.bykeyword=Search by keyword
|
||||||
|
ext.store.search.results=Search results
|
||||||
|
ext.store.search.ordering=Extensions ordering
|
||||||
|
ext.store.search.ordering.bydate.title=New Releases
|
||||||
|
ext.store.search.ordering.bydate.description=Extensions that were recently added to the G-ExtensionStore
|
||||||
|
ext.store.search.ordering.bydate.contenttitle=New Releases
|
||||||
|
ext.store.search.ordering.byrating.title=Popular Extensions
|
||||||
|
ext.store.search.ordering.byrating.description=Extensions sorted by rating
|
||||||
|
ext.store.search.ordering.byrating.contenttitle=Popular Extensions
|
||||||
|
ext.store.search.ordering.byupdate.title=Recently Updated
|
||||||
|
ext.store.search.ordering.byupdate.description=Extensions that were recently updated
|
||||||
|
ext.store.search.ordering.byupdate.contenttitle=Recently Updated
|
||||||
|
ext.store.search.filter.clients=Clients
|
||||||
|
ext.store.search.filter.categories=Categories
|
||||||
|
ext.store.search.filter.frameworks=Frameworks
|
||||||
|
ext.store.search.info.automaticosfiltering=Info: you are automatically filtering on the OS you use
|
||||||
|
|
||||||
|
ext.store.category=Category
|
||||||
|
|
||||||
|
ext.store.overview.title=Installed Extensions
|
||||||
|
ext.store.overview.description=Extensions that are already installed into G-Earth
|
||||||
|
ext.store.overview.contenttitle=Installed extensions
|
||||||
|
ext.store.overview.folder=Open folder
|
||||||
|
|
||||||
|
ext.store.categories.title=Categories
|
||||||
|
ext.store.categories.description=Explore the different kinds of extensions G-Earth has to offer
|
||||||
|
ext.store.categories.contenttitle=Categories
|
||||||
|
|
||||||
|
ext.store.fail.unzip=Error while unzipping
|
||||||
|
ext.store.fail.invalidurl=Invalid extension URL
|
||||||
|
ext.store.fail.notavailable=Extension not available in repository
|
||||||
|
ext.store.fail.alreadyexists=Something went wrong creating the extension directory, does the extension already exist?
|
||||||
|
ext.store.fail.notfound=Extension wasn't found
|
||||||
|
ext.store.fail.uninstall=Something went wrong with uninstalling the extension, make sure to disconnect the extension if it was still running.
|
||||||
|
|
||||||
|
ext.store.ordering.rating=Rating
|
||||||
|
ext.store.ordering.alphabetical=Alphabetical
|
||||||
|
ext.store.ordering.lastupdated=Last updated
|
||||||
|
ext.store.ordering.newreleases=New releases
|
||||||
|
|
||||||
|
### Internal extension - Logger
|
||||||
|
ext.logger.menu.window=Window
|
||||||
|
ext.logger.menu.window.alwaysontop=Always on top
|
||||||
|
ext.logger.menu.window.onconnect=On connect
|
||||||
|
ext.logger.menu.window.onconnect.openwindow=Open window
|
||||||
|
ext.logger.menu.window.onconnect.reset=Reset packetlogger
|
||||||
|
ext.logger.menu.window.ondisconnect=On disconnect
|
||||||
|
ext.logger.menu.window.ondisconnect.hidewindow=Hide window
|
||||||
|
ext.logger.menu.window.ondisconnect.reset=Reset packetlogger
|
||||||
|
|
||||||
|
ext.logger.menu.view=View
|
||||||
|
ext.logger.menu.view.incoming=View incoming
|
||||||
|
ext.logger.menu.view.outgoing=View outgoing
|
||||||
|
ext.logger.menu.view.autoscroll=Autoscroll
|
||||||
|
ext.logger.menu.view.cleartext=Clear text
|
||||||
|
|
||||||
|
ext.logger.menu.packets=Packets
|
||||||
|
ext.logger.menu.packets.displaydetails=Display details
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep=Byte representation
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.none=None
|
||||||
|
ext.logger.menu.packets.displaydetails.message=Message
|
||||||
|
ext.logger.menu.packets.displaydetails.message.name=Name
|
||||||
|
ext.logger.menu.packets.displaydetails.message.hash=Hash
|
||||||
|
ext.logger.menu.packets.displaydetails.message.id=Id
|
||||||
|
ext.logger.menu.packets.displaydetails.structure=Structure
|
||||||
|
ext.logger.menu.packets.displaydetails.timestamp=Timestamp
|
||||||
|
ext.logger.menu.packets.antispam=Anti-spam filter
|
||||||
|
ext.logger.menu.packets.antispam.none=None
|
||||||
|
ext.logger.menu.packets.antispam.low=Low
|
||||||
|
ext.logger.menu.packets.antispam.med=Medium
|
||||||
|
ext.logger.menu.packets.antispam.high=High
|
||||||
|
ext.logger.menu.packets.antispam.ultra=Ultra
|
||||||
|
ext.logger.menu.packets.skipbig=Skip big packets
|
||||||
|
ext.logger.menu.packets.exportall=Export all
|
||||||
|
ext.logger.menu.packets.exportall.windowtitle=Save Packets
|
||||||
|
ext.logger.menu.packets.exportall.filetype=TXT files
|
||||||
|
|
||||||
|
ext.logger.state.packetinfo=Packet info
|
||||||
|
ext.logger.state.filtered=Filtered
|
||||||
|
ext.logger.element.timestamp=timestamp
|
||||||
|
ext.logger.element.blocked=Blocked
|
||||||
|
ext.logger.element.replaced=Replaced
|
||||||
|
ext.logger.element.direction.outgoing=Outgoing
|
||||||
|
ext.logger.element.direction.incoming=Incoming
|
||||||
|
ext.logger.element.skipped=packet skipped
|
||||||
|
ext.logger.state.true=True
|
||||||
|
ext.logger.state.false=False
|
@ -0,0 +1,325 @@
|
|||||||
|
# Spanish (Translated by denio4321)
|
||||||
|
|
||||||
|
## Tabs
|
||||||
|
|
||||||
|
### Tab - Connection
|
||||||
|
tab.connection=Conexión
|
||||||
|
tab.connection.client=Tipo de cliente:
|
||||||
|
tab.connection.client.flash=Flash / Air
|
||||||
|
tab.connection.client.unity=Unity
|
||||||
|
tab.connection.client.nitro=Nitro
|
||||||
|
tab.connection.version=Versión del Hotel:
|
||||||
|
tab.connection.state=Estado de la conexión:
|
||||||
|
tab.connection.state.notconnected=No conectado
|
||||||
|
tab.connection.state.connected=Conectado
|
||||||
|
tab.connection.state.waiting=Esperando para la conexión
|
||||||
|
tab.connection.port=Puerto:
|
||||||
|
tab.connection.host=Host:
|
||||||
|
tab.connection.button.connect=Conectar
|
||||||
|
tab.connection.button.abort=Abortar
|
||||||
|
tab.connection.autodetect=Auto-Detección
|
||||||
|
|
||||||
|
### Tab - Injection
|
||||||
|
tab.injection=Inyectar
|
||||||
|
tab.injection.corrupted=isCorrupted
|
||||||
|
tab.injection.corrupted.true=True
|
||||||
|
tab.injection.corrupted.false=False
|
||||||
|
tab.injection.description.header=header
|
||||||
|
tab.injection.description.packets=packets
|
||||||
|
tab.injection.description.id=id
|
||||||
|
tab.injection.description.length=longitud
|
||||||
|
tab.injection.send.toserver=Enviar al servidor
|
||||||
|
tab.injection.send.toclient=Enviar a cliente
|
||||||
|
tab.injection.history=Historial
|
||||||
|
tab.injection.history.clear=Borrar
|
||||||
|
tab.injection.history.tooltip=Doble click para restaurar un paquete.
|
||||||
|
tab.injection.log.packetwithid=Paquete con id
|
||||||
|
|
||||||
|
### Tab - Tools
|
||||||
|
tab.tools=Herramientas
|
||||||
|
tab.tools.button.encode=Codificar
|
||||||
|
tab.tools.button.decode=Decodificar
|
||||||
|
tab.tools.type.integer=Integer
|
||||||
|
tab.tools.type.ushort=Ushort
|
||||||
|
tab.tools.encoding=Encoding
|
||||||
|
tab.tools.decoding=Decoding
|
||||||
|
tab.tools.packet=Packet
|
||||||
|
tab.tools.expression=Expression
|
||||||
|
|
||||||
|
### Tab - Scheduler
|
||||||
|
tab.scheduler=Planificador
|
||||||
|
tab.scheduler.table.index=Index
|
||||||
|
tab.scheduler.table.packet=Packet
|
||||||
|
tab.scheduler.table.interval=Interval
|
||||||
|
tab.scheduler.table.destination=Destinación
|
||||||
|
tab.scheduler.table.edit=Editar
|
||||||
|
tab.scheduler.setup.packet=Packet
|
||||||
|
tab.scheduler.setup.interval=Interval
|
||||||
|
tab.scheduler.button.clear=Borrar
|
||||||
|
tab.scheduler.button.clear.tooltip=Borrar todos los items
|
||||||
|
tab.scheduler.button.save=S
|
||||||
|
tab.scheduler.button.save.tooltip=Guardar a un archivo
|
||||||
|
tab.scheduler.button.save.windowtitle=Guardar Planificador a un archivo
|
||||||
|
tab.scheduler.button.load=L
|
||||||
|
tab.scheduler.button.load.tooltip=Cargar de un archivo
|
||||||
|
tab.scheduler.button.load.windowtitle=Cargar archivo Planificador
|
||||||
|
tab.scheduler.button.add=Añadir
|
||||||
|
tab.scheduler.button.edit=Editar
|
||||||
|
tab.scheduler.direction.in=In
|
||||||
|
tab.scheduler.direction.out=Out
|
||||||
|
tab.scheduler.hotkeys=Activar Atajos (Ctrl+Shift+Index)
|
||||||
|
tab.scheduler.filetype=Archivos Planificador (*.sched)
|
||||||
|
|
||||||
|
### Tab - Extensions
|
||||||
|
tab.extensions=Extensiones
|
||||||
|
tab.extensions.table.title=Titulo
|
||||||
|
tab.extensions.table.description=Descripción
|
||||||
|
tab.extensions.table.author=Autor
|
||||||
|
tab.extensions.table.version=Versión
|
||||||
|
tab.extensions.table.edit=Editar
|
||||||
|
tab.extensions.table.edit.delete.tooltip=Cerrar la conexión de esta extensión
|
||||||
|
tab.extensions.table.edit.restart.tooltip=Reiniciar extensión
|
||||||
|
tab.extensions.table.edit.uninstall.tooltip=Desinstalar esta extensión
|
||||||
|
tab.extensions.table.edit.uninstall.confirmation=¿Seguro que quieres desinstalar esta extensión?
|
||||||
|
tab.extensions.port=Port
|
||||||
|
tab.extensions.button.pythonshell=G-Python shell
|
||||||
|
tab.extensions.button.pythonshell.windowtitle=Scripting shell
|
||||||
|
tab.extensions.button.install=Instalar
|
||||||
|
tab.extensions.button.install.windowtitle=Instalar extensión
|
||||||
|
tab.extensions.button.install.filetype=Extensiones de G-Earth
|
||||||
|
tab.extensions.button.logs=Ver logs
|
||||||
|
tab.extensions.button.logs.windowtitle=Consola de extensión
|
||||||
|
|
||||||
|
### Tab - Extra
|
||||||
|
tab.extra=Extra
|
||||||
|
tab.extra.notepad=Notepad
|
||||||
|
tab.extra.troubleshooting=Ayuda
|
||||||
|
tab.extra.options.alwaysontop=Mostrar siempre arriba
|
||||||
|
tab.extra.options.staffpermissions=Permisos Staff en cliente
|
||||||
|
tab.extra.options.pythonscripting=G-Python scripting
|
||||||
|
tab.extra.options.pythonscripting.alert.title=Instalación de G-Python
|
||||||
|
tab.extra.options.pythonscripting.alert.content=Antes de instalar G-Python, instala los paquetes con pip!
|
||||||
|
tab.extra.options.pythonscripting.alert.moreinformation=Mas información aqui:
|
||||||
|
tab.extra.options.advanced=Avanzado
|
||||||
|
tab.extra.options.advanced.socks=Usar proxy SOCKS
|
||||||
|
tab.extra.options.advanced.proxy.ip=Proxy IP
|
||||||
|
tab.extra.options.advanced.proxy.port=Proxy port
|
||||||
|
tab.extra.options.advanced.disabledecryption=Deshabilitar desencriptación
|
||||||
|
tab.extra.options.advanced.debugstdout=Debug to stdout
|
||||||
|
|
||||||
|
### Tab - Info
|
||||||
|
tab.info=Info
|
||||||
|
tab.info.description=Habbo packet manipulador para Linux, Windows & Mac
|
||||||
|
tab.info.donate=Donar BTC
|
||||||
|
tab.info.donate.alert.title=Donar Bitcoins
|
||||||
|
tab.info.donate.alert.content=Dirección pública de bitcoins:
|
||||||
|
tab.info.createdby=Creado por
|
||||||
|
tab.info.links=Enlaces
|
||||||
|
tab.info.contributors=Contribuidores
|
||||||
|
|
||||||
|
|
||||||
|
## Alert
|
||||||
|
|
||||||
|
### Alert - Confirmation
|
||||||
|
alert.confirmation.windowtitle=Diálogo de confirmación
|
||||||
|
alert.confirmation.button.donotaskagain=No me preguntes de nuevo
|
||||||
|
alert.confirmation.button.remember=Recordar mi elección
|
||||||
|
|
||||||
|
### Alert - AdminValidator
|
||||||
|
alert.adminvalidator.content=G-Earth necesita permisos de administrador para funcionar en flash,\n\
|
||||||
|
por favor reinicie G-Earth con los permisos si no estás usando Unity
|
||||||
|
|
||||||
|
### Alert - Outdated
|
||||||
|
alert.outdated.title=¡G-Earth está desactualizado!
|
||||||
|
alert.outdated.content.newversion=Una nueva versión de G-Earth ha sido encontrada
|
||||||
|
alert.outdated.content.update=Actualizar a la versión mas reciente
|
||||||
|
|
||||||
|
### Alert - Invalid connection
|
||||||
|
alert.invalidconnection.content=Has introducida una conexión inválida, G-Earth no se ha podido conectar
|
||||||
|
|
||||||
|
### Alert - Nitro root certificate
|
||||||
|
alert.rootcertificate.title=Instalar Certificado Root
|
||||||
|
alert.rootcertificate.remember=Recordar mi elección
|
||||||
|
alert.rootcertificate.content=G-Earth detectó que no tienes un certificado de autoridad root instalado.\n\
|
||||||
|
Esto es requerido para que Nitro funcione, ¿Quieres continuar?\n\
|
||||||
|
G-Earth te pedirá permisos de administrador para instalarlo.
|
||||||
|
|
||||||
|
### Alert - Already connected
|
||||||
|
alert.alreadyconnected.content=G-Earth ya está conectado a este hotel.\n\
|
||||||
|
Debido a actuales limitaciones solo puedes conectarte una sesión por hotel a G-Earth en el modo Raw IP.\n\
|
||||||
|
\n\
|
||||||
|
Puedes saltarte esto usando un proxy SOCKS [Extra -> Avanzado -> SOCKS]
|
||||||
|
|
||||||
|
### Alert - Something went wrong
|
||||||
|
alert.somethingwentwrong.title=¡Algo ha salido mal!
|
||||||
|
alert.somethingwentwrong.content=¡Algo ha salido mal!\n\
|
||||||
|
\n\
|
||||||
|
Ve a nuestra página de ayuda para solucionar el problema:
|
||||||
|
|
||||||
|
### Alert - Allow extension connection
|
||||||
|
alert.extconnection.content=La extensión "%s" intenta conectarse pero es desconocida para G-Earth,\n\
|
||||||
|
¿Aceptar conexión?
|
||||||
|
|
||||||
|
### Alert - G-Python error
|
||||||
|
alert.gpythonerror.title=G-Python error
|
||||||
|
alert.gpythonerror.content=Algo ha salido mal al iniciar la G-Python shell,\n\
|
||||||
|
¿Estás seguro de que has seguido la guia correctamente?\n\
|
||||||
|
\n\
|
||||||
|
Mas información aqui:
|
||||||
|
|
||||||
|
|
||||||
|
## Internal extension
|
||||||
|
|
||||||
|
### Internal extension - G-ExtensionStore
|
||||||
|
ext.store.elapsedtime.second.single=segundo
|
||||||
|
ext.store.elapsedtime.second.multiple=segundos
|
||||||
|
ext.store.elapsedtime.minute.single=minuto
|
||||||
|
ext.store.elapsedtime.minute.multiple=minutos
|
||||||
|
ext.store.elapsedtime.hour.single=hora
|
||||||
|
ext.store.elapsedtime.hour.multiple=horas
|
||||||
|
ext.store.elapsedtime.day.single=día
|
||||||
|
ext.store.elapsedtime.day.multiple=dias
|
||||||
|
ext.store.elapsedtime.week.single=semana
|
||||||
|
ext.store.elapsedtime.week.multiple=semanas
|
||||||
|
ext.store.elapsedtime.month.single=mes
|
||||||
|
ext.store.elapsedtime.month.multiple=meses
|
||||||
|
ext.store.elapsedtime.year.single=año
|
||||||
|
ext.store.elapsedtime.year.multiple=años
|
||||||
|
|
||||||
|
ext.store.extension.version=Versión
|
||||||
|
ext.store.extension.rating=Valoración
|
||||||
|
ext.store.extension.madeby=Por %s
|
||||||
|
ext.store.extension.lastupdated=Última actualización hace %s
|
||||||
|
ext.store.extension.notinstore=No encontrado en G-ExtensionStore
|
||||||
|
|
||||||
|
ext.store.extension.details.description=Descripción
|
||||||
|
ext.store.extension.details.authors=Autor(es)
|
||||||
|
ext.store.extension.details.categories=Categorias
|
||||||
|
ext.store.extension.details.technical_information=Información técnica
|
||||||
|
ext.store.extension.details.click_here=Pulsa aqui
|
||||||
|
ext.store.extension.details.releases=Versiones
|
||||||
|
ext.store.extension.details.language=Lenguaje
|
||||||
|
ext.store.extension.details.source=Source
|
||||||
|
ext.store.extension.details.framework=Framework
|
||||||
|
ext.store.extension.details.systems=Sistemas
|
||||||
|
ext.store.extension.details.clients=Clientes compatibles
|
||||||
|
ext.store.extension.details.screenshot=Capturas de pantalla
|
||||||
|
|
||||||
|
ext.store.extension.author.reputation=reputación
|
||||||
|
ext.store.extension.author.releases=Versiones
|
||||||
|
ext.store.extension.warning.requirement=Atención: el framework requiere --url:instalaciones adicionales-
|
||||||
|
! IMPORTANT: the previous line has to end with the --url component like the english version
|
||||||
|
ext.store.extension.warning.unstable=Atención: ¡Esta extensión está marcada como no estable!
|
||||||
|
|
||||||
|
ext.store.extension.status.await.install=Instalar extensión
|
||||||
|
ext.store.extension.status.await.install.message=Presione "OK" y espere mientras comienza la instalación
|
||||||
|
ext.store.extension.status.await.update=Actualizar extension
|
||||||
|
ext.store.extension.status.await.update.message=Presione "OK" y espere mientras comienza la actualización
|
||||||
|
ext.store.extension.status.success.install=Instalación completa
|
||||||
|
ext.store.extension.status.success.install.message=La instalación se ha completado satisfactoriamente
|
||||||
|
ext.store.extension.status.success.update=Actualización completa
|
||||||
|
ext.store.extension.status.success.update.message=La actualización se ha completado satisfactoriamente
|
||||||
|
ext.store.extension.status.error.install=Instalación fallida
|
||||||
|
ext.store.extension.status.error.install.message=Instalación fallida con el siguiente mensaje
|
||||||
|
ext.store.extension.status.error.update=Actualización fallida
|
||||||
|
ext.store.extension.status.error.update.message=Actualización fallida con el siguiente mensaje
|
||||||
|
|
||||||
|
ext.store.button.search=Buscar
|
||||||
|
ext.store.button.install=Instalar
|
||||||
|
ext.store.button.installed=Instalados
|
||||||
|
ext.store.button.update=Actualizar
|
||||||
|
|
||||||
|
ext.store.search.title=Buscar
|
||||||
|
ext.store.search.description=Busca la extensión que mejor satisface tus necesidades
|
||||||
|
ext.store.search.contenttitle=Buscar extensions
|
||||||
|
ext.store.search.bykeyword=Buscar por palabras clave
|
||||||
|
ext.store.search.results=Resultados de la busqueda
|
||||||
|
ext.store.search.ordering=Orden de extensiones
|
||||||
|
ext.store.search.ordering.bydate.title=Nuevas extensiones
|
||||||
|
ext.store.search.ordering.bydate.description=Extensiones que han sido recientemente añadidas a la G-ExtensionStore
|
||||||
|
ext.store.search.ordering.bydate.contenttitle=Nuevas extensiones
|
||||||
|
ext.store.search.ordering.byrating.title=Extensiones populares
|
||||||
|
ext.store.search.ordering.byrating.description=Extensiones por valoración
|
||||||
|
ext.store.search.ordering.byrating.contenttitle=Extensiones populares
|
||||||
|
ext.store.search.ordering.byupdate.title=Recientemente actualizadas
|
||||||
|
ext.store.search.ordering.byupdate.description=Extensiones que han sido recientemente actualizadas
|
||||||
|
ext.store.search.ordering.byupdate.contenttitle=Recientemente actualizadas
|
||||||
|
ext.store.search.filter.clients=Clientes
|
||||||
|
ext.store.search.filter.categories=Categorias
|
||||||
|
ext.store.search.filter.frameworks=Frameworks
|
||||||
|
ext.store.search.info.automaticosfiltering=Nota: automaticamente se filtran las extensiones disponibles al OS que estás utilizando
|
||||||
|
|
||||||
|
ext.store.category=Categoria
|
||||||
|
|
||||||
|
ext.store.overview.title=Extensiones Instaladas
|
||||||
|
ext.store.overview.description=Extensiones que ya están instaladas en G-Earth
|
||||||
|
ext.store.overview.contenttitle=Extensiones Instaladas
|
||||||
|
ext.store.overview.folder=Abrir carpeta
|
||||||
|
|
||||||
|
ext.store.categories.title=Categorias
|
||||||
|
ext.store.categories.description=Explora las diferentes categorias que G-Earth tiene por ofrecerte
|
||||||
|
ext.store.categories.contenttitle=Categorias
|
||||||
|
|
||||||
|
ext.store.fail.unzip=Error while unzipping
|
||||||
|
ext.store.fail.invalidurl=Invalid extension URL
|
||||||
|
ext.store.fail.notavailable=Extension not available in repository
|
||||||
|
ext.store.fail.alreadyexists=Something went wrong creating the extension directory, does the extension already exist?
|
||||||
|
ext.store.fail.notfound=Extension wasn't found
|
||||||
|
ext.store.fail.uninstall=Something went wrong with uninstalling the extension, make sure to disconnect the extension if it was still running.
|
||||||
|
|
||||||
|
ext.store.ordering.rating=Rating
|
||||||
|
ext.store.ordering.alphabetical=Alphabetical
|
||||||
|
ext.store.ordering.lastupdated=Last updated
|
||||||
|
ext.store.ordering.newreleases=New releases
|
||||||
|
|
||||||
|
### Internal extension - Logger
|
||||||
|
ext.logger.menu.window=Ventana
|
||||||
|
ext.logger.menu.window.alwaysontop=Siempre arriba
|
||||||
|
ext.logger.menu.window.onconnect=Al conectar
|
||||||
|
ext.logger.menu.window.onconnect.openwindow=Abrir ventana
|
||||||
|
ext.logger.menu.window.onconnect.reset=Reiniciar packetlogger
|
||||||
|
ext.logger.menu.window.ondisconnect=Al desconectar
|
||||||
|
ext.logger.menu.window.ondisconnect.hidewindow=Esconder ventana
|
||||||
|
ext.logger.menu.window.ondisconnect.reset=Reiniciar packetlogger
|
||||||
|
|
||||||
|
ext.logger.menu.view=Vista
|
||||||
|
ext.logger.menu.view.incoming=Mostrar incoming
|
||||||
|
ext.logger.menu.view.outgoing=Mostrar outgoing
|
||||||
|
ext.logger.menu.view.autoscroll=Autoscroll
|
||||||
|
ext.logger.menu.view.cleartext=Limpiar texto
|
||||||
|
|
||||||
|
ext.logger.menu.packets=Packets
|
||||||
|
ext.logger.menu.packets.displaydetails=Mostrar detalles
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep=Representación Byte
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.none=Ninguno
|
||||||
|
ext.logger.menu.packets.displaydetails.message=Message
|
||||||
|
ext.logger.menu.packets.displaydetails.message.name=Nombre
|
||||||
|
ext.logger.menu.packets.displaydetails.message.hash=Hash
|
||||||
|
ext.logger.menu.packets.displaydetails.message.id=Id
|
||||||
|
ext.logger.menu.packets.displaydetails.structure=Structure
|
||||||
|
ext.logger.menu.packets.displaydetails.timestamp=Hora
|
||||||
|
ext.logger.menu.packets.antispam=Filtro Anti-spam
|
||||||
|
ext.logger.menu.packets.antispam.none=None
|
||||||
|
ext.logger.menu.packets.antispam.low=Bajo
|
||||||
|
ext.logger.menu.packets.antispam.med=Medio
|
||||||
|
ext.logger.menu.packets.antispam.high=Alto
|
||||||
|
ext.logger.menu.packets.antispam.ultra=Ultra
|
||||||
|
ext.logger.menu.packets.skipbig=Saltar paquetes grandes
|
||||||
|
ext.logger.menu.packets.exportall=Exportar todos
|
||||||
|
ext.logger.menu.packets.exportall.windowtitle=Guardar Packets
|
||||||
|
ext.logger.menu.packets.exportall.filetype=archivos TXT
|
||||||
|
|
||||||
|
ext.logger.state.packetinfo=Packet info
|
||||||
|
ext.logger.state.filtered=Filtrado
|
||||||
|
|
||||||
|
ext.logger.element.timestamp=hora
|
||||||
|
ext.logger.element.blocked=Bloqueado
|
||||||
|
ext.logger.element.replaced=Replazado
|
||||||
|
ext.logger.element.direction.outgoing=Outgoing
|
||||||
|
ext.logger.element.direction.incoming=Incoming
|
||||||
|
ext.logger.element.skipped=packet skipped
|
||||||
|
ext.logger.state.true=True
|
||||||
|
ext.logger.state.false=False
|
@ -0,0 +1,325 @@
|
|||||||
|
# Finnish (Translated by justeeri)
|
||||||
|
|
||||||
|
## Tabs
|
||||||
|
|
||||||
|
### Tab - Connection
|
||||||
|
tab.connection=Yhteys
|
||||||
|
tab.connection.client=Asiakasohjelma:
|
||||||
|
tab.connection.client.flash=Flash / Air
|
||||||
|
tab.connection.client.unity=Unity
|
||||||
|
tab.connection.client.nitro=Nitro
|
||||||
|
tab.connection.version=Versio
|
||||||
|
tab.connection.state=Yhteyden tila:
|
||||||
|
tab.connection.state.notconnected=Ei yhdistetty
|
||||||
|
tab.connection.state.connected=Yhdistetty
|
||||||
|
tab.connection.state.waiting=Odotetaan yhteyttä
|
||||||
|
tab.connection.port=Portti:
|
||||||
|
tab.connection.host=Isäntä:
|
||||||
|
tab.connection.button.connect=Yhdistä
|
||||||
|
tab.connection.button.abort=Keskeytä
|
||||||
|
tab.connection.autodetect=Automaattitunnistus
|
||||||
|
|
||||||
|
### Tab - Injection
|
||||||
|
tab.injection=Injektio
|
||||||
|
tab.injection.corrupted=onVioittunut
|
||||||
|
tab.injection.corrupted.true=Tosi
|
||||||
|
tab.injection.corrupted.false=Epätosi
|
||||||
|
tab.injection.description.header=otsake
|
||||||
|
tab.injection.description.packets=paketit
|
||||||
|
tab.injection.description.id=id
|
||||||
|
tab.injection.description.length=pituus
|
||||||
|
tab.injection.send.toserver=Lähetä palvelimelle
|
||||||
|
tab.injection.send.toclient=Lähetä asiakkaalle
|
||||||
|
tab.injection.history=Historia:
|
||||||
|
tab.injection.history.clear=Tyhjennä
|
||||||
|
tab.injection.history.tooltip=Palauta paketti kaksoisnapsauttamalla sitä
|
||||||
|
tab.injection.log.packetwithid=Paketti tunnuksella
|
||||||
|
|
||||||
|
### Tab - Tools
|
||||||
|
tab.tools=Työkalut
|
||||||
|
tab.tools.button.encode=Enkoodaa
|
||||||
|
tab.tools.button.decode=Dekoodaa
|
||||||
|
tab.tools.type.integer=Integer
|
||||||
|
tab.tools.type.ushort=Ushort
|
||||||
|
tab.tools.encoding=Enkoodaus
|
||||||
|
tab.tools.decoding=Dekoodaus
|
||||||
|
tab.tools.packet=Paketti
|
||||||
|
tab.tools.expression=Ilmaisu
|
||||||
|
|
||||||
|
### Tab - Scheduler
|
||||||
|
tab.scheduler=Ajastus
|
||||||
|
tab.scheduler.table.index=Indeksi
|
||||||
|
tab.scheduler.table.packet=Paketti
|
||||||
|
tab.scheduler.table.interval=Aikaväli
|
||||||
|
tab.scheduler.table.destination=Kohde
|
||||||
|
tab.scheduler.table.edit=Muokkaa
|
||||||
|
tab.scheduler.setup.packet=Paketti
|
||||||
|
tab.scheduler.setup.interval=Aikaväli
|
||||||
|
tab.scheduler.button.clear=Tyhjennä
|
||||||
|
tab.scheduler.button.clear.tooltip=Tyhjennä kaikki kohteet
|
||||||
|
tab.scheduler.button.save=S
|
||||||
|
tab.scheduler.button.save.tooltip=Tallenna tiedostoon
|
||||||
|
tab.scheduler.button.save.windowtitle=Tallenna ajastustiedosto
|
||||||
|
tab.scheduler.button.load=L
|
||||||
|
tab.scheduler.button.load.tooltip=Lataa tiedostosta
|
||||||
|
tab.scheduler.button.load.windowtitle=Lataa ajastustiedosto
|
||||||
|
tab.scheduler.button.add=Lisää
|
||||||
|
tab.scheduler.button.edit=Muokkaa
|
||||||
|
tab.scheduler.direction.in=Sisään
|
||||||
|
tab.scheduler.direction.out=Ulos
|
||||||
|
tab.scheduler.hotkeys=Salli oikopolut (Ctrl+Shift+Index)
|
||||||
|
tab.scheduler.filetype=Ajastustiedostot (*.sched)
|
||||||
|
|
||||||
|
### Tab - Extensions
|
||||||
|
tab.extensions=Laajennukset
|
||||||
|
tab.extensions.table.title=Otsikko
|
||||||
|
tab.extensions.table.description=Kuvaus
|
||||||
|
tab.extensions.table.author=Tekijä
|
||||||
|
tab.extensions.table.version=Versio
|
||||||
|
tab.extensions.table.edit=Muokkaa
|
||||||
|
tab.extensions.table.edit.delete.tooltip=Katkaise yhteys tähän laajennukseen
|
||||||
|
tab.extensions.table.edit.restart.tooltip=Käynnistä tämä laajennus uudelleen
|
||||||
|
tab.extensions.table.edit.uninstall.tooltip=Poista tämän laajennuksen asennus
|
||||||
|
tab.extensions.table.edit.uninstall.confirmation=Haluatko varmasti poistaa tämän laajennuksen?
|
||||||
|
tab.extensions.port=Portti
|
||||||
|
tab.extensions.button.pythonshell=G-Python shell
|
||||||
|
tab.extensions.button.pythonshell.windowtitle=Scripting shell
|
||||||
|
tab.extensions.button.install=Asenna
|
||||||
|
tab.extensions.button.install.windowtitle=Asenna laajennus
|
||||||
|
tab.extensions.button.install.filetype=G-Earth -laajennus
|
||||||
|
tab.extensions.button.logs=Näytä lokit
|
||||||
|
tab.extensions.button.logs.windowtitle=Laajennuskonsoli
|
||||||
|
|
||||||
|
### Tab - Extra
|
||||||
|
tab.extra=Lisät
|
||||||
|
tab.extra.notepad=Muistio
|
||||||
|
tab.extra.troubleshooting=Vianmääritys
|
||||||
|
tab.extra.options.alwaysontop=Aina ylimmäisenä
|
||||||
|
tab.extra.options.staffpermissions=Client-side staffioikeudet
|
||||||
|
tab.extra.options.pythonscripting=G-Python scripting
|
||||||
|
tab.extra.options.pythonscripting.alert.title=G-Python -asennus
|
||||||
|
tab.extra.options.pythonscripting.alert.content=Ennen kuin käytät G-Pythonia, asenna oikeat paketit pip:llä!
|
||||||
|
tab.extra.options.pythonscripting.alert.moreinformation=Lisätietoja täältä:
|
||||||
|
tab.extra.options.advanced=Lisäasetukset
|
||||||
|
tab.extra.options.advanced.socks=Käytä SOCKS-proxya
|
||||||
|
tab.extra.options.advanced.proxy.ip=Proxy IP
|
||||||
|
tab.extra.options.advanced.proxy.port=Proxy-portti
|
||||||
|
tab.extra.options.advanced.disabledecryption=Poista salauksen purku käytöstä
|
||||||
|
tab.extra.options.advanced.debugstdout=Virheenkorjaus stdoutiin
|
||||||
|
|
||||||
|
### Tab - Info
|
||||||
|
tab.info=Tiedot
|
||||||
|
tab.info.description=Habbo pakettimanipulaattori Linuxille, Windowsille ja Macille
|
||||||
|
tab.info.donate=Lahjoita BTC
|
||||||
|
tab.info.donate.alert.title=Lahjoita Bitcoineja
|
||||||
|
tab.info.donate.alert.content=Bitcoin julkinen osoite:
|
||||||
|
tab.info.createdby=Luonut
|
||||||
|
tab.info.links=Linkit
|
||||||
|
tab.info.contributors=Avustajat
|
||||||
|
|
||||||
|
|
||||||
|
## Alert
|
||||||
|
|
||||||
|
### Alert - Confirmation
|
||||||
|
alert.confirmation.windowtitle=Vahvistus
|
||||||
|
alert.confirmation.button.donotaskagain=Älä kysy uudestaan
|
||||||
|
alert.confirmation.button.remember=Muista valintani
|
||||||
|
|
||||||
|
### Alert - AdminValidator
|
||||||
|
alert.adminvalidator.content=G-Earth tarvitsee järjestelmänvalvojan oikeudet toimiakseen Flashin kanssa.\n\
|
||||||
|
Käynnistä G-Earth uudelleen järjestelmänvalvojan oikeuksilla, jos et käytä Unityä.
|
||||||
|
|
||||||
|
### Alert - Outdated
|
||||||
|
alert.outdated.title=G-Earth on vanhentunut!
|
||||||
|
alert.outdated.content.newversion=G-Earthista on löydetty uusi versio
|
||||||
|
alert.outdated.content.update=Päivitä uusimpaan versioon
|
||||||
|
|
||||||
|
### Alert - Invalid connection
|
||||||
|
alert.invalidconnection.content=Annoit virheelliset yhteystiedot, G-Earth ei voinut muodostaa yhteyttä
|
||||||
|
|
||||||
|
### Alert - Nitro root certificate
|
||||||
|
alert.rootcertificate.title=Juurivarmenteen asennus
|
||||||
|
alert.rootcertificate.remember=Muista valintani
|
||||||
|
alert.rootcertificate.content=G-Earth havaitsi, että sinulla ei ole juurivarmentajaa asennettuna.\n\
|
||||||
|
Tämä tarvitaan, jotta Nitro toimii, haluatko jatkaa?\n\
|
||||||
|
G-Earth pyytää sinulta järjestelmänvalvojan lupaa, jos teet niin.
|
||||||
|
|
||||||
|
### Alert - Already connected
|
||||||
|
alert.alreadyconnected.content=G-Earth on jo yhdistetty tähän hotelliin.\n\
|
||||||
|
Nykyisten rajoitusten vuoksi voit yhdistää vain yhden istunnon hotellia kohti G-Earthiin Raw IP -tilassa Windowsissa.\n\
|
||||||
|
\n\
|
||||||
|
Voit ohittaa tämän käyttämällä SOCKS-välityspalvelinta [Lisät -> Lisäasetukset -> SOCKS]
|
||||||
|
|
||||||
|
### Alert - Something went wrong
|
||||||
|
alert.somethingwentwrong.title=Jokin meni pieleen!
|
||||||
|
alert.somethingwentwrong.content=Jokin meni pieleen!\n\
|
||||||
|
\n\
|
||||||
|
Siirry Vianetsintä-sivullemme ratkaistaksesi ongelma:
|
||||||
|
|
||||||
|
### Alert - Allow extension connection
|
||||||
|
alert.extconnection.content=Laajennus "%s" yrittää muodostaa yhteyden, mutta G-Earth ei tunne sitä.\n\
|
||||||
|
Hyväksytkö tämän yhteyden?
|
||||||
|
|
||||||
|
### Alert - G-Python error
|
||||||
|
alert.gpythonerror.title=G-Python virhe
|
||||||
|
alert.gpythonerror.content=Jotain meni pieleen G-Python-kuoren käynnistämisessä.\n\
|
||||||
|
Oletko varma, että noudatit asennusopasta oikein?\n\
|
||||||
|
\n\
|
||||||
|
Lisätietoja täältä:
|
||||||
|
|
||||||
|
|
||||||
|
## Internal extension
|
||||||
|
|
||||||
|
### Internal extension - G-ExtensionStore
|
||||||
|
ext.store.elapsedtime.second.single=sekunti
|
||||||
|
ext.store.elapsedtime.second.multiple=sekuntia
|
||||||
|
ext.store.elapsedtime.minute.single=minuutti
|
||||||
|
ext.store.elapsedtime.minute.multiple=minuuttia
|
||||||
|
ext.store.elapsedtime.hour.single=tunti
|
||||||
|
ext.store.elapsedtime.hour.multiple=tuntia
|
||||||
|
ext.store.elapsedtime.day.single=päivä
|
||||||
|
ext.store.elapsedtime.day.multiple=päivää
|
||||||
|
ext.store.elapsedtime.week.single=viikko
|
||||||
|
ext.store.elapsedtime.week.multiple=viikkoa
|
||||||
|
ext.store.elapsedtime.month.single=kuukausi
|
||||||
|
ext.store.elapsedtime.month.multiple=kuukautta
|
||||||
|
ext.store.elapsedtime.year.single=vuosi
|
||||||
|
ext.store.elapsedtime.year.multiple=vuotta
|
||||||
|
|
||||||
|
ext.store.extension.version=Versio
|
||||||
|
ext.store.extension.rating=Arvio
|
||||||
|
ext.store.extension.madeby=Tekijä: %s
|
||||||
|
ext.store.extension.lastupdated=viimeksi päivitetty %s sitten
|
||||||
|
ext.store.extension.notinstore=Ei löydy G-ExtensionStoresta
|
||||||
|
|
||||||
|
ext.store.extension.details.description=Kuvaus
|
||||||
|
ext.store.extension.details.authors=Tekijä(t))
|
||||||
|
ext.store.extension.details.categories=Kategoriat
|
||||||
|
ext.store.extension.details.technical_information=Tekniset tiedot
|
||||||
|
ext.store.extension.details.click_here=Klikkaa tästä
|
||||||
|
ext.store.extension.details.releases=Julkaisut
|
||||||
|
ext.store.extension.details.language=Ohjelmointikieli
|
||||||
|
ext.store.extension.details.source=Lähde
|
||||||
|
ext.store.extension.details.framework=Kehys
|
||||||
|
ext.store.extension.details.systems=Järjestelmät
|
||||||
|
ext.store.extension.details.clients=Yhteensopivat asiakasohjelmat
|
||||||
|
ext.store.extension.details.screenshot=Kuvakaappaus
|
||||||
|
|
||||||
|
ext.store.extension.author.reputation=maine
|
||||||
|
ext.store.extension.author.releases=julkaisua
|
||||||
|
|
||||||
|
ext.store.extension.warning.requirement=Varoitus: runko vaatii --url:lisäasennuksia-
|
||||||
|
! IMPORTANT: the previous line has to end with the --url component like the english version
|
||||||
|
ext.store.extension.warning.unstable=Warning: tämä laajennus on merkitty epävakaaksi!
|
||||||
|
|
||||||
|
ext.store.extension.status.await.install=Asenna laajennus
|
||||||
|
ext.store.extension.status.await.install.message=Paina "OK" ja odota laajennuksen asentumista
|
||||||
|
ext.store.extension.status.await.update=Päivitä laajennus
|
||||||
|
ext.store.extension.status.await.update.message=Paina "OK" ja odota laajennuksen päivittymistä
|
||||||
|
ext.store.extension.status.success.install=Asennus valmis
|
||||||
|
ext.store.extension.status.success.install.message=Laajennuksen asennus onnistui
|
||||||
|
ext.store.extension.status.success.update=Päivitys valmis
|
||||||
|
ext.store.extension.status.success.update.message=Laajennuksen päivitys onnistui
|
||||||
|
ext.store.extension.status.error.install=Asennus epäonnistui
|
||||||
|
ext.store.extension.status.error.install.message=Asennus epäonnistui seuraavalla viestillä
|
||||||
|
ext.store.extension.status.error.update=Päivitys epäonnistui
|
||||||
|
ext.store.extension.status.error.update.message=Päivitys epäonnistui seuraavalla viestillä
|
||||||
|
|
||||||
|
ext.store.button.search=Etsi
|
||||||
|
ext.store.button.install=Asenna
|
||||||
|
ext.store.button.installed=Asennettu
|
||||||
|
ext.store.button.update=Päivitä
|
||||||
|
|
||||||
|
ext.store.search.title=Hae
|
||||||
|
ext.store.search.description=Hae tarpeitasi vastaava laajennus
|
||||||
|
ext.store.search.contenttitle=Hae laajennuksia
|
||||||
|
ext.store.search.bykeyword=Etsi hakusanalla
|
||||||
|
ext.store.search.results=Hakutulokset
|
||||||
|
ext.store.search.ordering=Laajennusten järjestys
|
||||||
|
ext.store.search.ordering.bydate.title=Uudet julkaisut
|
||||||
|
ext.store.search.ordering.bydate.description=Laajennukset, jotka on äskettäin lisätty G-ExtensionStoreen
|
||||||
|
ext.store.search.ordering.bydate.contenttitle=Uudet julkaisut
|
||||||
|
ext.store.search.ordering.byrating.title=Suositut laajennukset
|
||||||
|
ext.store.search.ordering.byrating.description=Laajennukset lajiteltu arvioiden mukaan
|
||||||
|
ext.store.search.ordering.byrating.contenttitle=Suositut laajennukset
|
||||||
|
ext.store.search.ordering.byupdate.title=Äskettäin päivitetty
|
||||||
|
ext.store.search.ordering.byupdate.description=Hiljattain päivitetyt laajennukset
|
||||||
|
ext.store.search.ordering.byupdate.contenttitle=Äskettäin päivitetty
|
||||||
|
ext.store.search.filter.clients=Asiakasohjelmat
|
||||||
|
ext.store.search.filter.categories=Kategoriat
|
||||||
|
ext.store.search.filter.frameworks=Kehykset
|
||||||
|
ext.store.search.info.automaticosfiltering=Info: suodatat automaattisesti käyttämäsi käyttöjärjestelmän mukaan
|
||||||
|
|
||||||
|
ext.store.category=Kategoria
|
||||||
|
|
||||||
|
ext.store.overview.title=Asennetut laajennukset
|
||||||
|
ext.store.overview.description=Laajennukset, jotka on jo asennettu G-Earthiin
|
||||||
|
ext.store.overview.contenttitle=Asennetut laajennukset
|
||||||
|
ext.store.overview.folder=Avaa kansio
|
||||||
|
|
||||||
|
ext.store.categories.title=Kategoriat
|
||||||
|
ext.store.categories.description=Tutustu G-Earthin tarjoamiin erilaisiin laajennuksiin
|
||||||
|
ext.store.categories.contenttitle=Kategoriat
|
||||||
|
|
||||||
|
ext.store.fail.unzip=Virhe purettaessa
|
||||||
|
ext.store.fail.invalidurl=Virheellinen laajennuksen URL-osoite
|
||||||
|
ext.store.fail.notavailable=Laajennus ei ole saatavilla arkistossa
|
||||||
|
ext.store.fail.alreadyexists=Jotain meni pieleen laajennushakemiston luomisessa. Onko laajennus jo olemassa?
|
||||||
|
ext.store.fail.notfound=Laajennusta ei löytynyt
|
||||||
|
ext.store.fail.uninstall=Jotain meni pieleen laajennuksen poistamisessa. Muista pysäyttää laajennus, jos se on edelleen käynnissä.
|
||||||
|
|
||||||
|
ext.store.ordering.rating=Pisteet
|
||||||
|
ext.store.ordering.alphabetical=Aakkosjärjestys
|
||||||
|
ext.store.ordering.lastupdated=Viimeksi päivitetty
|
||||||
|
ext.store.ordering.newreleases=Uudet julkaisut
|
||||||
|
|
||||||
|
### Internal extension - Logger
|
||||||
|
ext.logger.menu.window=Ikkuna
|
||||||
|
ext.logger.menu.window.alwaysontop=Aina päälimmäisenä
|
||||||
|
ext.logger.menu.window.onconnect=Yhdistäessä
|
||||||
|
ext.logger.menu.window.onconnect.openwindow=Avaa ikkuna
|
||||||
|
ext.logger.menu.window.onconnect.reset=Nollaa pakettiloki
|
||||||
|
ext.logger.menu.window.ondisconnect=Yhteyden katketessa
|
||||||
|
ext.logger.menu.window.ondisconnect.hidewindow=Piilota ikkuna
|
||||||
|
ext.logger.menu.window.ondisconnect.reset=Nollaa pakettiloki
|
||||||
|
|
||||||
|
ext.logger.menu.view=Näkymä
|
||||||
|
ext.logger.menu.view.incoming=Näytä sisääntulevat
|
||||||
|
ext.logger.menu.view.outgoing=Näytä uloslähtevät
|
||||||
|
ext.logger.menu.view.autoscroll=Automaattirullaus
|
||||||
|
ext.logger.menu.view.cleartext=Tyhjennä teksti
|
||||||
|
|
||||||
|
ext.logger.menu.packets=Paketit
|
||||||
|
ext.logger.menu.packets.displaydetails=Näytä tiedot
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep=Bittiesitys
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raaka hex
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.none=Ei mikään
|
||||||
|
ext.logger.menu.packets.displaydetails.message=Viesti
|
||||||
|
ext.logger.menu.packets.displaydetails.message.name=Nimi
|
||||||
|
ext.logger.menu.packets.displaydetails.message.hash=Tiiviste
|
||||||
|
ext.logger.menu.packets.displaydetails.message.id=Id
|
||||||
|
ext.logger.menu.packets.displaydetails.structure=Rakenne
|
||||||
|
ext.logger.menu.packets.displaydetails.timestamp=Aika
|
||||||
|
ext.logger.menu.packets.antispam=Spämmifiltteri
|
||||||
|
ext.logger.menu.packets.antispam.none=Ei käytössä
|
||||||
|
ext.logger.menu.packets.antispam.low=Alhainen
|
||||||
|
ext.logger.menu.packets.antispam.med=Keskitaso
|
||||||
|
ext.logger.menu.packets.antispam.high=Korkea
|
||||||
|
ext.logger.menu.packets.antispam.ultra=Ultra
|
||||||
|
ext.logger.menu.packets.skipbig=Ohita suuret paketit
|
||||||
|
ext.logger.menu.packets.exportall=Vie kaikki
|
||||||
|
ext.logger.menu.packets.exportall.windowtitle=Tallenna paketit
|
||||||
|
ext.logger.menu.packets.exportall.filetype=Tekstitiedostot
|
||||||
|
|
||||||
|
ext.logger.state.packetinfo=Paketin tiedot
|
||||||
|
ext.logger.state.filtered=Suodatettu
|
||||||
|
ext.logger.element.timestamp=aika
|
||||||
|
ext.logger.element.blocked=Estetty
|
||||||
|
ext.logger.element.replaced=Korvattu
|
||||||
|
ext.logger.element.direction.outgoing=Uloslähtevät
|
||||||
|
ext.logger.element.direction.incoming=Sisääntulevat
|
||||||
|
ext.logger.element.skipped=paketti ohitettu
|
||||||
|
ext.logger.state.true=Tosi
|
||||||
|
ext.logger.state.false=Epätosi
|
@ -0,0 +1,328 @@
|
|||||||
|
# French (Translated by Lande)
|
||||||
|
|
||||||
|
# Note by Lande : sorry if some translations are wrong, incorrect, missing or otherwise
|
||||||
|
# thank you for taking the time to modify them
|
||||||
|
|
||||||
|
## Tabs
|
||||||
|
|
||||||
|
### Tab - Connection
|
||||||
|
tab.connection=Connexion
|
||||||
|
tab.connection.client=Type de client:
|
||||||
|
tab.connection.client.flash=Flash / Air
|
||||||
|
tab.connection.client.unity=Unity
|
||||||
|
tab.connection.client.nitro=Nitro
|
||||||
|
tab.connection.version=Hôtel version:
|
||||||
|
tab.connection.state=État de connexion:
|
||||||
|
tab.connection.state.notconnected=Pas connecté
|
||||||
|
tab.connection.state.connected=Connecté
|
||||||
|
tab.connection.state.waiting=En attente de connexion
|
||||||
|
tab.connection.port=Port:
|
||||||
|
tab.connection.host=Host:
|
||||||
|
tab.connection.button.connect=Connecter
|
||||||
|
tab.connection.button.abort=Annuler
|
||||||
|
tab.connection.autodetect=Détection auto
|
||||||
|
|
||||||
|
### Tab - Injection
|
||||||
|
tab.injection=Injecter
|
||||||
|
tab.injection.corrupted=isCorrupted
|
||||||
|
tab.injection.corrupted.true=True
|
||||||
|
tab.injection.corrupted.false=False
|
||||||
|
tab.injection.description.header=header
|
||||||
|
tab.injection.description.packets=packets
|
||||||
|
tab.injection.description.id=id
|
||||||
|
tab.injection.description.length=taille
|
||||||
|
tab.injection.send.toserver=Envoyer au serveur
|
||||||
|
tab.injection.send.toclient=Envoyer au client
|
||||||
|
tab.injection.history=Historique:
|
||||||
|
tab.injection.history.clear=Effacer
|
||||||
|
tab.injection.history.tooltip=Double clique un packet pour le restaurer
|
||||||
|
tab.injection.log.packetwithid=Packet avec id
|
||||||
|
|
||||||
|
### Tab - Tools
|
||||||
|
tab.tools=Outils
|
||||||
|
tab.tools.button.encode=Encode
|
||||||
|
tab.tools.button.decode=Decode
|
||||||
|
tab.tools.type.integer=Integer
|
||||||
|
tab.tools.type.ushort=Ushort
|
||||||
|
tab.tools.encoding=Encoder
|
||||||
|
tab.tools.decoding=Decoder
|
||||||
|
tab.tools.packet=Packet
|
||||||
|
tab.tools.expression=Expression
|
||||||
|
### Tab - Scheduler
|
||||||
|
tab.scheduler=Planificateur
|
||||||
|
tab.scheduler.table.index=Index
|
||||||
|
tab.scheduler.table.packet=Packet
|
||||||
|
tab.scheduler.table.interval=Interval
|
||||||
|
tab.scheduler.table.destination=Destination
|
||||||
|
tab.scheduler.table.edit=Modifier
|
||||||
|
tab.scheduler.setup.packet=Packet
|
||||||
|
tab.scheduler.setup.interval=Interval
|
||||||
|
tab.scheduler.button.clear=Effacer
|
||||||
|
tab.scheduler.button.clear.tooltip=Effacer tous
|
||||||
|
tab.scheduler.button.save=S
|
||||||
|
tab.scheduler.button.save.tooltip=Sauvegarder dans un fichier
|
||||||
|
tab.scheduler.button.save.windowtitle=Sauvegarder le planificateur dans un fichier
|
||||||
|
tab.scheduler.button.load=L
|
||||||
|
tab.scheduler.button.load.tooltip=Charger depuis un fichier
|
||||||
|
tab.scheduler.button.load.windowtitle=Charger le planificateur depuis un fichier
|
||||||
|
tab.scheduler.button.add=Ajouter
|
||||||
|
tab.scheduler.button.edit=Modifier
|
||||||
|
tab.scheduler.direction.in=In
|
||||||
|
tab.scheduler.direction.out=Out
|
||||||
|
tab.scheduler.hotkeys=Activer raccourcis (Ctrl+Shift+Index)
|
||||||
|
tab.scheduler.filetype=Fichier planificateur (*.sched)
|
||||||
|
|
||||||
|
### Tab - Extensions
|
||||||
|
tab.extensions=Extensions
|
||||||
|
tab.extensions.table.title=Titre
|
||||||
|
tab.extensions.table.description=Description
|
||||||
|
tab.extensions.table.author=Auteur
|
||||||
|
tab.extensions.table.version=Version
|
||||||
|
tab.extensions.table.edit=Modifier
|
||||||
|
tab.extensions.table.edit.delete.tooltip=Arreter la connexion avec l'extension
|
||||||
|
tab.extensions.table.edit.restart.tooltip=Recharger l'extension
|
||||||
|
tab.extensions.table.edit.uninstall.tooltip=Désinstaller l'extension
|
||||||
|
tab.extensions.table.edit.uninstall.confirmation=Es-tu sûr de vouloir désinstaller l'extension?
|
||||||
|
tab.extensions.port=Port
|
||||||
|
tab.extensions.button.pythonshell=G-Python shell
|
||||||
|
tab.extensions.button.pythonshell.windowtitle=Scripting shell
|
||||||
|
tab.extensions.button.install=Installer
|
||||||
|
tab.extensions.button.install.windowtitle=Installer l'extension
|
||||||
|
tab.extensions.button.install.filetype=G-Earth extensions
|
||||||
|
tab.extensions.button.logs=Logs
|
||||||
|
tab.extensions.button.logs.windowtitle=Extension Console
|
||||||
|
|
||||||
|
### Tab - Extra
|
||||||
|
tab.extra=Extra
|
||||||
|
tab.extra.notepad=Notepad
|
||||||
|
tab.extra.troubleshooting=Dépannage
|
||||||
|
tab.extra.options.alwaysontop=Toujours au top
|
||||||
|
tab.extra.options.staffpermissions=Permission staff client
|
||||||
|
tab.extra.options.pythonscripting=G-Python scripting
|
||||||
|
tab.extra.options.pythonscripting.alert.title=G-Python installation
|
||||||
|
tab.extra.options.pythonscripting.alert.content=Avant d'utiliser G-Python, installer les packages avec pip!
|
||||||
|
tab.extra.options.pythonscripting.alert.moreinformation=Plus d'informations ici:
|
||||||
|
tab.extra.options.advanced=Avancer
|
||||||
|
tab.extra.options.advanced.socks=Utiliser SOCKS proxy
|
||||||
|
tab.extra.options.advanced.proxy.ip=Proxy IP
|
||||||
|
tab.extra.options.advanced.proxy.port=Proxy port
|
||||||
|
tab.extra.options.advanced.disabledecryption=Désactiver le décryptage
|
||||||
|
tab.extra.options.advanced.debugstdout=Debug to stdout
|
||||||
|
|
||||||
|
### Tab - Info
|
||||||
|
tab.info=Info
|
||||||
|
tab.info.description=Habbo packet manipulateur pour Linux, Windows & Mac
|
||||||
|
tab.info.donate=Donner BTC
|
||||||
|
tab.info.donate.alert.title=Donner Bitcoins
|
||||||
|
tab.info.donate.alert.content=Bitcoin adresse publique:
|
||||||
|
tab.info.createdby=Crée par
|
||||||
|
tab.info.links=Liens
|
||||||
|
tab.info.contributors=Contributeurs
|
||||||
|
|
||||||
|
|
||||||
|
## Alert
|
||||||
|
|
||||||
|
### Alert - Confirmation
|
||||||
|
alert.confirmation.windowtitle=Dialogue de Confirmation
|
||||||
|
alert.confirmation.button.donotaskagain=Ne pas demander à nouveau
|
||||||
|
alert.confirmation.button.remember=Se souvenir de mon choix
|
||||||
|
|
||||||
|
### Alert - AdminValidator
|
||||||
|
alert.adminvalidator.content=G-Earth a besoin des privilèges d'administrateur pour pouvoir fonctionner sur Flash,\n\
|
||||||
|
merci de redémarrer G-Earth avec les privilèges d''administrateur sauf si tu utilises Unity
|
||||||
|
|
||||||
|
### Alert - Outdated
|
||||||
|
alert.outdated.title=G-Earth est obsolète!
|
||||||
|
alert.outdated.content.newversion=Une nouvelle version de G-Earth a été trouvée
|
||||||
|
alert.outdated.content.update=Mettre à jour la dernière version.
|
||||||
|
|
||||||
|
### Alert - Invalid connection
|
||||||
|
alert.invalidconnection.content=Tu as entré des informations invalides, G-Earth ne peut pas se connecter
|
||||||
|
|
||||||
|
### Alert - Nitro root certificate
|
||||||
|
alert.rootcertificate.title=Installation du certificat root
|
||||||
|
alert.rootcertificate.remember=Se souvenir de mon choix
|
||||||
|
alert.rootcertificate.content=G-Earth a détecté que tu n'avais pas le certificat root d'installer.\n\
|
||||||
|
Il est nécessaire pour que Nitro fonctionne, veux-tu continuer?\n\
|
||||||
|
G-Earth va te demander les permissions administrateurs si tu le souhaites.
|
||||||
|
|
||||||
|
### Alert - Already connected
|
||||||
|
alert.alreadyconnected.content=G-Earth est déjà connecté à cet hôtel.\n\
|
||||||
|
Dû à la restriction actuelle tu peux connecter seulement une session par hôtel à G-Earth\n\
|
||||||
|
en mode "Raw IP" (127.0.0.1) sur Windows.\n\
|
||||||
|
\n\
|
||||||
|
Tu peux passer outre en utilisant un SOCKS proxy [Extra -> Avancer -> SOCKS]
|
||||||
|
|
||||||
|
### Alert - Something went wrong
|
||||||
|
alert.somethingwentwrong.title=Quelque chose s'est mal passé!
|
||||||
|
alert.somethingwentwrong.content=Quelque chose s'est mal passé!\n\
|
||||||
|
\n\
|
||||||
|
Rendez-vous sur notre page de dépannage pour résoudre le problème:
|
||||||
|
|
||||||
|
### Alert - Allow extension connection
|
||||||
|
alert.extconnection.content=Extension "%s" essaie de se connecter mais n'est pas connu de G-Earth,\n\
|
||||||
|
Accepter la connection?
|
||||||
|
|
||||||
|
### Alert - G-Python error
|
||||||
|
alert.gpythonerror.title=G-Python erreur
|
||||||
|
alert.gpythonerror.content=Quelque chose s'est mal passé lors du lancement de G-Python shell,\n\
|
||||||
|
es-tu sûr d'avoir suivi le guide d'installation correctement?\n\
|
||||||
|
\n\
|
||||||
|
Plus d'information ici:
|
||||||
|
|
||||||
|
|
||||||
|
## Internal extension
|
||||||
|
|
||||||
|
### Internal extension - G-ExtensionStore
|
||||||
|
ext.store.elapsedtime.second.single=seconde
|
||||||
|
ext.store.elapsedtime.second.multiple=secondes
|
||||||
|
ext.store.elapsedtime.minute.single=minute
|
||||||
|
ext.store.elapsedtime.minute.multiple=minutes
|
||||||
|
ext.store.elapsedtime.hour.single=heure
|
||||||
|
ext.store.elapsedtime.hour.multiple=heures
|
||||||
|
ext.store.elapsedtime.day.single=jour
|
||||||
|
ext.store.elapsedtime.day.multiple=jours
|
||||||
|
ext.store.elapsedtime.week.single=semaine
|
||||||
|
ext.store.elapsedtime.week.multiple=semaines
|
||||||
|
ext.store.elapsedtime.month.single=mois
|
||||||
|
ext.store.elapsedtime.month.multiple=mois
|
||||||
|
ext.store.elapsedtime.year.single=année
|
||||||
|
ext.store.elapsedtime.year.multiple=années
|
||||||
|
|
||||||
|
ext.store.extension.version=Version
|
||||||
|
ext.store.extension.rating=Évaluation
|
||||||
|
ext.store.extension.madeby=De %s
|
||||||
|
ext.store.extension.lastupdated=dernière mise à jour depuis %s
|
||||||
|
ext.store.extension.notinstore=Pas trouvé dans G-ExtensionStore
|
||||||
|
|
||||||
|
ext.store.extension.details.description=Description
|
||||||
|
ext.store.extension.details.authors=Auteur(s)
|
||||||
|
ext.store.extension.details.categories=Catégories
|
||||||
|
ext.store.extension.details.technical_information=Information technique
|
||||||
|
ext.store.extension.details.click_here=Clique ici
|
||||||
|
ext.store.extension.details.releases=Versions
|
||||||
|
ext.store.extension.details.language=Language
|
||||||
|
ext.store.extension.details.source=Source
|
||||||
|
ext.store.extension.details.framework=Framework
|
||||||
|
ext.store.extension.details.systems=Systemes
|
||||||
|
ext.store.extension.details.clients=Clients compatibles
|
||||||
|
ext.store.extension.details.screenshot=Screenshot
|
||||||
|
|
||||||
|
ext.store.extension.author.reputation=réputation
|
||||||
|
ext.store.extension.author.releases=Versions
|
||||||
|
ext.store.extension.warning.requirement=Attention: ce framework a besoin --url:des installations supplémentaires-
|
||||||
|
! IMPORTANT: the previous line has to end with the --url component like the english version
|
||||||
|
ext.store.extension.warning.unstable=Warning: this extension has been marked unstable!
|
||||||
|
|
||||||
|
ext.store.extension.status.await.install=Installer l'extension
|
||||||
|
ext.store.extension.status.await.install.message=Appuie sur "OK" et attend que l'extension soit installer
|
||||||
|
ext.store.extension.status.await.update=Mettre à jour l'extension
|
||||||
|
ext.store.extension.status.await.update.message=Appuie sur "OK" et attend que l'extension soit mise à jour
|
||||||
|
ext.store.extension.status.success.install=Installation complétée
|
||||||
|
ext.store.extension.status.success.install.message=L'installation de l'extension s'est terminée
|
||||||
|
ext.store.extension.status.success.update=Mise à jour complétée
|
||||||
|
ext.store.extension.status.success.update.message=La mise à jour de l'extension s'est terminée
|
||||||
|
ext.store.extension.status.error.install=Installation échoué
|
||||||
|
ext.store.extension.status.error.install.message=L'installation a échoué avec le message suivant
|
||||||
|
ext.store.extension.status.error.update=Mise à jour échoué
|
||||||
|
ext.store.extension.status.error.update.message=La mise à jour a échoué avec le message suivant
|
||||||
|
|
||||||
|
ext.store.button.search=Chercher
|
||||||
|
ext.store.button.install=Installer
|
||||||
|
ext.store.button.installed=Déjà installé
|
||||||
|
ext.store.button.update=Mettre à jour
|
||||||
|
|
||||||
|
ext.store.search.title=Chercher
|
||||||
|
ext.store.search.description=Chercher l'extension dont t'as besoin
|
||||||
|
ext.store.search.contenttitle=Chercher extensions
|
||||||
|
ext.store.search.bykeyword=Chercher par mot clé
|
||||||
|
ext.store.search.results=Résultats de recherche
|
||||||
|
ext.store.search.ordering=Extensions par ordre
|
||||||
|
ext.store.search.ordering.bydate.title=Nouvelles extensions
|
||||||
|
ext.store.search.ordering.bydate.description=Extensions récemment ajouté à G-ExtensionStore
|
||||||
|
ext.store.search.ordering.bydate.contenttitle=Nouvelles extensions
|
||||||
|
ext.store.search.ordering.byrating.title=Extensions populaires
|
||||||
|
ext.store.search.ordering.byrating.description=Extensions par ordre d'évaluation
|
||||||
|
ext.store.search.ordering.byrating.contenttitle=Extensions populaires
|
||||||
|
ext.store.search.ordering.byupdate.title=Récemment mis à jour
|
||||||
|
ext.store.search.ordering.byupdate.description=Extensions qui ont été récemment mis à jour
|
||||||
|
ext.store.search.ordering.byupdate.contenttitle=Récemment mis à jour
|
||||||
|
ext.store.search.filter.clients=Clients
|
||||||
|
ext.store.search.filter.categories=Catégories
|
||||||
|
ext.store.search.filter.frameworks=Frameworks
|
||||||
|
ext.store.search.info.automaticosfiltering=Info: automatiquement filtré en fonction de l'OS que tu utilises
|
||||||
|
|
||||||
|
ext.store.category=Catégories
|
||||||
|
|
||||||
|
ext.store.overview.title=Extensions installés
|
||||||
|
ext.store.overview.description=Extensions qui sont déjà installés dans G-Earth
|
||||||
|
ext.store.overview.contenttitle=Extensions installés
|
||||||
|
ext.store.overview.folder=Ouvrir le dossier
|
||||||
|
|
||||||
|
ext.store.categories.title=Catégories
|
||||||
|
ext.store.categories.description=Explorer les différentes extensions que G-Earth a à te proposer
|
||||||
|
ext.store.categories.contenttitle=Catégories
|
||||||
|
|
||||||
|
ext.store.fail.unzip=Error while unzipping
|
||||||
|
ext.store.fail.invalidurl=Invalid extension URL
|
||||||
|
ext.store.fail.notavailable=Extension not available in repository
|
||||||
|
ext.store.fail.alreadyexists=Something went wrong creating the extension directory, does the extension already exist?
|
||||||
|
ext.store.fail.notfound=Extension wasn't found
|
||||||
|
ext.store.fail.uninstall=Something went wrong with uninstalling the extension, make sure to disconnect the extension if it was still running.
|
||||||
|
|
||||||
|
ext.store.ordering.rating=Rating
|
||||||
|
ext.store.ordering.alphabetical=Alphabetical
|
||||||
|
ext.store.ordering.lastupdated=Last updated
|
||||||
|
ext.store.ordering.newreleases=New releases
|
||||||
|
|
||||||
|
### Internal extension - Logger
|
||||||
|
ext.logger.menu.window=Fenêtre
|
||||||
|
ext.logger.menu.window.alwaysontop=Toujours au top
|
||||||
|
ext.logger.menu.window.onconnect=À la connection
|
||||||
|
ext.logger.menu.window.onconnect.openwindow=Ouvrir la Fenêtre
|
||||||
|
ext.logger.menu.window.onconnect.reset=Réinitialiser le packetlogger
|
||||||
|
ext.logger.menu.window.ondisconnect=À la déconnexion
|
||||||
|
ext.logger.menu.window.ondisconnect.hidewindow=Masquer la fenêtre
|
||||||
|
ext.logger.menu.window.ondisconnect.reset=Réinitialiser le packetlogger
|
||||||
|
|
||||||
|
ext.logger.menu.view=Voir
|
||||||
|
ext.logger.menu.view.incoming=Voir les incoming
|
||||||
|
ext.logger.menu.view.outgoing=Voir les outgoing
|
||||||
|
ext.logger.menu.view.autoscroll=Autoscroll
|
||||||
|
ext.logger.menu.view.cleartext=Effacer le texte
|
||||||
|
|
||||||
|
ext.logger.menu.packets=Packets
|
||||||
|
ext.logger.menu.packets.displaydetails=Afficher les details
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep=Byte représentation
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.none=None
|
||||||
|
ext.logger.menu.packets.displaydetails.message=Message
|
||||||
|
ext.logger.menu.packets.displaydetails.message.name=Nom
|
||||||
|
ext.logger.menu.packets.displaydetails.message.hash=Hash
|
||||||
|
ext.logger.menu.packets.displaydetails.message.id=Id
|
||||||
|
ext.logger.menu.packets.displaydetails.structure=Structure
|
||||||
|
ext.logger.menu.packets.displaydetails.timestamp=Heure
|
||||||
|
ext.logger.menu.packets.antispam=Anti-spam filtre
|
||||||
|
ext.logger.menu.packets.antispam.none=None
|
||||||
|
ext.logger.menu.packets.antispam.low=Bas
|
||||||
|
ext.logger.menu.packets.antispam.med=Moyen
|
||||||
|
ext.logger.menu.packets.antispam.high=Élevé
|
||||||
|
ext.logger.menu.packets.antispam.ultra=Ultra
|
||||||
|
ext.logger.menu.packets.skipbig=Skip big packets
|
||||||
|
ext.logger.menu.packets.exportall=Exporter tout
|
||||||
|
ext.logger.menu.packets.exportall.windowtitle=Sauvegarder les Packets
|
||||||
|
ext.logger.menu.packets.exportall.filetype=TXT files
|
||||||
|
|
||||||
|
ext.logger.state.packetinfo=Packet info
|
||||||
|
ext.logger.state.filtered=Filtré
|
||||||
|
|
||||||
|
ext.logger.element.timestamp=heure
|
||||||
|
ext.logger.element.blocked=Blocké
|
||||||
|
ext.logger.element.replaced=Remplacé
|
||||||
|
ext.logger.element.direction.outgoing=Outgoing
|
||||||
|
ext.logger.element.direction.incoming=Incoming
|
||||||
|
ext.logger.element.skipped=packet skipped
|
||||||
|
ext.logger.state.true=True
|
||||||
|
ext.logger.state.false=False
|
@ -0,0 +1,326 @@
|
|||||||
|
# Italian (Translated by Kilt)
|
||||||
|
|
||||||
|
## Tabs
|
||||||
|
|
||||||
|
### Tab - Connection
|
||||||
|
tab.connection=Connessione
|
||||||
|
tab.connection.client=Tipo di client:
|
||||||
|
tab.connection.client.flash=Flash / Air
|
||||||
|
tab.connection.client.unity=Unity
|
||||||
|
tab.connection.client.nitro=Nitro
|
||||||
|
tab.connection.version=Versione Hotel:
|
||||||
|
tab.connection.state=Stato connessione:
|
||||||
|
tab.connection.state.notconnected=Non connesso
|
||||||
|
tab.connection.state.connected=Connesso
|
||||||
|
tab.connection.state.waiting=In attesa di connessione
|
||||||
|
tab.connection.port=Porta:
|
||||||
|
tab.connection.host=Host:
|
||||||
|
tab.connection.button.connect=Connetti
|
||||||
|
tab.connection.button.abort=Interrompi
|
||||||
|
tab.connection.autodetect=Auto-detect
|
||||||
|
|
||||||
|
### Tab - Injection
|
||||||
|
tab.injection=Iniezione
|
||||||
|
tab.injection.corrupted=isCorrupted
|
||||||
|
tab.injection.corrupted.true=True
|
||||||
|
tab.injection.corrupted.false=False
|
||||||
|
tab.injection.description.header=header
|
||||||
|
tab.injection.description.packets=packets
|
||||||
|
tab.injection.description.id=id
|
||||||
|
tab.injection.description.length=lunghezza
|
||||||
|
tab.injection.send.toserver=Manda al server
|
||||||
|
tab.injection.send.toclient=Manda al client
|
||||||
|
tab.injection.history=Cronologia:
|
||||||
|
tab.injection.history.clear=Cancella
|
||||||
|
tab.injection.history.tooltip=Doppioclicca il packet per ripristinarlo
|
||||||
|
tab.injection.log.packetwithid=Packet con id
|
||||||
|
|
||||||
|
### Tab - Tools
|
||||||
|
tab.tools=Strumenti
|
||||||
|
tab.tools.button.encode=Codifica
|
||||||
|
tab.tools.button.decode=Decodifica
|
||||||
|
tab.tools.type.integer=Integer
|
||||||
|
tab.tools.type.ushort=Ushort
|
||||||
|
tab.tools.encoding=Encoding
|
||||||
|
tab.tools.decoding=Decoding
|
||||||
|
tab.tools.packet=Packet
|
||||||
|
tab.tools.expression=Expression
|
||||||
|
### Tab - Scheduler
|
||||||
|
tab.scheduler=Pianificazione
|
||||||
|
tab.scheduler.table.index=Index
|
||||||
|
tab.scheduler.table.packet=Packet
|
||||||
|
tab.scheduler.table.interval=Interval
|
||||||
|
tab.scheduler.table.destination=Destinazione
|
||||||
|
tab.scheduler.table.edit=Modifica
|
||||||
|
tab.scheduler.setup.packet=Packet
|
||||||
|
tab.scheduler.setup.interval=Intervallo
|
||||||
|
tab.scheduler.button.clear=Cancella
|
||||||
|
tab.scheduler.button.clear.tooltip=Cancella tutti gli items
|
||||||
|
tab.scheduler.button.save=S
|
||||||
|
tab.scheduler.button.save.tooltip=Salva su file
|
||||||
|
tab.scheduler.button.save.windowtitle=Salva File Pianificato
|
||||||
|
tab.scheduler.button.load=C
|
||||||
|
tab.scheduler.button.load.tooltip=Carica da file
|
||||||
|
tab.scheduler.button.load.windowtitle=Carica File Pianificato
|
||||||
|
tab.scheduler.button.add=Aggiungi
|
||||||
|
tab.scheduler.button.edit=Modifica
|
||||||
|
tab.scheduler.direction.in=In
|
||||||
|
tab.scheduler.direction.out=Out
|
||||||
|
tab.scheduler.hotkeys=Attiva hotkeys (Ctrl+Shift+Index)
|
||||||
|
tab.scheduler.filetype=File Pianificati (*.sched)
|
||||||
|
|
||||||
|
### Tab - Extensions
|
||||||
|
tab.extensions=Estensioni
|
||||||
|
tab.extensions.table.title=Titolo
|
||||||
|
tab.extensions.table.description=Descrizione
|
||||||
|
tab.extensions.table.author=Autore
|
||||||
|
tab.extensions.table.version=Versione
|
||||||
|
tab.extensions.table.edit=Modifica
|
||||||
|
tab.extensions.table.edit.delete.tooltip=Chiudi la connessione con questa estensione
|
||||||
|
tab.extensions.table.edit.restart.tooltip=Riavvia questa estensione
|
||||||
|
tab.extensions.table.edit.uninstall.tooltip=Disinstalla questa estensione
|
||||||
|
tab.extensions.table.edit.uninstall.confirmation=Sei sicuro di voler disinstallare questa estensione?
|
||||||
|
tab.extensions.port=Porta
|
||||||
|
tab.extensions.button.pythonshell=G-Python shell
|
||||||
|
tab.extensions.button.pythonshell.windowtitle=Scripting shell
|
||||||
|
tab.extensions.button.install=Installa
|
||||||
|
tab.extensions.button.install.windowtitle=Installa estensione
|
||||||
|
tab.extensions.button.install.filetype=Estensioni di G-Earth
|
||||||
|
tab.extensions.button.logs=Guarda logs
|
||||||
|
tab.extensions.button.logs.windowtitle=Console Estensione
|
||||||
|
|
||||||
|
### Tab - Extra
|
||||||
|
tab.extra=Extra
|
||||||
|
tab.extra.notepad=Notepad
|
||||||
|
tab.extra.troubleshooting=Risoluzione dei problemi
|
||||||
|
tab.extra.options.alwaysontop=Sempre in primo piano
|
||||||
|
tab.extra.options.staffpermissions=Permessi staff client-side
|
||||||
|
tab.extra.options.pythonscripting=G-Python scripting
|
||||||
|
tab.extra.options.pythonscripting.alert.title=Installazione di G-Python
|
||||||
|
tab.extra.options.pythonscripting.alert.content=Prima di usare G-Python, installare i pacchetti giusti usando pip!
|
||||||
|
tab.extra.options.pythonscripting.alert.moreinformation=Maggiori informazion qui:
|
||||||
|
tab.extra.options.advanced=Avanzato
|
||||||
|
tab.extra.options.advanced.socks=Usa Proxy SOCKS
|
||||||
|
tab.extra.options.advanced.proxy.ip=Proxy IP
|
||||||
|
tab.extra.options.advanced.proxy.port=Proxy port
|
||||||
|
tab.extra.options.advanced.disabledecryption=Disattiva decrittazione
|
||||||
|
tab.extra.options.advanced.debugstdout=Debug to stdout
|
||||||
|
|
||||||
|
### Tab - Info
|
||||||
|
tab.info=Info
|
||||||
|
tab.info.description=Manipolatore di Habbo packet per Linux, Windows & Mac
|
||||||
|
tab.info.donate=Dona BTC
|
||||||
|
tab.info.donate.alert.title=Dona Bitcoins
|
||||||
|
tab.info.donate.alert.content=Indirizzo pubblico Bitcoin:
|
||||||
|
tab.info.createdby=Creato da
|
||||||
|
tab.info.links=Links
|
||||||
|
tab.info.contributors=Contributori
|
||||||
|
|
||||||
|
|
||||||
|
## Alert
|
||||||
|
|
||||||
|
### Alert - Confirmation
|
||||||
|
alert.confirmation.windowtitle=Dialogo di conferma
|
||||||
|
alert.confirmation.button.donotaskagain=Non lo chiedere di nuovo
|
||||||
|
alert.confirmation.button.remember=Ricorda la mia scelta
|
||||||
|
|
||||||
|
### Alert - AdminValidator
|
||||||
|
alert.adminvalidator.content=G-Earth ha bisogno dei permessi di amministratore per poter funzionare su Flash,\n\
|
||||||
|
riavvia G-Earth con i permessi di amministratore a meno che\n\
|
||||||
|
tu non stia usando Unity
|
||||||
|
|
||||||
|
### Alert - Outdated
|
||||||
|
alert.outdated.title=G-Earth non è aggiornato!
|
||||||
|
alert.outdated.content.newversion=Una nuova versione di G-Earth è stata trovata
|
||||||
|
alert.outdated.content.update=Aggiorna all'ultima versione
|
||||||
|
|
||||||
|
### Alert - Invalid connection
|
||||||
|
alert.invalidconnection.content=Hai inserito informazioni di connessione non valide, G-Earth non è stato in grado di connettersi
|
||||||
|
|
||||||
|
### Alert - Nitro root certificate
|
||||||
|
alert.rootcertificate.title=Installazione del Certificato Root
|
||||||
|
alert.rootcertificate.remember=Ricorda la mia scelta
|
||||||
|
alert.rootcertificate.content=G-Earth ha rilevato che non hai un certificato di autorizzazione root installato.\n\
|
||||||
|
Questo è richiesto per far funzionare Nitro, vuoi continuare?\n\
|
||||||
|
G-Earth ti chiederà i permessi di Amministratore se lo farai.
|
||||||
|
|
||||||
|
### Alert - Already connected
|
||||||
|
alert.alreadyconnected.content=G-Earth è già connesso a questo hotel.\n\
|
||||||
|
A causa delle attuali limitazioni, puoi connettere solo una sessione per hotel su G-Earth in Modalità Raw IP su Windows.\n\
|
||||||
|
\n\
|
||||||
|
Puoi bypassare questo usando un proxy SOCKS [Extra -> Avanzato -> SOCKS]
|
||||||
|
|
||||||
|
### Alert - Something went wrong
|
||||||
|
alert.somethingwentwrong.title=Qualcosa è andato storto!
|
||||||
|
alert.somethingwentwrong.content=Qualcosa è andato storto!\n\
|
||||||
|
\n\
|
||||||
|
Vai sulla nostra pagina Risoluzione dei problemi per risolvere il problema:
|
||||||
|
|
||||||
|
### Alert - Allow extension connection
|
||||||
|
alert.extconnection.content=L'estensione "%s" sta provando a connettersi ma non è riconosciuto da G-Earth,\n\
|
||||||
|
accetti questa connessione?
|
||||||
|
|
||||||
|
### Alert - G-Python error
|
||||||
|
alert.gpythonerror.title=Errore G-Python
|
||||||
|
alert.gpythonerror.content=Qualcosa è andato storto avviando il G-Python shell,\n\
|
||||||
|
sei sicuro di aver seguito la guida di installazione correttamente?\n\
|
||||||
|
\n\
|
||||||
|
Più informazioni qui:
|
||||||
|
|
||||||
|
|
||||||
|
## Internal extension
|
||||||
|
|
||||||
|
### Internal extension - G-ExtensionStore
|
||||||
|
ext.store.elapsedtime.second.single=secondo
|
||||||
|
ext.store.elapsedtime.second.multiple=secondi
|
||||||
|
ext.store.elapsedtime.minute.single=minuto
|
||||||
|
ext.store.elapsedtime.minute.multiple=minuti
|
||||||
|
ext.store.elapsedtime.hour.single=ora
|
||||||
|
ext.store.elapsedtime.hour.multiple=ore
|
||||||
|
ext.store.elapsedtime.day.single=giorno
|
||||||
|
ext.store.elapsedtime.day.multiple=giorni
|
||||||
|
ext.store.elapsedtime.week.single=settimana
|
||||||
|
ext.store.elapsedtime.week.multiple=settimane
|
||||||
|
ext.store.elapsedtime.month.single=mese
|
||||||
|
ext.store.elapsedtime.month.multiple=mesi
|
||||||
|
ext.store.elapsedtime.year.single=anno
|
||||||
|
ext.store.elapsedtime.year.multiple=anni
|
||||||
|
|
||||||
|
ext.store.extension.version=Versione
|
||||||
|
ext.store.extension.rating=Valutazione
|
||||||
|
ext.store.extension.madeby=Di %s
|
||||||
|
ext.store.extension.lastupdated=ultimo aggiornamento %s fa
|
||||||
|
ext.store.extension.notinstore=Non trovato nel G-ExtensionStore
|
||||||
|
|
||||||
|
ext.store.extension.details.description=Descrizione
|
||||||
|
ext.store.extension.details.authors=Autore/i
|
||||||
|
ext.store.extension.details.categories=Categorie
|
||||||
|
ext.store.extension.details.technical_information=Informazioni tecniche
|
||||||
|
ext.store.extension.details.click_here=Clicca qui
|
||||||
|
ext.store.extension.details.releases=Rilasci
|
||||||
|
ext.store.extension.details.language=Lingua
|
||||||
|
ext.store.extension.details.source=Sorgente
|
||||||
|
ext.store.extension.details.framework=Framework
|
||||||
|
ext.store.extension.details.systems=Sistemi
|
||||||
|
ext.store.extension.details.clients=Client compatibili
|
||||||
|
ext.store.extension.details.screenshot=Screenshot
|
||||||
|
|
||||||
|
ext.store.extension.author.reputation=reputazione
|
||||||
|
ext.store.extension.author.releases=rilasci
|
||||||
|
|
||||||
|
ext.store.extension.warning.requirement=Attenzione: è richiesto il framework --url:additional installations-
|
||||||
|
! IMPORTANT: the previous line has to end with the --url component like the english version
|
||||||
|
ext.store.extension.warning.unstable=Attenzione: questa estensione è stata marchiata instabile!
|
||||||
|
|
||||||
|
ext.store.extension.status.await.install=Installa estensione
|
||||||
|
ext.store.extension.status.await.install.message=Premi "OK" e aspetta mentre l'estensione viene installata
|
||||||
|
ext.store.extension.status.await.update=Update extension
|
||||||
|
ext.store.extension.status.await.update.message=Press "OK" e aspetta mentre l'estensione viene aggiornata
|
||||||
|
ext.store.extension.status.success.install=Installazione completata
|
||||||
|
ext.store.extension.status.success.install.message=L'installazione dell'estensione è stata completata con successo
|
||||||
|
ext.store.extension.status.success.update=Aggiornamento completato
|
||||||
|
ext.store.extension.status.success.update.message=L'aggiornamento dell'estensione è stato completato con successo
|
||||||
|
ext.store.extension.status.error.install=Installazione fallita
|
||||||
|
ext.store.extension.status.error.install.message=Installazione fallita con il seguente messaggio
|
||||||
|
ext.store.extension.status.error.update=Aggiornamento fallito
|
||||||
|
ext.store.extension.status.error.update.message=Aggiornamento fallito con il seguente messaggio
|
||||||
|
|
||||||
|
ext.store.button.search=Cerca
|
||||||
|
ext.store.button.install=Installa
|
||||||
|
ext.store.button.installed=Installato
|
||||||
|
ext.store.button.update=Aggiorna
|
||||||
|
|
||||||
|
ext.store.search.title=Cerca
|
||||||
|
ext.store.search.description=Trova l'estensione adatta alle tue esigenze
|
||||||
|
ext.store.search.contenttitle=Cerca estensioni
|
||||||
|
ext.store.search.bykeyword=Cerca per parola chiave
|
||||||
|
ext.store.search.results=Cerca risultati
|
||||||
|
ext.store.search.ordering=Ordinazione delle estensioni
|
||||||
|
ext.store.search.ordering.bydate.title=Nuovi Rilasci
|
||||||
|
ext.store.search.ordering.bydate.description=Estensioni aggiunti di recente sul G-ExtensionStore
|
||||||
|
ext.store.search.ordering.bydate.contenttitle=Nuovi Rilasci
|
||||||
|
ext.store.search.ordering.byrating.title=Estensioni Popolari
|
||||||
|
ext.store.search.ordering.byrating.description=Estensioni ordinate per valutazione
|
||||||
|
ext.store.search.ordering.byrating.contenttitle=Estensioni Popolari
|
||||||
|
ext.store.search.ordering.byupdate.title=Aggiornate di Recente
|
||||||
|
ext.store.search.ordering.byupdate.description=Estensioni aggiornate di recente
|
||||||
|
ext.store.search.ordering.byupdate.contenttitle=Aggiornate di Recente
|
||||||
|
ext.store.search.filter.clients=Clients
|
||||||
|
ext.store.search.filter.categories=Categorie
|
||||||
|
ext.store.search.filter.frameworks=Frameworks
|
||||||
|
ext.store.search.info.automaticosfiltering=Info: stai filtrando automaticamente sul SO in uso
|
||||||
|
|
||||||
|
ext.store.category=Categoria
|
||||||
|
|
||||||
|
ext.store.overview.title=Estensioni Installate
|
||||||
|
ext.store.overview.description=Estensioni che sono già installate in G-Earth
|
||||||
|
ext.store.overview.contenttitle=Estensioni installate
|
||||||
|
ext.store.overview.folder=Apri cartella
|
||||||
|
|
||||||
|
ext.store.categories.title=Categorie
|
||||||
|
ext.store.categories.description=Esplora i diversi tipi di estensioni che G-Earth ha da offrire
|
||||||
|
ext.store.categories.contenttitle=Categorie
|
||||||
|
|
||||||
|
ext.store.fail.unzip=Error while unzipping
|
||||||
|
ext.store.fail.invalidurl=Invalid extension URL
|
||||||
|
ext.store.fail.notavailable=Extension not available in repository
|
||||||
|
ext.store.fail.alreadyexists=Something went wrong creating the extension directory, does the extension already exist?
|
||||||
|
ext.store.fail.notfound=Extension wasn't found
|
||||||
|
ext.store.fail.uninstall=Something went wrong with uninstalling the extension, make sure to disconnect the extension if it was still running.
|
||||||
|
|
||||||
|
ext.store.ordering.rating=Rating
|
||||||
|
ext.store.ordering.alphabetical=Alphabetical
|
||||||
|
ext.store.ordering.lastupdated=Last updated
|
||||||
|
ext.store.ordering.newreleases=New releases
|
||||||
|
|
||||||
|
### Internal extension - Logger
|
||||||
|
ext.logger.menu.window=Finestra
|
||||||
|
ext.logger.menu.window.alwaysontop=Sempre in primo piano
|
||||||
|
ext.logger.menu.window.onconnect=Alla connessione
|
||||||
|
ext.logger.menu.window.onconnect.openwindow=Apri finestra
|
||||||
|
ext.logger.menu.window.onconnect.reset=Resetta packetlogger
|
||||||
|
ext.logger.menu.window.ondisconnect=Alla disconnessione
|
||||||
|
ext.logger.menu.window.ondisconnect.hidewindow=Nascondi finestra
|
||||||
|
ext.logger.menu.window.ondisconnect.reset=Resetta packetlogger
|
||||||
|
|
||||||
|
ext.logger.menu.view=View
|
||||||
|
ext.logger.menu.view.incoming=Mostra in arrivo
|
||||||
|
ext.logger.menu.view.outgoing=Mostra in uscita
|
||||||
|
ext.logger.menu.view.autoscroll=Autoscroll
|
||||||
|
ext.logger.menu.view.cleartext=Cancella testo
|
||||||
|
|
||||||
|
ext.logger.menu.packets=Packets
|
||||||
|
ext.logger.menu.packets.displaydetails=Mostra dettagli
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep=Rappresentazione Byte
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.none=Nulla
|
||||||
|
ext.logger.menu.packets.displaydetails.message=Messaggio
|
||||||
|
ext.logger.menu.packets.displaydetails.message.name=Nome
|
||||||
|
ext.logger.menu.packets.displaydetails.message.hash=Hash
|
||||||
|
ext.logger.menu.packets.displaydetails.message.id=Id
|
||||||
|
ext.logger.menu.packets.displaydetails.structure=Struttura
|
||||||
|
ext.logger.menu.packets.displaydetails.timestamp=Ora
|
||||||
|
ext.logger.menu.packets.antispam=Filtro Anti-spam
|
||||||
|
ext.logger.menu.packets.antispam.none=Nulla
|
||||||
|
ext.logger.menu.packets.antispam.low=Basso
|
||||||
|
ext.logger.menu.packets.antispam.med=Medio
|
||||||
|
ext.logger.menu.packets.antispam.high=Alto
|
||||||
|
ext.logger.menu.packets.antispam.ultra=Ultra
|
||||||
|
ext.logger.menu.packets.skipbig=Salta grandi packets
|
||||||
|
ext.logger.menu.packets.exportall=Esporta tutto
|
||||||
|
ext.logger.menu.packets.exportall.windowtitle=Salva Packets
|
||||||
|
ext.logger.menu.packets.exportall.filetype=File TXT
|
||||||
|
|
||||||
|
ext.logger.state.packetinfo=Packet info
|
||||||
|
ext.logger.state.filtered=Filtrato
|
||||||
|
|
||||||
|
ext.logger.element.timestamp=ora
|
||||||
|
ext.logger.element.blocked=Bloccato
|
||||||
|
ext.logger.element.replaced=Rimpiazzato
|
||||||
|
ext.logger.element.direction.outgoing=In uscita
|
||||||
|
ext.logger.element.direction.incoming=In arrivo
|
||||||
|
ext.logger.element.skipped=packet skipped
|
||||||
|
ext.logger.state.true=True
|
||||||
|
ext.logger.state.false=False
|
@ -0,0 +1,324 @@
|
|||||||
|
# Dutch (Translated by WiredSpast)
|
||||||
|
|
||||||
|
## Tabs
|
||||||
|
|
||||||
|
### Tab - Connection
|
||||||
|
tab.connection=Verbinding
|
||||||
|
tab.connection.client=Client type:
|
||||||
|
tab.connection.client.flash=Flash / Air
|
||||||
|
tab.connection.client.unity=Unity
|
||||||
|
tab.connection.client.nitro=Nitro
|
||||||
|
tab.connection.version=Hotel versie:
|
||||||
|
tab.connection.state=Verbindings status:
|
||||||
|
tab.connection.state.notconnected=Niet verbonden
|
||||||
|
tab.connection.state.connected=Verbonden
|
||||||
|
tab.connection.state.waiting=Wachten op verbinding
|
||||||
|
tab.connection.port=Port:
|
||||||
|
tab.connection.host=Host:
|
||||||
|
tab.connection.button.connect=Verbind
|
||||||
|
tab.connection.button.abort=Stop
|
||||||
|
tab.connection.autodetect=Auto-detectie
|
||||||
|
|
||||||
|
### Tab - Injection
|
||||||
|
tab.injection=Injectie
|
||||||
|
tab.injection.corrupted=isCorrupt
|
||||||
|
tab.injection.corrupted.true=True
|
||||||
|
tab.injection.corrupted.false=False
|
||||||
|
tab.injection.description.header=header
|
||||||
|
tab.injection.description.packets=packets
|
||||||
|
tab.injection.description.id=id
|
||||||
|
tab.injection.description.length=lengte
|
||||||
|
tab.injection.send.toserver=Stuur naar server
|
||||||
|
tab.injection.send.toclient=Stuur naar client
|
||||||
|
tab.injection.history=Geschiedenis:
|
||||||
|
tab.injection.history.clear=Wis
|
||||||
|
tab.injection.history.tooltip=Dubbelklik op een packet om deze op te vragen
|
||||||
|
tab.injection.log.packetwithid=Packet met id
|
||||||
|
|
||||||
|
### Tab - Tools
|
||||||
|
tab.tools=Tools
|
||||||
|
tab.tools.button.encode=Codeer
|
||||||
|
tab.tools.button.decode=Decodeer
|
||||||
|
tab.tools.type.integer=Integer
|
||||||
|
tab.tools.type.ushort=Ushort
|
||||||
|
tab.tools.encoding=Codering
|
||||||
|
tab.tools.decoding=Decodering
|
||||||
|
tab.tools.packet=Packet
|
||||||
|
tab.tools.expression=Expressie
|
||||||
|
### Tab - Scheduler
|
||||||
|
tab.scheduler=Planner
|
||||||
|
tab.scheduler.table.index=Index
|
||||||
|
tab.scheduler.table.packet=Packet
|
||||||
|
tab.scheduler.table.interval=Interval
|
||||||
|
tab.scheduler.table.destination=Bestemming
|
||||||
|
tab.scheduler.table.edit=Bewerk
|
||||||
|
tab.scheduler.setup.packet=Packet
|
||||||
|
tab.scheduler.setup.interval=Interval
|
||||||
|
tab.scheduler.button.clear=Wis
|
||||||
|
tab.scheduler.button.clear.tooltip=Wis alle items
|
||||||
|
tab.scheduler.button.save=S
|
||||||
|
tab.scheduler.button.save.tooltip=Bewaar naar een bestand
|
||||||
|
tab.scheduler.button.save.windowtitle=Bewaar Schedule Bestand
|
||||||
|
tab.scheduler.button.load=L
|
||||||
|
tab.scheduler.button.load.tooltip=Laad vanuit een bestand
|
||||||
|
tab.scheduler.button.load.windowtitle=Laad Schedule Bestand
|
||||||
|
tab.scheduler.button.add=Voeg toe
|
||||||
|
tab.scheduler.button.edit=Bewerk
|
||||||
|
tab.scheduler.direction.in=In
|
||||||
|
tab.scheduler.direction.out=Uit
|
||||||
|
tab.scheduler.hotkeys=Sneltoetsen (Ctrl+Shift+Index)
|
||||||
|
tab.scheduler.filetype=Schedule Bestanden (*.sched)
|
||||||
|
|
||||||
|
### Tab - Extensions
|
||||||
|
tab.extensions=Extensies
|
||||||
|
tab.extensions.table.title=Titel
|
||||||
|
tab.extensions.table.description=Beschrijving
|
||||||
|
tab.extensions.table.author=Auteur
|
||||||
|
tab.extensions.table.version=Versie
|
||||||
|
tab.extensions.table.edit=Bewerk
|
||||||
|
tab.extensions.table.edit.delete.tooltip=Verbreek verbinding met deze extensie
|
||||||
|
tab.extensions.table.edit.restart.tooltip=Herstart deze extensie
|
||||||
|
tab.extensions.table.edit.uninstall.tooltip=Verwijder deze extensie
|
||||||
|
tab.extensions.table.edit.uninstall.confirmation=Ben je zeker dat je deze extensie wil verwijderen?
|
||||||
|
tab.extensions.port=Port
|
||||||
|
tab.extensions.button.pythonshell=G-Python shell
|
||||||
|
tab.extensions.button.pythonshell.windowtitle=Scripting shell
|
||||||
|
tab.extensions.button.install=Installeer
|
||||||
|
tab.extensions.button.install.windowtitle=Installeer extensie
|
||||||
|
tab.extensions.button.install.filetype=G-Earth extensies
|
||||||
|
tab.extensions.button.logs=Bekijk logs
|
||||||
|
tab.extensions.button.logs.windowtitle=Extensie Console
|
||||||
|
|
||||||
|
### Tab - Extra
|
||||||
|
tab.extra=Extra
|
||||||
|
tab.extra.notepad=Kladblok
|
||||||
|
tab.extra.troubleshooting=Troubleshooting
|
||||||
|
tab.extra.options.alwaysontop=Altijd bovenop
|
||||||
|
tab.extra.options.staffpermissions=Client-side staff machtigingen
|
||||||
|
tab.extra.options.pythonscripting=G-Python scripting
|
||||||
|
tab.extra.options.pythonscripting.alert.title=G-Python installatie
|
||||||
|
tab.extra.options.pythonscripting.alert.content=Voordat je G-Python kan gebruiken moet je de juiste packages installeren!
|
||||||
|
tab.extra.options.pythonscripting.alert.moreinformation=Meer informatie hier:
|
||||||
|
tab.extra.options.advanced=Geavanceerd
|
||||||
|
tab.extra.options.advanced.socks=Gebruik SOCKS proxy
|
||||||
|
tab.extra.options.advanced.proxy.ip=Proxy IP
|
||||||
|
tab.extra.options.advanced.proxy.port=Proxy port
|
||||||
|
tab.extra.options.advanced.disabledecryption=Schakel decryptie uit
|
||||||
|
tab.extra.options.advanced.debugstdout=Debug naar stdout
|
||||||
|
|
||||||
|
### Tab - Info
|
||||||
|
tab.info=Info
|
||||||
|
tab.info.description=Habbo packet manipulator voor Linux, Windows & Mac
|
||||||
|
tab.info.donate=Doneer BTC
|
||||||
|
tab.info.donate.alert.title=Doneer Bitcoins
|
||||||
|
tab.info.donate.alert.content=Bitcoin publiek address:
|
||||||
|
tab.info.createdby=Gemaakt door
|
||||||
|
tab.info.links=Links
|
||||||
|
tab.info.contributors=Bijdragers
|
||||||
|
|
||||||
|
|
||||||
|
## Alert
|
||||||
|
|
||||||
|
### Alert - Confirmation
|
||||||
|
alert.confirmation.windowtitle=Bevestigings Dialog
|
||||||
|
alert.confirmation.button.donotaskagain=Vraag het me niet nog eens
|
||||||
|
alert.confirmation.button.remember=Onthoud mijn keuze
|
||||||
|
|
||||||
|
### Alert - AdminValidator
|
||||||
|
alert.adminvalidator.content=G-Earth heeft beheerdersrechten nodig om op Flash te kunnen werken,\n\
|
||||||
|
herstart G-Earth met beheerdersrechten tenzij je Unity gebruikt.
|
||||||
|
|
||||||
|
### Alert - Outdated
|
||||||
|
alert.outdated.title=G-Earth is verouderd!
|
||||||
|
alert.outdated.content.newversion=Er is een nieuwe versie van G-Earth gevonden
|
||||||
|
alert.outdated.content.update=Update naar de nieuwste versie
|
||||||
|
|
||||||
|
### Alert - Invalid connection
|
||||||
|
alert.invalidconnection.content=Je hebt ongeldige connectie informatie opgegeven, G-Earth kon niet verbinden
|
||||||
|
|
||||||
|
### Alert - Nitro root certificate
|
||||||
|
alert.rootcertificate.title=Basiscertificaat installatie
|
||||||
|
alert.rootcertificate.remember=Onthoud mijn keuze
|
||||||
|
alert.rootcertificate.content=G-Earth kan geen geïnstalleerd basiscertificaat vinden.\n\
|
||||||
|
Dit is nodig om met Nitro te verbinden, wil je verder gaan?\n\
|
||||||
|
G-Earth zal je voor beheerdersrechten vragen indien je verder gaat.
|
||||||
|
|
||||||
|
### Alert - Already connected
|
||||||
|
alert.alreadyconnected.content=G-Earth is reeds verbonden met dit hotel.\n\
|
||||||
|
Vanwege de huidige limieten kan je maar met één sessie per hotel verbinden in Ruwe IP-modus op Windows.\n\
|
||||||
|
\n\
|
||||||
|
Je kan dit omzeilen door een SOCKS proxy te gebruiken [Extra -> Geavanceerd -> SOCKS]
|
||||||
|
|
||||||
|
### Alert - Something went wrong
|
||||||
|
alert.somethingwentwrong.title=Er ging iets mis!
|
||||||
|
alert.somethingwentwrong.content=Er ging iets mis!\n\
|
||||||
|
\n\
|
||||||
|
Ga naar de Troubleshooting pagina om het probleem op te lossen:
|
||||||
|
|
||||||
|
### Alert - Allow extension connection
|
||||||
|
alert.extconnection.content=De extension "%s" probeert te verbinden, maar is onbekend voor G-Earth,\n\
|
||||||
|
accepteer je deze verbinding?
|
||||||
|
|
||||||
|
### Alert - G-Python error
|
||||||
|
alert.gpythonerror.title=G-Python error
|
||||||
|
alert.gpythonerror.content=Er ging iets mis bij het openen van de G-Python shell,\n\
|
||||||
|
ben je zeker dat je de installatie gids correct gevolgd hebt?\n\
|
||||||
|
\n\
|
||||||
|
Meer informatie hier:
|
||||||
|
|
||||||
|
|
||||||
|
## Internal extension
|
||||||
|
|
||||||
|
### Internal extension - G-ExtensionStore
|
||||||
|
ext.store.elapsedtime.second.single=seconde
|
||||||
|
ext.store.elapsedtime.second.multiple=seconden
|
||||||
|
ext.store.elapsedtime.minute.single=minuut
|
||||||
|
ext.store.elapsedtime.minute.multiple=minuten
|
||||||
|
ext.store.elapsedtime.hour.single=uur
|
||||||
|
ext.store.elapsedtime.hour.multiple=uren
|
||||||
|
ext.store.elapsedtime.day.single=dag
|
||||||
|
ext.store.elapsedtime.day.multiple=dagen
|
||||||
|
ext.store.elapsedtime.week.single=week
|
||||||
|
ext.store.elapsedtime.week.multiple=weken
|
||||||
|
ext.store.elapsedtime.month.single=maand
|
||||||
|
ext.store.elapsedtime.month.multiple=maanden
|
||||||
|
ext.store.elapsedtime.year.single=jaar
|
||||||
|
ext.store.elapsedtime.year.multiple=jaaren
|
||||||
|
|
||||||
|
ext.store.extension.version=Versie
|
||||||
|
ext.store.extension.rating=Rating
|
||||||
|
ext.store.extension.madeby=Door %s
|
||||||
|
ext.store.extension.lastupdated=laatst geupdate %s geleden
|
||||||
|
ext.store.extension.notinstore=Niet gevonden in de G-ExtensionStore
|
||||||
|
|
||||||
|
ext.store.extension.details.description=Beschrijving
|
||||||
|
ext.store.extension.details.authors=Auteur(s)
|
||||||
|
ext.store.extension.details.categories=Categorieën
|
||||||
|
ext.store.extension.details.technical_information=Technische informatie
|
||||||
|
ext.store.extension.details.click_here=Klik hier
|
||||||
|
ext.store.extension.details.releases=Releases
|
||||||
|
ext.store.extension.details.language=Taal
|
||||||
|
ext.store.extension.details.source=Bron
|
||||||
|
ext.store.extension.details.framework=Framework
|
||||||
|
ext.store.extension.details.systems=Systemen
|
||||||
|
ext.store.extension.details.clients=Compatibele clients
|
||||||
|
ext.store.extension.details.screenshot=Screenshot
|
||||||
|
|
||||||
|
ext.store.extension.author.reputation=reputatie
|
||||||
|
ext.store.extension.author.releases=releases
|
||||||
|
|
||||||
|
ext.store.extension.warning.requirement=Waarschuwing: het framework heeft --url:aanvullende installaties nodig-
|
||||||
|
! IMPORTANT: the previous line has to end with the --url component like the english version
|
||||||
|
ext.store.extension.warning.unstable=Waarschuwing: Deze extensie is als onstabiel aangegeven!
|
||||||
|
|
||||||
|
ext.store.extension.status.await.install=Installeer extensie
|
||||||
|
ext.store.extension.status.await.install.message=Klik op "OK" en wacht terwijl de extensie geïnstalleerd wordt
|
||||||
|
ext.store.extension.status.await.update=Update extensie
|
||||||
|
ext.store.extension.status.await.update.message=Klik op "OK" en wacht terwijl de extensie geupdate wordt
|
||||||
|
ext.store.extension.status.success.install=Installatie klaar
|
||||||
|
ext.store.extension.status.success.install.message=Extensie installatie succesvol afgerond
|
||||||
|
ext.store.extension.status.success.update=Update klaar
|
||||||
|
ext.store.extension.status.success.update.message=Extensie update succesvol afgerond
|
||||||
|
ext.store.extension.status.error.install=Installatie misgelopen
|
||||||
|
ext.store.extension.status.error.install.message=Installatie is misgelopen met de volgende melding:
|
||||||
|
ext.store.extension.status.error.update=Update misgelopen
|
||||||
|
ext.store.extension.status.error.update.message=Update is misgelopen met de volgende melding:
|
||||||
|
|
||||||
|
ext.store.button.search=Zoek
|
||||||
|
ext.store.button.install=Installeer
|
||||||
|
ext.store.button.installed=Geïnstalleerd
|
||||||
|
ext.store.button.update=Update
|
||||||
|
|
||||||
|
ext.store.search.title=Zoek
|
||||||
|
ext.store.search.description=Vind de extensie die je nodig hebt
|
||||||
|
ext.store.search.contenttitle=Zoek extensies
|
||||||
|
ext.store.search.bykeyword=Zoek met sleutelwoord
|
||||||
|
ext.store.search.results=Zoekresultaten
|
||||||
|
ext.store.search.ordering=Extensie ordening
|
||||||
|
ext.store.search.ordering.bydate.title=Nieuwe releases
|
||||||
|
ext.store.search.ordering.bydate.description=Extensies die recent aan de G-ExtensionStore zijn toegevoegd
|
||||||
|
ext.store.search.ordering.bydate.contenttitle=Nieuwe Releases
|
||||||
|
ext.store.search.ordering.byrating.title=Populaire Extensies
|
||||||
|
ext.store.search.ordering.byrating.description=Extensies gesorteerd op rating
|
||||||
|
ext.store.search.ordering.byrating.contenttitle=Populaire Extensies
|
||||||
|
ext.store.search.ordering.byupdate.title=Recent Geupdate
|
||||||
|
ext.store.search.ordering.byupdate.description=Extensies die recent geupdate zijn
|
||||||
|
ext.store.search.ordering.byupdate.contenttitle=Recent Geupdate
|
||||||
|
ext.store.search.filter.clients=Clients
|
||||||
|
ext.store.search.filter.categories=Categorieën
|
||||||
|
ext.store.search.filter.frameworks=Frameworks
|
||||||
|
ext.store.search.info.automaticosfiltering=Info: er wordt automatisch gefilterd op je besturingssysteem
|
||||||
|
|
||||||
|
ext.store.category=Categorie
|
||||||
|
|
||||||
|
ext.store.overview.title=Geïnstalleerde Extensies
|
||||||
|
ext.store.overview.description=Extensies die reeds in G-Earth geïnstalleerd zijn
|
||||||
|
ext.store.overview.contenttitle=Geïnstalleerde extensies
|
||||||
|
ext.store.overview.folder=Open map
|
||||||
|
|
||||||
|
ext.store.categories.title=Categorieën
|
||||||
|
ext.store.categories.description=Doorzoek de verschillende soorten extensies die G-Earth aan te bieden heeft
|
||||||
|
ext.store.categories.contenttitle=Categorieën
|
||||||
|
ext.store.fail.unzip=Error bij het unzippen
|
||||||
|
ext.store.fail.invalidurl=Ongeldige extensie URL
|
||||||
|
ext.store.fail.notavailable=Extensie is niet beschikbaar in de repository
|
||||||
|
ext.store.fail.alreadyexists=Er ging iets mis bij het aanmaken van de map, bestaat de extensie al?
|
||||||
|
ext.store.fail.notfound=Extension kon niet worden gevonden
|
||||||
|
ext.store.fail.uninstall=Er ging iets mis met het deinstalleren van de extensie, zorg dat de je eerst de extensie's verbinding verbreekt indien deze nog aan stond.
|
||||||
|
|
||||||
|
ext.store.ordering.rating=Rating
|
||||||
|
ext.store.ordering.alphabetical=Alfabetisch
|
||||||
|
ext.store.ordering.lastupdated=Laatst geüpdatet
|
||||||
|
ext.store.ordering.newreleases=Nieuwe releases
|
||||||
|
|
||||||
|
### Internal extension - Logger
|
||||||
|
ext.logger.menu.window=Venster
|
||||||
|
ext.logger.menu.window.alwaysontop=Altijd bovenop
|
||||||
|
ext.logger.menu.window.onconnect=Bij verbinding
|
||||||
|
ext.logger.menu.window.onconnect.openwindow=Open venster
|
||||||
|
ext.logger.menu.window.onconnect.reset=Reset packetlogger
|
||||||
|
ext.logger.menu.window.ondisconnect=Bij verbinding verbroken
|
||||||
|
ext.logger.menu.window.ondisconnect.hidewindow=Verberg venster
|
||||||
|
ext.logger.menu.window.ondisconnect.reset=Reset packetlogger
|
||||||
|
|
||||||
|
ext.logger.menu.view=Weergave
|
||||||
|
ext.logger.menu.view.incoming=Geef binnenkomend weer
|
||||||
|
ext.logger.menu.view.outgoing=Geef uitgaand weer
|
||||||
|
ext.logger.menu.view.autoscroll=Autoscroll
|
||||||
|
ext.logger.menu.view.cleartext=Wis tekst
|
||||||
|
|
||||||
|
ext.logger.menu.packets=Packets
|
||||||
|
ext.logger.menu.packets.displaydetails=Geef details weer
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep=Byte voorstelling
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.none=Geen
|
||||||
|
ext.logger.menu.packets.displaydetails.message=Message
|
||||||
|
ext.logger.menu.packets.displaydetails.message.name=Naam
|
||||||
|
ext.logger.menu.packets.displaydetails.message.hash=Hash
|
||||||
|
ext.logger.menu.packets.displaydetails.message.id=Id
|
||||||
|
ext.logger.menu.packets.displaydetails.structure=Structuur
|
||||||
|
ext.logger.menu.packets.displaydetails.timestamp=Tijdstempel
|
||||||
|
ext.logger.menu.packets.antispam=Anti-spam filter
|
||||||
|
ext.logger.menu.packets.antispam.none=Geen
|
||||||
|
ext.logger.menu.packets.antispam.low=Laag
|
||||||
|
ext.logger.menu.packets.antispam.med=Medium
|
||||||
|
ext.logger.menu.packets.antispam.high=Hoog
|
||||||
|
ext.logger.menu.packets.antispam.ultra=Ultra
|
||||||
|
ext.logger.menu.packets.skipbig=Grote packets overslaan
|
||||||
|
ext.logger.menu.packets.exportall=Exporteer alles
|
||||||
|
ext.logger.menu.packets.exportall.windowtitle=Bewaar Packets
|
||||||
|
ext.logger.menu.packets.exportall.filetype=TXT bestanden
|
||||||
|
|
||||||
|
ext.logger.state.packetinfo=Packet info
|
||||||
|
ext.logger.state.filtered=Gefilterd
|
||||||
|
|
||||||
|
ext.logger.element.timestamp=tijdstempel
|
||||||
|
ext.logger.element.blocked=Geblokkeerd
|
||||||
|
ext.logger.element.replaced=Vervangen
|
||||||
|
ext.logger.element.direction.outgoing=Binnenkomend
|
||||||
|
ext.logger.element.direction.incoming=Uitgaand
|
||||||
|
ext.logger.element.skipped=packet overgeslagen
|
||||||
|
ext.logger.state.true=True
|
||||||
|
ext.logger.state.false=False
|
@ -0,0 +1,325 @@
|
|||||||
|
# Portuguese (Translated by Alynva)
|
||||||
|
|
||||||
|
## Tabs
|
||||||
|
|
||||||
|
### Tab - Connection
|
||||||
|
tab.connection=Conexão
|
||||||
|
tab.connection.client=Tipo do cliente:
|
||||||
|
tab.connection.client.flash=Flash / Air
|
||||||
|
tab.connection.client.unity=Unity
|
||||||
|
tab.connection.client.nitro=Nitro
|
||||||
|
tab.connection.version=Versão do Hotel:
|
||||||
|
tab.connection.state=Estado da conexão:
|
||||||
|
tab.connection.state.notconnected=Não conectado
|
||||||
|
tab.connection.state.connected=Conectado
|
||||||
|
tab.connection.state.waiting=Esperando conexão
|
||||||
|
tab.connection.port=Porta:
|
||||||
|
tab.connection.host=Host:
|
||||||
|
tab.connection.button.connect=Conectar
|
||||||
|
tab.connection.button.abort=Abortar
|
||||||
|
tab.connection.autodetect=Autodetectar
|
||||||
|
|
||||||
|
### Tab - Injection
|
||||||
|
tab.injection=Injeção
|
||||||
|
tab.injection.corrupted=estaCorrompido
|
||||||
|
tab.injection.corrupted.true=Verdadeiro
|
||||||
|
tab.injection.corrupted.false=Falso
|
||||||
|
tab.injection.description.header=cabeçalho
|
||||||
|
tab.injection.description.packets=pacotes
|
||||||
|
tab.injection.description.id=id
|
||||||
|
tab.injection.description.length=comprimento
|
||||||
|
tab.injection.send.toserver=Enviar para o servidor
|
||||||
|
tab.injection.send.toclient=Enviar para o cliente
|
||||||
|
tab.injection.history=Histórico:
|
||||||
|
tab.injection.history.clear=Limpar
|
||||||
|
tab.injection.history.tooltip=Clique duas vezes em um pacote para restaurá-lo
|
||||||
|
tab.injection.log.packetwithid=Pacote com id
|
||||||
|
|
||||||
|
### Tab - Tools
|
||||||
|
tab.tools=Ferramentas
|
||||||
|
tab.tools.button.encode=Codificar
|
||||||
|
tab.tools.button.decode=Decodificar
|
||||||
|
tab.tools.type.integer=Inteiro
|
||||||
|
tab.tools.type.ushort=Ushort
|
||||||
|
tab.tools.encoding=Codificando
|
||||||
|
tab.tools.decoding=Decodificando
|
||||||
|
tab.tools.packet=Pacote
|
||||||
|
tab.tools.expression=Expressão
|
||||||
|
### Tab - Scheduler
|
||||||
|
tab.scheduler=Agendador
|
||||||
|
tab.scheduler.table.index=Índice
|
||||||
|
tab.scheduler.table.packet=Pacote
|
||||||
|
tab.scheduler.table.interval=Intervalo
|
||||||
|
tab.scheduler.table.destination=Destino
|
||||||
|
tab.scheduler.table.edit=Editar
|
||||||
|
tab.scheduler.setup.packet=Pacote
|
||||||
|
tab.scheduler.setup.interval=Intervalo
|
||||||
|
tab.scheduler.button.clear=Limpar
|
||||||
|
tab.scheduler.button.clear.tooltip=Limpar todos os itens
|
||||||
|
tab.scheduler.button.save=S
|
||||||
|
tab.scheduler.button.save.tooltip=Salvar para arquivo
|
||||||
|
tab.scheduler.button.save.windowtitle=Salvar arquivo do Agendador
|
||||||
|
tab.scheduler.button.load=C
|
||||||
|
tab.scheduler.button.load.tooltip=Carregar de um arquivo
|
||||||
|
tab.scheduler.button.load.windowtitle=Carregar arquivo do Agendador
|
||||||
|
tab.scheduler.button.add=Adc
|
||||||
|
tab.scheduler.button.edit=Editar
|
||||||
|
tab.scheduler.direction.in=Chegando
|
||||||
|
tab.scheduler.direction.out=Saindo
|
||||||
|
tab.scheduler.hotkeys=Habilitar atalhos (Ctrl+Shift+Index)
|
||||||
|
tab.scheduler.filetype=Arquivos do Agendador (*.sched)
|
||||||
|
|
||||||
|
### Tab - Extensions
|
||||||
|
tab.extensions=Extensões
|
||||||
|
tab.extensions.table.title=Título
|
||||||
|
tab.extensions.table.description=Descrição
|
||||||
|
tab.extensions.table.author=Autor
|
||||||
|
tab.extensions.table.version=Versão
|
||||||
|
tab.extensions.table.edit=Editar
|
||||||
|
tab.extensions.table.edit.delete.tooltip=Fechar conexão com esta extensão
|
||||||
|
tab.extensions.table.edit.restart.tooltip=Reiniciar esta extensão
|
||||||
|
tab.extensions.table.edit.uninstall.tooltip=Desinstalar esta extensão
|
||||||
|
tab.extensions.table.edit.uninstall.confirmation=Você tem certeza que deseja desinstalar esta extensão?
|
||||||
|
tab.extensions.port=Porta
|
||||||
|
tab.extensions.button.pythonshell=Terminal G-Python
|
||||||
|
tab.extensions.button.pythonshell.windowtitle=Terminal Scripting
|
||||||
|
tab.extensions.button.install=Instalar
|
||||||
|
tab.extensions.button.install.windowtitle=Instalar extensão
|
||||||
|
tab.extensions.button.install.filetype=Extensões G-Earth
|
||||||
|
tab.extensions.button.logs=Ver registros
|
||||||
|
tab.extensions.button.logs.windowtitle=Console de Extensões
|
||||||
|
|
||||||
|
### Tab - Extra
|
||||||
|
tab.extra=Extra
|
||||||
|
tab.extra.notepad=Anotações
|
||||||
|
tab.extra.troubleshooting=Resolução de problemas
|
||||||
|
tab.extra.options.alwaysontop=Manter no topo
|
||||||
|
tab.extra.options.staffpermissions=Permissões de staff no Cliente
|
||||||
|
tab.extra.options.pythonscripting=G-Python scripting
|
||||||
|
tab.extra.options.pythonscripting.alert.title=Instalação do G-Python
|
||||||
|
tab.extra.options.pythonscripting.alert.content=Antes de usar G-Python, instale os pacotes corretos usando pip!
|
||||||
|
tab.extra.options.pythonscripting.alert.moreinformation=Mais informações aqui:
|
||||||
|
tab.extra.options.advanced=Avançado
|
||||||
|
tab.extra.options.advanced.socks=Usar proxy SOCKS
|
||||||
|
tab.extra.options.advanced.proxy.ip=IP do proxy
|
||||||
|
tab.extra.options.advanced.proxy.port=Porta do proxy
|
||||||
|
tab.extra.options.advanced.disabledecryption=Desabilitar descriptografia
|
||||||
|
tab.extra.options.advanced.debugstdout=Debugar para stdout
|
||||||
|
|
||||||
|
### Tab - Info
|
||||||
|
tab.info=Info
|
||||||
|
tab.info.description=Manipulador de pacotes do Habbo para Linux, Windows e Mac
|
||||||
|
tab.info.donate=Doar BTC
|
||||||
|
tab.info.donate.alert.title=Doar Bitcoins
|
||||||
|
tab.info.donate.alert.content=Endereço público Bitcoin:
|
||||||
|
tab.info.createdby=Criado por
|
||||||
|
tab.info.links=Links
|
||||||
|
tab.info.contributors=Contribuidores
|
||||||
|
|
||||||
|
|
||||||
|
## Alert
|
||||||
|
|
||||||
|
### Alert - Confirmation
|
||||||
|
alert.confirmation.windowtitle=Aviso de confirmação
|
||||||
|
alert.confirmation.button.donotaskagain=Não pergunte novamente
|
||||||
|
alert.confirmation.button.remember=Lembrar minha escolha
|
||||||
|
|
||||||
|
### Alert - AdminValidator
|
||||||
|
alert.adminvalidator.content=G-Earth requer privilégios de administrador para funcionar no Flash,\n\
|
||||||
|
por favor reinicie o G-Earth com permissões de administrador a não ser que\n\
|
||||||
|
você esteja usando Unity
|
||||||
|
|
||||||
|
### Alert - Outdated
|
||||||
|
alert.outdated.title=G-Earth está desatualizado!
|
||||||
|
alert.outdated.content.newversion=Uma nova versão do G-Earth foi encontrada
|
||||||
|
alert.outdated.content.update=Atualizar para a versão mais recente
|
||||||
|
|
||||||
|
### Alert - Invalid connection
|
||||||
|
alert.invalidconnection.content=Você entrou com inforções de conexão inválidas, o G-Earth não conseguiu se conectar
|
||||||
|
|
||||||
|
### Alert - Nitro root certificate
|
||||||
|
alert.rootcertificate.title=Instalação de certificado do root
|
||||||
|
alert.rootcertificate.remember=Lembrar minha escolha
|
||||||
|
alert.rootcertificate.content=G-Earth detectou que você não possui o certificado de autoridade do root instalado.\n\
|
||||||
|
Isso é necessário para o Nitro funcionar, você deseja continuar?\n\
|
||||||
|
G-Earth vai te pedir pela permissão de Administrador se você fizer isso.
|
||||||
|
|
||||||
|
### Alert - Already connected
|
||||||
|
alert.alreadyconnected.content=G-Earth já está conectado com este hotel.\n\
|
||||||
|
Devido a limitações atuais você só consegue se conectar a uma sessão por hotel no G-Earth em modo IP Bruto no Windows.\n\
|
||||||
|
\n\
|
||||||
|
Você pode contornar isso utilizando um proxy SOCKS [Extra -> Avançado -> SOCKS]
|
||||||
|
|
||||||
|
### Alert - Something went wrong
|
||||||
|
alert.somethingwentwrong.title=Algo inesperado aconteceu!
|
||||||
|
alert.somethingwentwrong.content=Algo inesperado aconteceu!\n\
|
||||||
|
\n\
|
||||||
|
Vá para nossa página de Solução de problemas para resolver o ocorrido:
|
||||||
|
|
||||||
|
### Alert - Allow extension connection
|
||||||
|
alert.extconnection.content=Exntesão "%s" tentou se conectar mas é desconcida pelo G-Earth,\n\
|
||||||
|
aceitar essa conexão?
|
||||||
|
|
||||||
|
### Alert - G-Python error
|
||||||
|
alert.gpythonerror.title=Erro G-Python
|
||||||
|
alert.gpythonerror.content=Algo inesperado aconteceu executando o terminal G-Python,\n\
|
||||||
|
você tem certeza que seguiu o guia de instalação corretamente?\n\
|
||||||
|
\n\
|
||||||
|
Mais informações aqui:
|
||||||
|
|
||||||
|
|
||||||
|
## Internal extension
|
||||||
|
|
||||||
|
### Internal extension - G-ExtensionStore
|
||||||
|
ext.store.elapsedtime.second.single=secondo
|
||||||
|
ext.store.elapsedtime.second.multiple=secondos
|
||||||
|
ext.store.elapsedtime.minute.single=minuto
|
||||||
|
ext.store.elapsedtime.minute.multiple=minutos
|
||||||
|
ext.store.elapsedtime.hour.single=hora
|
||||||
|
ext.store.elapsedtime.hour.multiple=horas
|
||||||
|
ext.store.elapsedtime.day.single=dia
|
||||||
|
ext.store.elapsedtime.day.multiple=dias
|
||||||
|
ext.store.elapsedtime.week.single=semana
|
||||||
|
ext.store.elapsedtime.week.multiple=semanas
|
||||||
|
ext.store.elapsedtime.month.single=mês
|
||||||
|
ext.store.elapsedtime.month.multiple=meses
|
||||||
|
ext.store.elapsedtime.year.single=ano
|
||||||
|
ext.store.elapsedtime.year.multiple=anos
|
||||||
|
|
||||||
|
ext.store.extension.version=Versão
|
||||||
|
ext.store.extension.rating=Avaliação
|
||||||
|
ext.store.extension.madeby=Por %s
|
||||||
|
ext.store.extension.lastupdated=última atualização %s atrás
|
||||||
|
ext.store.extension.notinstore=Não encontrado na G-ExtensionStore
|
||||||
|
ext.store.extension.details.description=Descrição
|
||||||
|
ext.store.extension.details.authors=Autor(es)
|
||||||
|
ext.store.extension.details.categories=Categorias
|
||||||
|
ext.store.extension.details.technical_information=Informação técnica
|
||||||
|
ext.store.extension.details.click_here=Clique aqui
|
||||||
|
ext.store.extension.details.releases=Lançamentos
|
||||||
|
ext.store.extension.details.language=Linguagem
|
||||||
|
ext.store.extension.details.source=Origem
|
||||||
|
ext.store.extension.details.framework=Framework
|
||||||
|
ext.store.extension.details.systems=Sistemas
|
||||||
|
ext.store.extension.details.clients=Clientes compatíveis
|
||||||
|
ext.store.extension.details.screenshot=Captura de tela
|
||||||
|
|
||||||
|
ext.store.extension.author.reputation=reputação
|
||||||
|
ext.store.extension.author.releases=lançamentos
|
||||||
|
|
||||||
|
ext.store.extension.warning.requirement=Aviso: o framework requer --url:instalações adicionais-
|
||||||
|
! IMPORTANT: the previous line has to end with the --url component like the english version
|
||||||
|
ext.store.extension.warning.unstable=Aviso: esta extensão foi marcada como instável!
|
||||||
|
|
||||||
|
ext.store.extension.status.await.install=Instalar extensão
|
||||||
|
ext.store.extension.status.await.install.message=Pressione "OK" e espere enquanto a extensão é instalada
|
||||||
|
ext.store.extension.status.await.update=Atualizar extensão
|
||||||
|
ext.store.extension.status.await.update.message=Pressione "OK" e espere enquanto a extensão é atualizada
|
||||||
|
ext.store.extension.status.success.install=Instalação completa
|
||||||
|
ext.store.extension.status.success.install.message=Instalação da extensão completa com sussesso
|
||||||
|
ext.store.extension.status.success.update=Atualização completa
|
||||||
|
ext.store.extension.status.success.update.message=Instalação da extensão completa com sucesso
|
||||||
|
ext.store.extension.status.error.install=Instalação falhou
|
||||||
|
ext.store.extension.status.error.install.message=Instalação falhou com a seguinte mensagem
|
||||||
|
ext.store.extension.status.error.update=Atualização falhou
|
||||||
|
ext.store.extension.status.error.update.message=Atualização falhou com a seguinte mensagem
|
||||||
|
|
||||||
|
ext.store.button.search=Buscar
|
||||||
|
ext.store.button.install=Instalar
|
||||||
|
ext.store.button.installed=Instalado
|
||||||
|
ext.store.button.update=Atualizar
|
||||||
|
|
||||||
|
ext.store.search.title=Buscar
|
||||||
|
ext.store.search.description=Encontre a extensão que se adequa às suas necessidades
|
||||||
|
ext.store.search.contenttitle=Buscar extensões
|
||||||
|
ext.store.search.bykeyword=Buscar por palavra-chave
|
||||||
|
ext.store.search.results=Resultados da busca
|
||||||
|
ext.store.search.ordering=Ordenação das extensões
|
||||||
|
ext.store.search.ordering.bydate.title=Novos lançamentos
|
||||||
|
ext.store.search.ordering.bydate.description=Extensões que foram recentemente adicionadas à G-ExtensionStore
|
||||||
|
ext.store.search.ordering.bydate.contenttitle=Novos lançamentos
|
||||||
|
ext.store.search.ordering.byrating.title=Extensões populares
|
||||||
|
ext.store.search.ordering.byrating.description=Extensões ordenadas pela avaliação
|
||||||
|
ext.store.search.ordering.byrating.contenttitle=Extensões populares
|
||||||
|
ext.store.search.ordering.byupdate.title=Recentemente atualizadas
|
||||||
|
ext.store.search.ordering.byupdate.description=Extensões que foram atualizadas recentemente
|
||||||
|
ext.store.search.ordering.byupdate.contenttitle=Recentemente atualizadas
|
||||||
|
ext.store.search.filter.clients=Clientes
|
||||||
|
ext.store.search.filter.categories=Categorias
|
||||||
|
ext.store.search.filter.frameworks=Frameworks
|
||||||
|
ext.store.search.info.automaticosfiltering=Info: você é automaticamente filtrado pelo SO que você usa
|
||||||
|
|
||||||
|
ext.store.category=Categoria
|
||||||
|
|
||||||
|
ext.store.overview.title=Extensões instaladas
|
||||||
|
ext.store.overview.description=Extensões que já estão instaladas no G-Earth
|
||||||
|
ext.store.overview.contenttitle=Extensões instaladas
|
||||||
|
ext.store.overview.folder=Abrir pasta
|
||||||
|
|
||||||
|
ext.store.categories.title=Categorias
|
||||||
|
ext.store.categories.description=Explore os diferentes tipos de extensões que o G-Earth tem a oferecer
|
||||||
|
ext.store.categories.contenttitle=Categorias
|
||||||
|
|
||||||
|
ext.store.fail.unzip=Error while unzipping
|
||||||
|
ext.store.fail.invalidurl=Invalid extension URL
|
||||||
|
ext.store.fail.notavailable=Extension not available in repository
|
||||||
|
ext.store.fail.alreadyexists=Something went wrong creating the extension directory, does the extension already exist?
|
||||||
|
ext.store.fail.notfound=Extension wasn't found
|
||||||
|
ext.store.fail.uninstall=Something went wrong with uninstalling the extension, make sure to disconnect the extension if it was still running.
|
||||||
|
|
||||||
|
ext.store.ordering.rating=Rating
|
||||||
|
ext.store.ordering.alphabetical=Alphabetical
|
||||||
|
ext.store.ordering.lastupdated=Last updated
|
||||||
|
ext.store.ordering.newreleases=New releases
|
||||||
|
|
||||||
|
### Internal extension - Logger
|
||||||
|
ext.logger.menu.window=Janela
|
||||||
|
ext.logger.menu.window.alwaysontop=Sempre no topo
|
||||||
|
ext.logger.menu.window.onconnect=Quando conectar
|
||||||
|
ext.logger.menu.window.onconnect.openwindow=Abrir janela
|
||||||
|
ext.logger.menu.window.onconnect.reset=Redefinir registro de pacotes
|
||||||
|
ext.logger.menu.window.ondisconnect=Quando desconectar
|
||||||
|
ext.logger.menu.window.ondisconnect.hidewindow=Ocultar janela
|
||||||
|
ext.logger.menu.window.ondisconnect.reset=Redefinir registro de pacotes
|
||||||
|
|
||||||
|
ext.logger.menu.view=Ver
|
||||||
|
ext.logger.menu.view.incoming=Ver chegando
|
||||||
|
ext.logger.menu.view.outgoing=Ver saindo
|
||||||
|
ext.logger.menu.view.autoscroll=Rolagem automática
|
||||||
|
ext.logger.menu.view.cleartext=Limpar texto
|
||||||
|
|
||||||
|
ext.logger.menu.packets=Pacotes
|
||||||
|
ext.logger.menu.packets.displaydetails=Detalhes de exibição
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep=Representação em byte
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.legacy=Legado
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.rawhex=Hex cru
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.none=Nenhum
|
||||||
|
ext.logger.menu.packets.displaydetails.message=Menssagem
|
||||||
|
ext.logger.menu.packets.displaydetails.message.name=Nome
|
||||||
|
ext.logger.menu.packets.displaydetails.message.hash=Hash
|
||||||
|
ext.logger.menu.packets.displaydetails.message.id=Id
|
||||||
|
ext.logger.menu.packets.displaydetails.structure=Estrutura
|
||||||
|
ext.logger.menu.packets.displaydetails.timestamp=Momento
|
||||||
|
ext.logger.menu.packets.antispam=Filtro anti-spam
|
||||||
|
ext.logger.menu.packets.antispam.none=Nenhum
|
||||||
|
ext.logger.menu.packets.antispam.low=Baixo
|
||||||
|
ext.logger.menu.packets.antispam.med=Médio
|
||||||
|
ext.logger.menu.packets.antispam.high=Alto
|
||||||
|
ext.logger.menu.packets.antispam.ultra=Ultra
|
||||||
|
ext.logger.menu.packets.skipbig=Pular pacotes grandes
|
||||||
|
ext.logger.menu.packets.exportall=Exportar todos
|
||||||
|
ext.logger.menu.packets.exportall.windowtitle=Salvar Pacotes
|
||||||
|
ext.logger.menu.packets.exportall.filetype=Arquivos TXT
|
||||||
|
|
||||||
|
ext.logger.state.packetinfo=Informação do pacote
|
||||||
|
ext.logger.state.filtered=Filtrado
|
||||||
|
|
||||||
|
ext.logger.element.timestamp=momento
|
||||||
|
ext.logger.element.blocked=Bloqueado
|
||||||
|
ext.logger.element.replaced=Substituído
|
||||||
|
ext.logger.element.direction.outgoing=Saindo
|
||||||
|
ext.logger.element.direction.incoming=Chegando
|
||||||
|
ext.logger.element.skipped=pacote pulado
|
||||||
|
ext.logger.state.true=True
|
||||||
|
ext.logger.state.false=False
|
@ -0,0 +1,326 @@
|
|||||||
|
# Turkish (Translated by Curly!.)
|
||||||
|
|
||||||
|
## Tabs
|
||||||
|
|
||||||
|
### Tab - Connection
|
||||||
|
tab.connection =Bağlantı
|
||||||
|
tab.connection.client =Sunucu Türü:
|
||||||
|
tab.connection.client.flash =Flash / Air
|
||||||
|
tab.connection.client.unity =Unity
|
||||||
|
tab.connection.client.nitro =Nitro
|
||||||
|
tab.connection.version =Hotel Türü:
|
||||||
|
tab.connection.state =Bağlantı Durumu:
|
||||||
|
tab.connection.state.notconnected =Bağlı değil
|
||||||
|
tab.connection.state.connected=Bağlandı
|
||||||
|
tab.connection.state.waiting=Bağlantı bekleniyor
|
||||||
|
tab.connection.port=Port:
|
||||||
|
tab.connection.host=Host:
|
||||||
|
tab.connection.button.connect=Bağlan
|
||||||
|
tab.connection.button.abort=İptal
|
||||||
|
tab.connection.autodetect=Otomatik Tespit Et
|
||||||
|
|
||||||
|
### Tab - Injection
|
||||||
|
tab.injection=Enjeksiyon
|
||||||
|
tab.injection.corrupted=Bozulmuş
|
||||||
|
tab.injection.corrupted.true=Doğru
|
||||||
|
tab.injection.corrupted.false=Yanlış
|
||||||
|
tab.injection.description.header=header
|
||||||
|
tab.injection.description.packets=paketler
|
||||||
|
tab.injection.description.id=id
|
||||||
|
tab.injection.description.length=uzunluk
|
||||||
|
tab.injection.send.toserver=Server a yolla
|
||||||
|
tab.injection.send.toclient=Client a yolla
|
||||||
|
tab.injection.history=Geçmiş:
|
||||||
|
tab.injection.history.clear=Temizle
|
||||||
|
tab.injection.history.tooltip=Bir paketi geri yüklemek için çift tıklayın
|
||||||
|
tab.injection.log.packetwithid=ID'li paket
|
||||||
|
|
||||||
|
### Tab - Tools
|
||||||
|
tab.tools=Araçlar
|
||||||
|
tab.tools.button.encode=Kodlamak
|
||||||
|
tab.tools.button.decode=Kodu çözmek
|
||||||
|
tab.tools.type.integer=Tamsayı
|
||||||
|
tab.tools.type.ushort=Kısa
|
||||||
|
tab.tools.encoding=Kodlamak
|
||||||
|
tab.tools.decoding=Kodu çözmek
|
||||||
|
tab.tools.packet=Paket
|
||||||
|
tab.tools.expression=Anlatım
|
||||||
|
|
||||||
|
### Tab - Scheduler
|
||||||
|
tab.scheduler=Zamanlayıcı
|
||||||
|
tab.scheduler.table.index=Indeks
|
||||||
|
tab.scheduler.table.packet=Paket
|
||||||
|
tab.scheduler.table.interval=Aralık
|
||||||
|
tab.scheduler.table.destination=Mesafe
|
||||||
|
tab.scheduler.table.edit=Edit
|
||||||
|
tab.scheduler.setup.packet=Paket
|
||||||
|
tab.scheduler.setup.interval=Aralık
|
||||||
|
tab.scheduler.button.clear=Temizle
|
||||||
|
tab.scheduler.button.clear.tooltip=Tüm itemleri temizle
|
||||||
|
tab.scheduler.button.save=S
|
||||||
|
tab.scheduler.button.save.tooltip=Dosyayı kaydetmek için
|
||||||
|
tab.scheduler.button.save.windowtitle=Programlı dosyayı kaydet
|
||||||
|
tab.scheduler.button.load=L
|
||||||
|
tab.scheduler.button.load.tooltip=Dosya dan yükle
|
||||||
|
tab.scheduler.button.load.windowtitle=Program Dosyasını Yükle
|
||||||
|
tab.scheduler.button.add=Ekle
|
||||||
|
tab.scheduler.button.edit=Editle
|
||||||
|
tab.scheduler.direction.in=İçeri
|
||||||
|
tab.scheduler.direction.out=Dışarı
|
||||||
|
tab.scheduler.hotkeys=Kısayol tuşlarını etkinleştir (Ctrl+Shift+Index)
|
||||||
|
tab.scheduler.filetype =Dosyaları planla(*.sched)
|
||||||
|
|
||||||
|
### Tab - Extensions
|
||||||
|
tab.extensions =Uzantılar
|
||||||
|
tab.extensions.table.title =Başlık
|
||||||
|
tab.extensions.table.description =Açıklama
|
||||||
|
tab.extensions.table.author =Yazar
|
||||||
|
tab.extensions.table.version =Versiyon
|
||||||
|
tab.extensions.table.edit =Editle
|
||||||
|
tab.extensions.table.edit.delete.tooltip =Bu uzantı ile olan bağlantıyı kes
|
||||||
|
tab.extensions.table.edit.restart.tooltip=Bu uzantıyı yeniden başlat
|
||||||
|
tab.extensions.table.edit.uninstall.tooltip=Bu uzantıyı kaldır
|
||||||
|
tab.extensions.table.edit.uninstall.confirmation=Bu uzantıyı kaldırmak istediğinizden emin misiniz?
|
||||||
|
tab.extensions.port=Port
|
||||||
|
tab.extensions.button.pythonshell=G-Python kabuğu
|
||||||
|
tab.extensions.button.pythonshell.windowtitle=Komut dosyası kabuğu
|
||||||
|
tab.extensions.button.install=İndir
|
||||||
|
tab.extensions.button.install.windowtitle=Uzantıyı indir
|
||||||
|
tab.extensions.button.install.filetype=G-Earth Uzantıları
|
||||||
|
tab.extensions.button.logs=Logları görüntüle
|
||||||
|
tab.extensions.button.logs.windowtitle=Uzantı konsolu
|
||||||
|
|
||||||
|
### Tab - Extra
|
||||||
|
tab.extra=Ekstra
|
||||||
|
tab.extra.notepad=Not dosyası
|
||||||
|
tab.extra.troubleshooting=Sorun giderme
|
||||||
|
tab.extra.options.alwaysontop=Her zaman üstte
|
||||||
|
tab.extra.options.staffpermissions=İstemci tarafı personel izinleri
|
||||||
|
tab.extra.options.pythonscripting=G-Python scripting
|
||||||
|
tab.extra.options.pythonscripting.alert.title=G-Python Kurulum
|
||||||
|
tab.extra.options.pythonscripting.alert.content=G-Python'u kullanmadan önce pip kullanarak doğru paketleri kurun!
|
||||||
|
tab.extra.options.pythonscripting.alert.moreinformation =Daha fazla bilgi için:
|
||||||
|
tab.extra.options.advanced =İleri
|
||||||
|
tab.extra.options.advanced.socks =SOCKS proxy kullanın
|
||||||
|
tab.extra.options.advanced.proxy.ip=Proxy IP
|
||||||
|
tab.extra.options.advanced.proxy.port=Proxy port
|
||||||
|
tab.extra.options.advanced.disabledecryption=Şifre çözmeyi devre dışı bırak
|
||||||
|
tab.extra.options.advanced.debugstdout=stdout'ta hata ayıklama
|
||||||
|
|
||||||
|
### Tab - Info
|
||||||
|
tab.info=Bilgi
|
||||||
|
tab.info.description=Linux, Windows ve Mac için Habbo paket manipülatörü
|
||||||
|
tab.info.donate=BTC ile bağış yapın
|
||||||
|
tab.info.donate.alert.title=Bitcoin bağışlayın
|
||||||
|
tab.info.donate.alert.content=Bitcoin bağış adresi:
|
||||||
|
tab.info.createdby=Kurucu
|
||||||
|
tab.info.links=Linkler
|
||||||
|
tab.info.contributors=Katkıda bulunanlar
|
||||||
|
|
||||||
|
|
||||||
|
## Alert
|
||||||
|
|
||||||
|
### Alert - Onayla
|
||||||
|
alert.confirmation.windowtitle=Diyaloğu onayla
|
||||||
|
alert.confirmation.button.donotaskagain=Tekrar sorma
|
||||||
|
alert.confirmation.button.remember=Tercihimi hatırla
|
||||||
|
|
||||||
|
### Alert - AdminValidator
|
||||||
|
alert.adminvalidator.content=G-Earth'ün Flash üzerinde çalışabilmesi için yönetici ayrıcalıklarına ihtiyacı var,\n\
|
||||||
|
lütfen G-Earth'i yönetici izinleriyle yeniden başlatın, aksi takdirde\n\
|
||||||
|
Unity'yi kullanıyorsun
|
||||||
|
|
||||||
|
### Alert - Eski versiyon
|
||||||
|
alert.outdated.title=G-Earth Eski versiyon!
|
||||||
|
alert.outdated.content.newversion=G-Earth için yeni bir versiyon bulundu
|
||||||
|
alert.outdated.content.update=Son versiyona güncelle
|
||||||
|
|
||||||
|
### Alert - Geçersiz bağlantı
|
||||||
|
alert.invalidconnection.content=Geçersiz bağlantı bilgisi girdiniz, G-Earth bağlanamadı
|
||||||
|
|
||||||
|
### Alert - Nitro root certificate
|
||||||
|
alert.rootcertificate.title=Kök sertifika kurulumu
|
||||||
|
alert.rootcertificate.remember=Tercihimi hatırla
|
||||||
|
alert.rootcertificate.content=G-Earth, kök sertifika yetkilinizin kurulu olmadığını tespit etti.\n\
|
||||||
|
Nitro'nun çalışması için bu gerekli, devam etmek istiyor musunuz?\n\
|
||||||
|
Bunu yaparsanız G-Earth sizden Yönetici izni isteyecektir.
|
||||||
|
|
||||||
|
### Alert - Zaten bağlı
|
||||||
|
alert.alreadyconnected.content=G-Earth bu otele zaten bağlı.\n\
|
||||||
|
Mevcut sınırlamalar nedeniyle, Windows'ta Ham IP modunda G-Earth'e otel başına yalnızca bir oturum bağlayabilirsiniz.\n\
|
||||||
|
\n\
|
||||||
|
Bunu bir SOCKS proxy'si kullanarak atlayabilirsiniz.[Extra->Advanced->SOCKS]
|
||||||
|
|
||||||
|
### Alert - Something went wrong
|
||||||
|
alert.somethingwentwrong.title =Bir şeyler yanlış gitti!
|
||||||
|
alert.somethingwentwrong.content=Bir şeyler yanlış!\n\
|
||||||
|
\n\
|
||||||
|
Sorunu çözmek için Sorun Giderme sayfamıza gidin:
|
||||||
|
|
||||||
|
### Alert - Uzantı bağlantısına izin ver
|
||||||
|
alert.extconnection.content =%s" uzantısı bağlanmaya çalışıyor ancak G-Earth tarafından bilinmiyor,\n\
|
||||||
|
Bu bağlantıyı kabul ediyor musunuz?
|
||||||
|
|
||||||
|
### Alert - G-Python error
|
||||||
|
alert.gpythonerror.title=G-Python hata
|
||||||
|
alert.gpythonerror.content=Python kabuğu başlatılırken bir şeyler ters gitti,\n\
|
||||||
|
kurulum kılavuzunu doğru izlediğinizden emin misiniz?\n\
|
||||||
|
\n\
|
||||||
|
Daha fazla bilgi burada:
|
||||||
|
|
||||||
|
|
||||||
|
## Internal extension
|
||||||
|
|
||||||
|
### Internal extension - G-ExtensionStore
|
||||||
|
ext.store.elapsedtime.second.single =saniye
|
||||||
|
ext.store.elapsedtime.second.multiple =saniyeler
|
||||||
|
ext.store.elapsedtime.minute.single =dakika
|
||||||
|
ext.store.elapsedtime.minute.multiple =dakikalar
|
||||||
|
ext.store.elapsedtime.hour.single =saat
|
||||||
|
ext.store.elapsedtime.hour.multiple =saatler
|
||||||
|
ext.store.elapsedtime.day.single =gün
|
||||||
|
ext.store.elapsedtime.day.multiple =günler
|
||||||
|
ext.store.elapsedtime.week.single =hafta
|
||||||
|
ext.store.elapsedtime.week.multiple =haftalar
|
||||||
|
ext.store.elapsedtime.month.single =ay
|
||||||
|
ext.store.elapsedtime.month.multiple =aylar
|
||||||
|
ext.store.elapsedtime.year.single =yıl
|
||||||
|
ext.store.elapsedtime.year.multiple =yıllar
|
||||||
|
|
||||||
|
ext.store.extension.version =Versiyon
|
||||||
|
ext.store.extension.rating =Değerlendirme
|
||||||
|
ext.store.extension.madeby =%s ile
|
||||||
|
ext.store.extension.lastupdated =en son %s önce güncellendi
|
||||||
|
ext.store.extension.notinstore=G-ExtensionStore da bulunamadı
|
||||||
|
|
||||||
|
ext.store.extension.details.description=Açıklama
|
||||||
|
ext.store.extension.details.authors=Yazar(lar)
|
||||||
|
ext.store.extension.details.categories=Kategoriler
|
||||||
|
ext.store.extension.details.technical_information=Teknik Bilgiler
|
||||||
|
ext.store.extension.details.click_here=Buraya tıkla
|
||||||
|
ext.store.extension.details.releases=Çıkanlar
|
||||||
|
ext.store.extension.details.language=Dil
|
||||||
|
ext.store.extension.details.source=Kaynak
|
||||||
|
ext.store.extension.details.framework=Çerçeve
|
||||||
|
ext.store.extension.details.systems=Sistemler
|
||||||
|
ext.store.extension.details.clients=Uyumlu istemciler
|
||||||
|
ext.store.extension.details.screenshot=Ekran Görüntüsü
|
||||||
|
|
||||||
|
ext.store.extension.author.reputation=itibar
|
||||||
|
ext.store.extension.author.releases=çıkanlar
|
||||||
|
|
||||||
|
ext.store.extension.warning.requirement=Uyarı: çerçeve --url:ek kurulumlar gerektirir-
|
||||||
|
! ÖNEMLİ: Bir önceki satırın ingilizce versiyonunda olduğu gibi --url bileşeni ile bitmesi gerekir.
|
||||||
|
ext.store.extension.warning.unstable=Uyarı: bu uzantı kararsız olarak işaretlendi!
|
||||||
|
|
||||||
|
ext.store.extension.status.await.install=Uzantıyı indir
|
||||||
|
ext.store.extension.status.await.install.message="Tamam" a basın ve uzantı kurulurken bekleyin
|
||||||
|
ext.store.extension.status.await.update=Uzantıyı güncelle
|
||||||
|
ext.store.extension.status.await.update.message="Tamam" a basın ve uzantı güncellenmeye başlarken bekleyin
|
||||||
|
ext.store.extension.status.success.install=İndirme tamamlandı
|
||||||
|
ext.store.extension.status.success.install.message=Uzantı yüklemesi başarıyla tamamlandı
|
||||||
|
ext.store.extension.status.success.update=Güncelleme tamamlandı
|
||||||
|
ext.store.extension.status.success.update.message=Uzantı güncellemesi başarıyla tamamlandı
|
||||||
|
ext.store.extension.status.error.install=Yükleme başarısız
|
||||||
|
ext.store.extension.status.error.install.message=Yükleme aşağıdaki mesajla başarısız oldu
|
||||||
|
ext.store.extension.status.error.update=Güncelleme başarısız
|
||||||
|
ext.store.extension.status.error.update.message=Güncelleme aşağıdaki mesajla başarısız oldu
|
||||||
|
|
||||||
|
ext.store.button.search=Ara
|
||||||
|
ext.store.button.install=Yükle
|
||||||
|
ext.store.button.installed=Yüklendi
|
||||||
|
ext.store.button.update=Güncelle
|
||||||
|
|
||||||
|
ext.store.search.title=Ara
|
||||||
|
ext.store.search.description=İhtiyaçlarınıza uyan uzantıyı bulun
|
||||||
|
ext.store.search.contenttitle=Uzantı Ara
|
||||||
|
ext.store.search.bykeyword=Anahtar kelime ile ara
|
||||||
|
ext.store.search.results=Sonuçları görüntüle
|
||||||
|
ext.store.search.ordering=Uzantı alma
|
||||||
|
ext.store.search.ordering.bydate.title=Yeni çıkanlar
|
||||||
|
ext.store.search.ordering.bydate.description=G-ExtensionStore'a yakın zamanda eklenen uzantılar
|
||||||
|
ext.store.search.ordering.bydate.contenttitle=Yeni çıkanlar
|
||||||
|
ext.store.search.ordering.byrating.title=Popüler uzantılar
|
||||||
|
ext.store.search.ordering.byrating.description=Derecelendirmeye göre sıralanmış uzantılar
|
||||||
|
ext.store.search.ordering.byrating.contenttitle=Popüler Uzantılar
|
||||||
|
ext.store.search.ordering.byupdate.title=Yeni Güncellenmiş
|
||||||
|
ext.store.search.ordering.byupdate.description=Yakın zamanda güncellenen uzantılar
|
||||||
|
ext.store.search.ordering.byupdate.contenttitle=Yeni Güncellenmiş
|
||||||
|
ext.store.search.filter.clients=Client\\'ler
|
||||||
|
ext.store.search.filter.categories=Kategoriler
|
||||||
|
ext.store.search.filter.frameworks=Çerçeveler
|
||||||
|
ext.store.search.info.automaticosfiltering=Bilgi: kullandığınız işletim sistemine otomatik olarak filtre uyguluyorsunuz
|
||||||
|
|
||||||
|
ext.store.category=Category
|
||||||
|
|
||||||
|
ext.store.overview.title=Yüklenmiş Uzantılar
|
||||||
|
ext.store.overview.description=G-Earth'te zaten yüklü olan uzantılar
|
||||||
|
ext.store.overview.contenttitle=Yüklenmiş Uzantılar
|
||||||
|
ext.store.overview.folder=Dosyayı aç
|
||||||
|
|
||||||
|
ext.store.categories.title=Kategoriler
|
||||||
|
ext.store.categories.description=G-Earth'ün sunduğu farklı uzantı türlerini keşfedin
|
||||||
|
ext.store.categories.contenttitle=Kategoriler
|
||||||
|
|
||||||
|
ext.store.fail.unzip=Açılırken hata oluştu
|
||||||
|
ext.store.fail.invalidurl=Geçersiz uzantı URL'si
|
||||||
|
ext.store.fail.notavailable=Uzantı depoda mevcut değil
|
||||||
|
ext.store.fail.alreadyexists=Uzantı dizini oluşturulurken bir şeyler ters gitti, uzantı zaten mevcut mu?
|
||||||
|
ext.store.fail.notfound=Uzantı bulunamadı
|
||||||
|
ext.store.fail.uninstall=Uzantıyı kaldırırken bir şeyler ters gitti, hala çalışıyorsa uzantının bağlantısını kestiğinizden emin olun.
|
||||||
|
|
||||||
|
ext.store.ordering.rating=Değerlendirme
|
||||||
|
ext.store.ordering.alphabetical=Alfabetik
|
||||||
|
ext.store.ordering.lastupdated=Son güncellenmiş
|
||||||
|
ext.store.ordering.newreleases=Yeni çıkanlar
|
||||||
|
|
||||||
|
### Internal extension - Logger
|
||||||
|
ext.logger.menu.window=Pencere
|
||||||
|
ext.logger.menu.window.alwaysontop=Her zaman yukarıda
|
||||||
|
ext.logger.menu.window.onconnect=Bağlantıda
|
||||||
|
ext.logger.menu.window.onconnect.openwindow=Pencereyi aç
|
||||||
|
ext.logger.menu.window.onconnect.reset=Paket kaydediciyi sıfırla
|
||||||
|
ext.logger.menu.window.ondisconnect=Bağlantı kesildiğinde
|
||||||
|
ext.logger.menu.window.ondisconnect.hidewindow=Pencereyi gizle
|
||||||
|
ext.logger.menu.window.ondisconnect.reset=Paket kaydediciyi sıfırla
|
||||||
|
|
||||||
|
ext.logger.menu.view=Göster
|
||||||
|
ext.logger.menu.view.incoming=Gelenleri görüntüle
|
||||||
|
ext.logger.menu.view.outgoing=Gidenleri görüntüle
|
||||||
|
ext.logger.menu.view.autoscroll=Otomatik kaydırma
|
||||||
|
ext.logger.menu.view.cleartext=Metni temizle
|
||||||
|
|
||||||
|
ext.logger.menu.packets=Paketler
|
||||||
|
ext.logger.menu.packets.displaydetails=Ayrıntıları görüntüle
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep=bayt temsili
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.legacy=Kalıt
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.hexdump=altılı döküm
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.rawhex=ham altıgen
|
||||||
|
ext.logger.menu.packets.displaydetails.byterep.none=Hiçbiri
|
||||||
|
ext.logger.menu.packets.displaydetails.message=Mesaj
|
||||||
|
ext.logger.menu.packets.displaydetails.message.name=İsim
|
||||||
|
ext.logger.menu.packets.displaydetails.message.hash=Doğramak
|
||||||
|
ext.logger.menu.packets.displaydetails.message.id=Id
|
||||||
|
ext.logger.menu.packets.displaydetails.structure=Yapı
|
||||||
|
ext.logger.menu.packets.displaydetails.timestamp=Zaman damgası
|
||||||
|
ext.logger.menu.packets.antispam=Anti-spam filtresi
|
||||||
|
ext.logger.menu.packets.antispam.none=Hiçbiri
|
||||||
|
ext.logger.menu.packets.antispam.low=Düşük
|
||||||
|
ext.logger.menu.packets.antispam.med=Orta
|
||||||
|
ext.logger.menu.packets.antispam.high=Yüksek
|
||||||
|
ext.logger.menu.packets.antispam.ultra=Ultra Yüksek
|
||||||
|
ext.logger.menu.packets.skipbig=Büyük paketleri es geç
|
||||||
|
ext.logger.menu.packets.exportall=Tümünü dışa aktar
|
||||||
|
ext.logger.menu.packets.exportall.windowtitle=Paketleri Kaydet
|
||||||
|
ext.logger.menu.packets.exportall.filetype=TXT dosyaları
|
||||||
|
|
||||||
|
ext.logger.state.packetinfo=Paket bilgisi
|
||||||
|
ext.logger.state.filtered=Filtrelendi
|
||||||
|
ext.logger.element.timestamp=zaman damgası
|
||||||
|
ext.logger.element.blocked=Engellendi
|
||||||
|
ext.logger.element.replaced=Yeniden yerleştirildi
|
||||||
|
ext.logger.element.direction.outgoing=Dışarı çıkan
|
||||||
|
ext.logger.element.direction.incoming=İçeri giren
|
||||||
|
ext.logger.element.skipped=Paket es geçildi
|
||||||
|
ext.logger.state.true=Doğru
|
||||||
|
ext.logger.state.false=Yanlış
|