Made translation dynamic (Doesn't require G-Earth to restart)

This commit is contained in:
WiredSpast 2022-08-10 14:45:57 +02:00
parent c5dd4eb6d3
commit 65fa47e6dc
34 changed files with 681 additions and 432 deletions

View File

@ -24,6 +24,7 @@ import java.util.*;
import java.util.function.Supplier;
public class GExtensionStoreController implements Initializable {
private static GExtensionStoreController instance;
private GExtensionStore extensionStore = null;
@ -38,6 +39,8 @@ public class GExtensionStoreController implements Initializable {
@Override
public void initialize(URL location, ResourceBundle resources) {
instance = this;
webView = new WebView();
borderPane.setCenter(webView);
@ -238,4 +241,8 @@ public class GExtensionStoreController implements Initializable {
public String getContentItemsContainer() {
return contentItemsContainer;
}
public static void reloadPage() {
instance.webView.getEngine().reload();
}
}

View File

@ -1,13 +1,14 @@
package gearth.services.internal_extensions.uilogger;
import at.favre.lib.bytes.Bytes;
import gearth.GEarth;
import gearth.misc.Cacher;
import gearth.services.internal_extensions.uilogger.hexdumper.Hexdump;
import gearth.services.packet_info.PacketInfo;
import gearth.protocol.HMessage;
import gearth.protocol.HPacket;
import gearth.ui.subforms.logger.loggerdisplays.PacketLogger;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.Initializable;
@ -40,7 +41,7 @@ public class UiLoggerController implements Initializable {
public CheckMenuItem chkViewIncoming;
public CheckMenuItem chkViewOutgoing;
public CheckMenuItem chkDisplayStructure;
public Label lblAutoScrolll;
public Label lblAutoScroll;
public CheckMenuItem chkAutoscroll;
public CheckMenuItem chkSkipBigPackets;
public CheckMenuItem chkMessageName;
@ -72,6 +73,7 @@ public class UiLoggerController implements Initializable {
public RadioMenuItem chkReprHex;
public RadioMenuItem chkReprRawHex;
public RadioMenuItem chkReprNone;
public MenuItem menuItem_clear, menuItem_exportAll;
private Map<Integer, LinkedList<Long>> filterTimestamps = new HashMap<>();
@ -87,6 +89,11 @@ public class UiLoggerController implements Initializable {
private List<MenuItem> allMenuItems = new ArrayList<>();
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) {
if (item instanceof CheckMenuItem) {
return ((CheckMenuItem)item).isSelected();
@ -158,6 +165,8 @@ public class UiLoggerController implements Initializable {
appendLater.clear();
}
}
initLanguageBinding();
}
private static String cleanTextContent(String text) {
@ -220,7 +229,7 @@ public class UiLoggerController implements Initializable {
if (chkTimestamp.isSelected()) {
elements.add(new Element(String.format("(%s: %d)\n", GEarth.translation.getString("ext.logger.element.timestamp"), 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;
@ -257,8 +266,8 @@ public class UiLoggerController implements Initializable {
elements.add(new Element("\n", ""));
}
if (isBlocked) elements.add(new Element(String.format("[%s]\n", GEarth.translation.getString("ext.logger.element.blocked")), "blocked"));
else if (isReplaced) elements.add(new Element(String.format("[%s]\n", GEarth.translation.getString("ext.logger.element.replaced")), "replaced"));
if (isBlocked) elements.add(new Element(String.format("[%s]\n", LanguageBundle.get("ext.logger.element.blocked")), "blocked"));
else if (isReplaced) elements.add(new Element(String.format("[%s]\n", LanguageBundle.get("ext.logger.element.replaced")), "replaced"));
if (!chkReprNone.isSelected()) {
boolean isSkipped = chkSkipBigPackets.isSelected() && (packet.length() > 4000 || (packet.length() > 1000 && chkReprHex.isSelected()));
@ -266,7 +275,7 @@ public class UiLoggerController implements Initializable {
Hexdump.hexdump(packet.toBytes()) :
(chkReprRawHex.isSelected() ? Bytes.wrap(packet.toBytes()).encodeHex() : packet.toString());
String type = isIncoming ? GEarth.translation.getString("ext.logger.element.direction.incoming") : GEarth.translation.getString("ext.logger.element.direction.outgoing");
String type = isIncoming ? LanguageBundle.get("ext.logger.element.direction.incoming") : LanguageBundle.get("ext.logger.element.direction.outgoing");
if (!chkReprHex.isSelected()) {
elements.add(new Element(String.format("%s[", type), type.toLowerCase()));
@ -277,7 +286,7 @@ public class UiLoggerController implements Initializable {
}
if (isSkipped) {
elements.add(new Element(String.format("<%s>", GEarth.translation.getString("ext.logger.element.skipped")), "skipped"));
elements.add(new Element(String.format("<%s>", LanguageBundle.get("ext.logger.element.skipped")), "skipped"));
} else
elements.add(new Element(packetRepresentation, String.format(chkReprHex.isSelected() ? "%sHex": "%s", type.toLowerCase())));
elements.add(new Element("\n", ""));
@ -344,13 +353,13 @@ public class UiLoggerController implements Initializable {
public void updateLoggerInfo() {
Platform.runLater(() -> {
lblViewIncoming.setText(String.format("%s: %s", GEarth.translation.getString("ext.logger.menu.view.incoming"), (chkViewIncoming.isSelected() ? "True" : "False")));
lblViewOutgoing.setText(String.format("%s: %s", GEarth.translation.getString("ext.logger.menu.view.outgoing"), (chkViewOutgoing.isSelected() ? "True" : "False")));
lblAutoScrolll.setText(String.format("%s: %s", GEarth.translation.getString("ext.logger.menu.view.autoscroll"), (chkAutoscroll.isSelected() ? "True" : "False")));
lblFiltered.setText(String.format("%s: %d", GEarth.translation.getString("ext.logger.state.filtered"), filteredAmount));
viewIncoming.setKey(1, "ext.logger.state." + (chkViewIncoming.isSelected() ? "true" : "false"));
viewIncoming.setKey(1, "ext.logger.state." + (chkViewOutgoing.isSelected() ? "true" : "false"));
autoScroll.setKey(1, "ext.logger.state." + (chkAutoscroll.isSelected() ? "true" : "false"));
filtered.setFormat("%s: " + filteredAmount);
boolean packetInfoAvailable = uiLogger.getPacketInfoManager().getPacketInfoList().size() > 0;
lblPacketInfo.setText(String.format("%s: %s", GEarth.translation.getString("ext.logger.state.packetinfo"), (packetInfoAvailable ? "True" : "False")));
packetInfo.setKey(1, "ext.logger.state." + (packetInfoAvailable ? "true" : "false"));
});
}
@ -390,9 +399,9 @@ public class UiLoggerController implements Initializable {
//Set extension filter
FileChooser.ExtensionFilter extFilter =
new FileChooser.ExtensionFilter(String.format("%s (*.txt)", GEarth.translation.getString("ext.logger.menu.packets.exportall.filetype")), "*.txt");
new FileChooser.ExtensionFilter(String.format("%s (*.txt)", LanguageBundle.get("ext.logger.menu.packets.exportall.filetype")), "*.txt");
fileChooser.getExtensionFilters().add(extFilter);
fileChooser.setTitle(GEarth.translation.getString("ext.logger.menu.packets.exportall.windowtitle"));
fileChooser.setTitle(LanguageBundle.get("ext.logger.menu.packets.exportall.windowtitle"));
//Show save file dialog
File file = fileChooser.showSaveDialog(stage);
@ -417,4 +426,62 @@ public class UiLoggerController implements Initializable {
public void init(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);
}
}

View File

@ -121,12 +121,12 @@ public class GEarthController {
}
private void initLanguageBinding() {
tab_Connection.textProperty().bind(new TranslatableString("tab.connection"));
tab_Injection.textProperty().bind(new TranslatableString("tab.injection"));
tab_Tools.textProperty().bind(new TranslatableString("tab.tools"));
tab_Scheduler.textProperty().bind(new TranslatableString("tab.scheduler"));
tab_Extensions.textProperty().bind(new TranslatableString("tab.extensions"));
tab_Extra.textProperty().bind(new TranslatableString("tab.extra"));
tab_Info.textProperty().bind(new TranslatableString("tab.info"));
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"));
}
}

View File

@ -49,6 +49,8 @@ public class ConnectionController extends SubForm {
private volatile int initcount = 0;
private TranslatableString connect, state;
public void initialize() {
Constants.UNITY_PACKETS = rd_unity.isSelected();
@ -179,20 +181,20 @@ public class ConnectionController extends SubForm {
getHConnection().getStateObservable().addListener((oldState, newState) -> Platform.runLater(() -> {
updateInputUI();
if (newState == HState.NOT_CONNECTED) {
lblState.textProperty().bind(ConnectionState.NOTCONNECTED.value);
btnConnect.textProperty().bind(ConnectButton.CONNECT.value);
state.setKey(0, "tab.connection.state.notconnected");
connect.setKey(0, "tab.connection.button.connect");
outHost.setText("");
outPort.setText("");
}
else if (oldState == HState.NOT_CONNECTED) {
btnConnect.textProperty().bind(ConnectButton.ABORT.value);
connect.setKey(0, "tab.connection.button.abort");
}
if (newState == HState.CONNECTED) {
lblState.textProperty().bind(ConnectionState.CONNECTED.value);
state.setKey(0, "tab.connection.state.connected");
}
if (newState == HState.WAITING_FOR_CLIENT) {
lblState.textProperty().bind(ConnectionState.WAITING.value);
state.setKey(0, "tab.connection.state.waiting");
}
if (newState == HState.CONNECTED && useFlash()) {
@ -318,44 +320,23 @@ public class ConnectionController extends SubForm {
return false;
}
private enum ConnectButton {
CONNECT ("tab.connection.button.connect"),
ABORT ("tab.connection.button.abort");
public final TranslatableString value;
ConnectButton(String key) {
this.value = new TranslatableString(key);
}
}
private enum ConnectionState {
CONNECTED ("tab.connection.state.connected"),
NOTCONNECTED ("tab.connection.state.notconnected"),
WAITING ("tab.connection.state.waiting");
public final TranslatableString value;
ConnectionState(String key) {
this.value = new TranslatableString(key);
}
}
private void initLanguageBinding() {
TranslatableString port = new TranslatableString("tab.connection.port");
TranslatableString host = new TranslatableString("tab.connection.host");
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("tab.connection.autodetect"));
btnConnect.textProperty().bind(ConnectButton.CONNECT.value);
lblHotelVersion.textProperty().bind(new TranslatableString("tab.connection.version"));
lblClient.textProperty().bind(new TranslatableString("tab.connection.client"));
rd_unity.textProperty().bind(new TranslatableString("tab.connection.client.unity"));
rd_flash.textProperty().bind(new TranslatableString("tab.connection.client.flash"));
rd_nitro.textProperty().bind(new TranslatableString("tab.connection.client.nitro"));
lblStateHead.textProperty().bind(new TranslatableString("tab.connection.state"));
lblState.textProperty().bind(ConnectionState.NOTCONNECTED.value);
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);
}
}

View File

@ -4,6 +4,8 @@ import gearth.GEarth;
import gearth.services.extension_handler.extensions.ExtensionType;
import gearth.services.extension_handler.extensions.GEarthExtension;
import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
@ -81,7 +83,8 @@ public class ExtensionItemContainer extends GridPane {
add(versionLabel, 3, 0);
exitButton = new ExitButton();
Tooltip delete = new Tooltip(GEarth.translation.getString("tab.extensions.table.edit.delete.tooltip"));
Tooltip delete = new Tooltip();
delete.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.edit.delete.tooltip"));
Tooltip.install(exitButton,delete);
exitButton.show();
clickButton = new SimpleClickButton();
@ -90,7 +93,8 @@ public class ExtensionItemContainer extends GridPane {
buttonsBox = new HBox(clickButton, exitButton);
reloadButton = new ReloadButton();
Tooltip reload = new Tooltip(GEarth.translation.getString("tab.extensions.table.edit.restart.tooltip"));
Tooltip reload = new Tooltip();
reload.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.edit.restart.tooltip"));
Tooltip.install(reloadButton, reload);
reloadButton.show();
reloadButton.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
@ -100,8 +104,6 @@ public class ExtensionItemContainer extends GridPane {
});
DeleteButton deleteButton = new DeleteButton();
Tooltip uninstall = new Tooltip(GEarth.translation.getString("tab.extensions.table.edit.uninstall.tooltip"));
Tooltip.install(deleteButton, uninstall);
deleteButton.show();
GridPane this2 = this;
@ -111,8 +113,8 @@ public class ExtensionItemContainer extends GridPane {
if (ConfirmationDialog.showDialog(uninstallKey)) {
Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.CONFIRMATION, uninstallKey
, GEarth.translation.getString("alert.confirmation.windowtitle"), null,
GEarth.translation.getString("tab.extensions.table.edit.uninstall.confirmation"), GEarth.translation.getString("alert.confirmation.button.donotaskagain"),
, LanguageBundle.get("alert.confirmation.windowtitle"), null,
LanguageBundle.get("tab.extensions.table.edit.uninstall.confirmation"), LanguageBundle.get("alert.confirmation.button.donotaskagain"),
ButtonType.YES, ButtonType.NO
);
@ -218,4 +220,8 @@ public class ExtensionItemContainer extends GridPane {
}
return null;
}
private void initLanguageBinding() {
}
}

View File

@ -11,6 +11,8 @@ import gearth.services.extension_handler.extensions.implementations.network.exec
import gearth.services.g_python.GPythonShell;
import gearth.ui.SubForm;
import gearth.ui.subforms.extensions.logger.ExtensionLogger;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.scene.control.*;
@ -40,12 +42,14 @@ public class ExtensionsController extends SubForm {
private NetworkExtensionsProducer networkExtensionsProducer; // needed for port
private ExtensionLogger extensionLogger = null;
public Label lbl_tableTitle, lbl_tableDesc, lbl_tableAuthor, lbl_tableVersion, lbl_tableEdit, lbl_port;
public void initialize() {
scroller.widthProperty().addListener(observable -> header_ext.setPrefWidth(scroller.getWidth()));
extensionLogger = new ExtensionLogger();
initLanguageBinding();
}
protected void onParentSet() {
@ -81,9 +85,9 @@ public class ExtensionsController extends SubForm {
public void installBtnClicked(ActionEvent actionEvent) {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle(GEarth.translation.getString("tab.extensions.button.install.windowtitle"));
fileChooser.setTitle(LanguageBundle.get("tab.extensions.button.install.windowtitle"));
fileChooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter(GEarth.translation.getString("tab.extensions.button.install.filetype"), ExecutionInfo.ALLOWEDEXTENSIONTYPES));
new FileChooser.ExtensionFilter(LanguageBundle.get("tab.extensions.button.install.filetype"), ExecutionInfo.ALLOWEDEXTENSIONTYPES));
File selectedFile = fileChooser.showOpenDialog(parentController.getStage());
if (selectedFile != null) {
extensionRunner.installAndRunExtension(selectedFile.getPath(), networkExtensionsProducer.getPort());
@ -117,7 +121,7 @@ public class ExtensionsController extends SubForm {
pythonShellLaunching = true;
Platform.runLater(() -> btn_gpython.setDisable(true));
GPythonShell shell = new GPythonShell(
String.format("%s %d", GEarth.translation.getString("tab.extensions.button.pythonshell.windowtitle"),gpytonShellCounter++),
String.format("%s %d", LanguageBundle.get("tab.extensions.button.pythonshell.windowtitle"),gpytonShellCounter++),
networkExtensionsProducer.getPort(),
Authenticator.generatePermanentCookie()
);
@ -130,4 +134,18 @@ public class ExtensionsController extends SubForm {
public ExtensionHandler getExtensionHandler() {
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"));
}
}

View File

@ -4,6 +4,7 @@ import gearth.GEarth;
import gearth.ui.titlebar.DefaultTitleBarConfig;
import gearth.ui.titlebar.GEarthThemedTitleBarConfig;
import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.TranslatableString;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
@ -38,7 +39,7 @@ public class ExtensionLogger {
stage = new Stage();
stage.setTitle(String.format("G-Earth | %s", GEarth.translation.getString("tab.extensions.button.logs.windowtitle")));
stage.titleProperty().bind(new TranslatableString("G-Earth | %s", "tab.extensions.button.logs.windowtitle"));
stage.initModality(Modality.NONE);
stage.setAlwaysOnTop(true);
stage.setMinHeight(235);

View File

@ -11,6 +11,7 @@ import gearth.services.g_python.GPythonVersionUtils;
import gearth.ui.SubForm;
import gearth.ui.subforms.info.InfoController;
import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.scene.control.*;
@ -59,6 +60,7 @@ public class ExtraController extends SubForm implements SocksConfiguration {
public TextField txt_socksPort;
public TextField txt_socksIp;
public CheckBox cbx_admin;
public Label lbl_notepad, lbl_proxyIp, lbl_proxyPort;
private AdminService adminService;
@ -92,6 +94,8 @@ public class ExtraController extends SubForm implements SocksConfiguration {
cbx_useSocks.selectedProperty().addListener(observable -> grd_socksInfo.setDisable(!cbx_useSocks.isSelected()));
ProxyProviderFactory.setSocksConfig(this);
initLanguageBinding();
}
@Override
@ -220,4 +224,22 @@ public class ExtraController extends SubForm implements SocksConfiguration {
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"));
}
}

View File

@ -2,6 +2,8 @@ package gearth.ui.subforms.info;
import gearth.GEarth;
import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.event.ActionEvent;
import javafx.scene.control.*;
import gearth.ui.SubForm;
@ -24,7 +26,8 @@ public class InfoController extends SubForm {
public Hyperlink link_g_store;
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) {
link.setOnAction((ActionEvent event) -> {
@ -49,16 +52,18 @@ public class InfoController extends SubForm {
activateHyperlink(link_g_tanji);
activateHyperlink(link_g_store);
activateHyperlink(link_t_gearth);
initLanguageBinding();
}
public void donate(ActionEvent actionEvent) {
String pubkey = "1GEarthEV9Ua3RcixsKTcuc1PPZd9hqri3";
Alert alert = new Alert(Alert.AlertType.INFORMATION, GEarth.translation.getString("tab.info.donate.alert.title"), ButtonType.OK);
alert.setHeaderText(GEarth.translation.getString("tab.info.donate.alert.title"));
Alert alert = new Alert(Alert.AlertType.INFORMATION, LanguageBundle.get("tab.info.donate.alert.title"), ButtonType.OK);
alert.setHeaderText(LanguageBundle.get("tab.info.donate.alert.title"));
VBox test = new VBox();
test.getChildren().add(new Label(GEarth.translation.getString("tab.info.donate.alert.content")));
test.getChildren().add(new Label(LanguageBundle.get("tab.info.donate.alert.content")));
TextArea pubText = new TextArea(pubkey);
pubText.setPrefHeight(28);
pubText.setMaxWidth(250);
@ -73,4 +78,13 @@ public class InfoController extends SubForm {
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"));
}
}

View File

@ -34,6 +34,9 @@ public class InjectionController extends SubForm {
public Button btn_sendToClient;
public ListView<InjectedPackets> history;
public Label lblHistory;
public Hyperlink lnk_clearHistory;
private TranslatableString corruption, pcktInfo;
protected void onParentSet() {
getHConnection().getStateObservable().addListener((oldState, newState) -> Platform.runLater(this::updateUI));
@ -54,15 +57,14 @@ public class InjectionController extends SubForm {
}
});
lblHistory.setTooltip(new Tooltip());
lblHistory.getTooltip().textProperty().bind(new TranslatableString("tab.injection.history.tooltip"));
List<Object> rawHistory = Cacher.getList(HISTORY_CACHE_KEY);
if (rawHistory != null) {
List<InjectedPackets> history = rawHistory.stream()
.map(o -> (String)o).limit(historylimit - 1).map(InjectedPackets::new).collect(Collectors.toList());
updateHistoryView(history);
}
initLanguageBinding();
}
private static boolean isPacketIncomplete(String line) {
@ -106,7 +108,7 @@ public class InjectionController extends SubForm {
private void updateUI() {
boolean dirty = false;
lbl_corruption.setText(GEarth.translation.getString("tab.injection.corrupted.false"));
corruption.setKey(1, "tab.injection.corrupted.false");
lbl_corruption.getStyleClass().clear();
lbl_corruption.getStyleClass().add("not-corrupted-label");
@ -122,17 +124,18 @@ public class InjectionController extends SubForm {
for (int i = 0; i < packets.length; i++) {
if (packets[i].isCorrupted()) {
if (!dirty) {
lbl_corruption.setText(String.format("%s -> %d", GEarth.translation.getString("tab.injection.corrupted.true"), i));
corruption.setFormat("%s: %s -> " + i);
corruption.setKey(1, "tab.injection.corrupted.true");
lbl_corruption.getStyleClass().clear();
lbl_corruption.getStyleClass().add("corrupted-label");
dirty = true;
} else
lbl_corruption.setText(lbl_corruption.getText() + ", " + i);
corruption.setFormat(corruption.getFormat() + ", " + i);
}
}
if (dirty && packets.length == 1) {
lbl_corruption.setText(GEarth.translation.getString("tab.injection.corrupted.true")); // no index needed
corruption.setFormatAndKeys("%s: %s", "tab.injection.corrupted", "tab.injection.corrupted.true");
}
if (!dirty) {
@ -150,26 +153,23 @@ public class InjectionController extends SubForm {
btn_sendToClient.setDisable(!canSendToClient || getHConnection().getState() != HState.CONNECTED);
btn_sendToServer.setDisable(!canSendToServer || getHConnection().getState() != HState.CONNECTED);
if (packets.length == 1) {
lbl_pcktInfo.setText(String.format("%s (%s: %d, %s: %d)",
GEarth.translation.getString("tab.injection.description.header"),
GEarth.translation.getString("tab.injection.description.id"),
packets[0].headerId(),
GEarth.translation.getString("tab.injection.description.length"),
packets[0].length()));
pcktInfo.setFormatAndKeys("%s (%s: " + packets[0].headerId() + ", %s: " + packets[0].length() + ")",
"tab.injection.description.header",
"tab.injection.description.id",
"tab.injection.description.length");
}
else {
lbl_pcktInfo.setText("");
}
} else {
if (packets.length == 1) {
lbl_pcktInfo.setText(String.format("%s (%s:NULL, %s: %d)",
GEarth.translation.getString("tab.injection.description.header"),
GEarth.translation.getString("tab.injection.description.id"),
GEarth.translation.getString("tab.injection.description.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 {
lbl_pcktInfo.setText("");
pcktInfo.setFormatAndKeys("");
}
btn_sendToClient.setDisable(true);
@ -235,6 +235,23 @@ public class InjectionController extends SubForm {
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) {
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());

View File

@ -4,8 +4,11 @@ import com.tulskiy.keymaster.common.Provider;
import gearth.GEarth;
import gearth.services.scheduler.Interval;
import gearth.services.scheduler.Scheduler;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
@ -49,6 +52,9 @@ public class SchedulerController extends SubForm {
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() {
scrollpane.widthProperty().addListener(observable -> header.setPrefWidth(scrollpane.getWidth()));
@ -57,10 +63,6 @@ public class SchedulerController extends SubForm {
txt_packet.textProperty().addListener(event -> Platform.runLater(this::updateUI));
txt_delay.textProperty().addListener(event -> Platform.runLater(this::updateUI));
btn_clear.setTooltip(new Tooltip(GEarth.translation.getString("tab.scheduler.button.clear.tooltip")));
btn_save.setTooltip(new Tooltip(GEarth.translation.getString("tab.scheduler.button.save.tooltip")));
btn_load.setTooltip(new Tooltip(GEarth.translation.getString("tab.scheduler.button.load.tooltip")));
updateUI();
//register hotkeys
@ -77,6 +79,8 @@ public class SchedulerController extends SubForm {
provider.register(KeyStroke.getKeyStroke("control shift " + ii[0]), hotKey -> switchPauseHotkey(ii[0]));
}
System.setErr(err);
initLanguageBinding();
}
@Override
@ -158,7 +162,7 @@ public class SchedulerController extends SubForm {
rb_outgoing.setSelected(newItem.getDestinationProperty().get() == HMessage.Direction.TOSERVER);
isBeingEdited = newItem;
btn_addoredit.setText(GEarth.translation.getString("tab.scheduler.button.edit"));
addoredit.setKey(0, "tab.scheduler.button.edit");
updateUI();
newItem.onIsBeingUpdatedTrigger();
}
@ -176,7 +180,7 @@ public class SchedulerController extends SubForm {
rb_incoming.setSelected(true);
rb_outgoing.setSelected(false);
btn_addoredit.setText(GEarth.translation.getString("tab.scheduler.button.add"));
addoredit.setKey(0, "tab.scheduler.button.add");
updateUI();
}
@ -204,9 +208,9 @@ public class SchedulerController extends SubForm {
//Set extension filter
FileChooser.ExtensionFilter extFilter =
new FileChooser.ExtensionFilter(GEarth.translation.getString("tab.scheduler.filetype"), "*.sched");
new FileChooser.ExtensionFilter(LanguageBundle.get("tab.scheduler.filetype"), "*.sched");
fileChooser.getExtensionFilters().add(extFilter);
fileChooser.setTitle(GEarth.translation.getString("tab.scheduler.button.save.windowtitle"));
fileChooser.setTitle(LanguageBundle.get("tab.scheduler.button.save.windowtitle"));
//Show save file dialog
File file = fileChooser.showSaveDialog(parentController.getStage());
@ -235,9 +239,9 @@ public class SchedulerController extends SubForm {
List<InteractableScheduleItem> list = new ArrayList<>();
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle(GEarth.translation.getString("tab.scheduler.button.load.windowtitle"));
fileChooser.setTitle(LanguageBundle.get("tab.scheduler.button.load.windowtitle"));
fileChooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter(GEarth.translation.getString("tab.scheduler.filetype"), "*.sched"));
new FileChooser.ExtensionFilter(LanguageBundle.get("tab.scheduler.filetype"), "*.sched"));
File selectedFile = fileChooser.showOpenDialog(parentController.getStage());
if (selectedFile != null) {
@ -263,4 +267,35 @@ public class SchedulerController extends SubForm {
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"));
}
}

View File

@ -1,8 +1,10 @@
package gearth.ui.subforms.tools;
import gearth.services.packet_info.PacketInfoManager;
import gearth.ui.translations.TranslatableString;
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
@ -27,6 +29,8 @@ public class ToolsController extends SubForm {
public Button btn_toPacket;
public TextArea txt_exprArea;
public Label lbl_integer, lbl_uShort, lbl_encodingDecoding, lbl_packetToExpression;
//TODO: toExpression() without bytelength limit for this use only
public void initialize() {
@ -115,6 +119,7 @@ public class ToolsController extends SubForm {
}
});
initLanguageBinding();
}
public void btnEncodeInt_clicked(ActionEvent actionEvent) {
@ -156,4 +161,20 @@ public class ToolsController extends SubForm {
public void btn_toPacket_clicked(ActionEvent actionEvent) {
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"));
}
}

View File

@ -2,6 +2,7 @@ package gearth.ui.translations;
import gearth.GEarth;
import gearth.misc.Cacher;
import gearth.services.internal_extensions.extensionstore.application.GExtensionStoreController;
import gearth.ui.themes.Theme;
import java.util.Enumeration;
@ -41,6 +42,7 @@ public class LanguageBundle extends ResourceBundle {
public static void setLanguage(Language lang) {
current = lang;
requireUpdate.forEach(TranslatableString::trigger);
GExtensionStoreController.reloadPage();
Cacher.put(LANGUAGE_CACHE_KEY, current.toString());
}

View File

@ -1,22 +1,82 @@
package gearth.ui.translations;
import gearth.misc.StringifyAble;
import javafx.beans.value.ObservableValueBase;
import org.json.JSONArray;
import org.json.JSONObject;
public class TranslatableString extends ObservableValueBase<String> {
private final String key;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public TranslatableString(String key) {
this.key = key;
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 LanguageBundle.get(key);
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);
}
}

View File

@ -8,83 +8,83 @@
<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>
<MenuBar BorderPane.alignment="CENTER">
<Menu mnemonicParsing="false" text="%ext.logger.menu.window">
<Menu fx:id="menu_window" mnemonicParsing="false" text="Window">
<items>
<CheckMenuItem fx:id="chkAlwaysOnTop" mnemonicParsing="false" onAction="#toggleAlwaysOnTop" text="%ext.logger.menu.window.alwaysontop" />
<Menu mnemonicParsing="false" text="%ext.logger.menu.window.onconnect">
<CheckMenuItem fx:id="chkAlwaysOnTop" mnemonicParsing="false" onAction="#toggleAlwaysOnTop" text="Always on top" />
<Menu fx:id="menu_window_onConnect" mnemonicParsing="false" text="On connect">
<items>
<CheckMenuItem fx:id="chkOpenOnConnect" mnemonicParsing="false" text="%ext.logger.menu.window.onconnect.openwindow" />
<CheckMenuItem fx:id="chkResetOnConnect" mnemonicParsing="false" selected="true" text="%ext.logger.menu.window.onconnect.reset" />
<CheckMenuItem fx:id="chkOpenOnConnect" mnemonicParsing="false" text="Open window" />
<CheckMenuItem fx:id="chkResetOnConnect" mnemonicParsing="false" selected="true" text="Reset packetlogger" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="%ext.logger.menu.window.ondisconnect">
<Menu fx:id="menu_window_onDisconnect" mnemonicParsing="false" text="%ext.logger.menu.window.ondisconnect">
<items>
<CheckMenuItem fx:id="chkHideOnDisconnect" mnemonicParsing="false" selected="true" text="%ext.logger.menu.window.ondisconnect.hidewindow" />
<CheckMenuItem fx:id="chkResetOnDisconnect" mnemonicParsing="false" text="%ext.logger.menu.window.ondisconnect.reset" />
<CheckMenuItem fx:id="chkHideOnDisconnect" mnemonicParsing="false" selected="true" text="Hide window" />
<CheckMenuItem fx:id="chkResetOnDisconnect" mnemonicParsing="false" text="Reset packetlogger" />
</items>
</Menu>
</items>
</Menu>
<Menu mnemonicParsing="false" text="%ext.logger.menu.view">
<CheckMenuItem fx:id="chkViewIncoming" mnemonicParsing="false" text="%ext.logger.menu.view.incoming">
<Menu fx:id="menu_view" mnemonicParsing="false" text="View">
<CheckMenuItem fx:id="chkViewIncoming" mnemonicParsing="false" text="View incoming">
<accelerator>
<KeyCodeCombination alt="UP" code="I" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
</accelerator></CheckMenuItem>
<CheckMenuItem fx:id="chkViewOutgoing" mnemonicParsing="false" selected="true" text="%ext.logger.menu.view.outgoing">
<CheckMenuItem fx:id="chkViewOutgoing" mnemonicParsing="false" selected="true" text="View outgoing">
<accelerator>
<KeyCodeCombination alt="UP" code="O" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
</accelerator></CheckMenuItem>
<CheckMenuItem fx:id="chkAutoscroll" mnemonicParsing="false" selected="true" text="%ext.logger.menu.view.autoscroll">
<CheckMenuItem fx:id="chkAutoscroll" mnemonicParsing="false" selected="true" text="Autoscroll">
<accelerator>
<KeyCodeCombination alt="UP" code="L" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
</accelerator></CheckMenuItem>
<MenuItem mnemonicParsing="false" onAction="#clearText" text="%ext.logger.menu.view.cleartext">
<MenuItem fx:id="menuItem_clear" mnemonicParsing="false" onAction="#clearText" text="Clear text">
<accelerator>
<KeyCodeCombination alt="UP" code="E" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
</accelerator></MenuItem>
</Menu>
<Menu mnemonicParsing="false" text="%ext.logger.menu.packets">
<Menu fx:id="menu_packets" mnemonicParsing="false" text="Packets">
<items>
<Menu mnemonicParsing="false" text="%ext.logger.menu.packets.displaydetails">
<Menu fx:id="menu_packets_details" mnemonicParsing="false" text="Display details">
<items>
<Menu mnemonicParsing="false" text="%ext.logger.menu.packets.displaydetails.byterep">
<Menu fx:id="menu_packets_details_byteRep" mnemonicParsing="false" text="Byte representation">
<items>
<RadioMenuItem fx:id="chkReprLegacy" mnemonicParsing="false" selected="true" text="%ext.logger.menu.packets.displaydetails.byterep.legacy">
<RadioMenuItem fx:id="chkReprLegacy" mnemonicParsing="false" selected="true" text="Legacy">
<toggleGroup>
<ToggleGroup fx:id="byterepr" />
</toggleGroup>
</RadioMenuItem>
<RadioMenuItem fx:id="chkReprHex" mnemonicParsing="false" text="%ext.logger.menu.packets.displaydetails.byterep.hexdump" toggleGroup="$byterepr" />
<RadioMenuItem fx:id="chkReprRawHex" mnemonicParsing="false" text="%ext.logger.menu.packets.displaydetails.byterep.rawhex" toggleGroup="$byterepr" />
<RadioMenuItem fx:id="chkReprNone" mnemonicParsing="false" text="%ext.logger.menu.packets.displaydetails.byterep.none" toggleGroup="$byterepr" />
<RadioMenuItem fx:id="chkReprHex" mnemonicParsing="false" text="Hexdump" toggleGroup="$byterepr" />
<RadioMenuItem fx:id="chkReprRawHex" mnemonicParsing="false" text="Raw hex" toggleGroup="$byterepr" />
<RadioMenuItem fx:id="chkReprNone" mnemonicParsing="false" text="None" toggleGroup="$byterepr" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="%ext.logger.menu.packets.displaydetails.message">
<Menu fx:id="menu_packets_details_message" mnemonicParsing="false" text="Message">
<items>
<CheckMenuItem fx:id="chkMessageName" mnemonicParsing="false" selected="true" text="%ext.logger.menu.packets.displaydetails.message.name" />
<CheckMenuItem fx:id="chkMessageHash" mnemonicParsing="false" text="%ext.logger.menu.packets.displaydetails.message.hash" />
<CheckMenuItem fx:id="chkMessageId" mnemonicParsing="false" text="%ext.logger.menu.packets.displaydetails.message.id" />
<CheckMenuItem fx:id="chkMessageName" mnemonicParsing="false" selected="true" text="Name" />
<CheckMenuItem fx:id="chkMessageHash" mnemonicParsing="false" text="Hash" />
<CheckMenuItem fx:id="chkMessageId" mnemonicParsing="false" text="Id" />
</items>
</Menu>
<CheckMenuItem fx:id="chkDisplayStructure" mnemonicParsing="false" selected="true" text="%ext.logger.menu.packets.displaydetails.structure" />
<CheckMenuItem fx:id="chkTimestamp" mnemonicParsing="false" text="%ext.logger.menu.packets.displaydetails.timestamp" />
<CheckMenuItem fx:id="chkDisplayStructure" mnemonicParsing="false" selected="true" text="Structure" />
<CheckMenuItem fx:id="chkTimestamp" mnemonicParsing="false" text="Timestamp" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="%ext.logger.menu.packets.antispam">
<Menu fx:id="menu_packets_antiSpam" mnemonicParsing="false" text="Anti-spam filter">
<items>
<RadioMenuItem fx:id="chkAntiSpam_none" mnemonicParsing="false" selected="true" text="%ext.logger.menu.packets.antispam.none">
<RadioMenuItem fx:id="chkAntiSpam_none" mnemonicParsing="false" selected="true" text="None">
<toggleGroup>
<ToggleGroup fx:id="antispam" />
</toggleGroup>
</RadioMenuItem>
<RadioMenuItem fx:id="chkAntiSpam_low" mnemonicParsing="false" text="%ext.logger.menu.packets.antispam.low" toggleGroup="$antispam" />
<RadioMenuItem fx:id="chkAntiSpam_medium" mnemonicParsing="false" text="%ext.logger.menu.packets.antispam.med" toggleGroup="$antispam" />
<RadioMenuItem fx:id="chkAntiSpam_high" mnemonicParsing="false" text="%ext.logger.menu.packets.antispam.high" toggleGroup="$antispam" />
<RadioMenuItem fx:id="chkAntiSpam_ultra" mnemonicParsing="false" text="%ext.logger.menu.packets.antispam.ultra" toggleGroup="$antispam" />
<RadioMenuItem fx:id="chkAntiSpam_low" mnemonicParsing="false" text="Low" toggleGroup="$antispam" />
<RadioMenuItem fx:id="chkAntiSpam_medium" mnemonicParsing="false" text="Medium" toggleGroup="$antispam" />
<RadioMenuItem fx:id="chkAntiSpam_high" mnemonicParsing="false" text="High" toggleGroup="$antispam" />
<RadioMenuItem fx:id="chkAntiSpam_ultra" mnemonicParsing="false" text="Ultra" toggleGroup="$antispam" />
</items>
</Menu>
<CheckMenuItem fx:id="chkSkipBigPackets" mnemonicParsing="false" selected="true" text="%ext.logger.menu.packets.skipbig" />
<MenuItem mnemonicParsing="false" onAction="#exportAll" text="%ext.logger.menu.packets.exportall" />
<CheckMenuItem fx:id="chkSkipBigPackets" mnemonicParsing="false" selected="true" text="Skip big packets" />
<MenuItem fx:id="menuItem_exportAll" mnemonicParsing="false" onAction="#exportAll" text="Export all" />
</items>
</Menu>
</MenuBar>
@ -94,7 +94,7 @@
<padding>
<Insets left="10.0" top="1.0" />
</padding>
<Label fx:id="lblViewIncoming" style="-fx-text-fill: black !important" text="%ext.logger.state.viewincoming.base">
<Label fx:id="lblViewIncoming" style="-fx-text-fill: black !important" text="View incoming: True">
<FlowPane.margin>
<Insets right="10.0" />
</FlowPane.margin>
@ -104,7 +104,7 @@
<Insets right="10.0" />
</FlowPane.margin>
</Label>
<Label fx:id="lblViewOutgoing" style="-fx-text-fill: black !important" text="%ext.logger.state.viewoutgoing.base">
<Label fx:id="lblViewOutgoing" style="-fx-text-fill: black !important" text="View outgoing: True">
<FlowPane.margin>
<Insets right="10.0" />
</FlowPane.margin>
@ -114,7 +114,7 @@
<Insets right="10.0" />
</FlowPane.margin>
</Label>
<Label fx:id="lblAutoScrolll" layoutX="151.0" layoutY="11.0" style="-fx-text-fill: black !important" text="%ext.logger.state.autoscroll.base">
<Label fx:id="lblAutoScroll" layoutX="151.0" layoutY="11.0" style="-fx-text-fill: black !important" text="Autoscroll: True">
<FlowPane.margin>
<Insets right="10.0" />
</FlowPane.margin></Label>
@ -123,7 +123,7 @@
<Insets right="10.0" />
</FlowPane.margin>
</Label>
<Label fx:id="lblPacketInfo" layoutX="283.0" layoutY="11.0" style="-fx-text-fill: black !important" text="%ext.logger.state.packetinfo.base">
<Label fx:id="lblPacketInfo" layoutX="283.0" layoutY="11.0" style="-fx-text-fill: black !important" text="Packetinfo: False">
<FlowPane.margin>
<Insets right="10.0" />
</FlowPane.margin>
@ -133,7 +133,7 @@
<Insets right="10.0" />
</FlowPane.margin>
</Label>
<Label fx:id="lblFiltered" layoutX="389.0" layoutY="11.0" style="-fx-text-fill: black !important" text="%ext.logger.state.filtered.base" />
<Label fx:id="lblFiltered" layoutX="389.0" layoutY="11.0" style="-fx-text-fill: black !important" text="Filtered: 0" />
</FlowPane>
</bottom>
</BorderPane>

View File

@ -78,13 +78,10 @@
<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>
<Insets left="-5.0" />
</GridPane.margin>
<font>
<Font size="12.0" />
</font>
</CheckBox>
<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>

View File

@ -31,11 +31,11 @@
<VBox.margin>
<Insets bottom="-2.0" left="-2.0" right="-2.0" top="-2.0" />
</VBox.margin>
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="%tab.extensions.table.title" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="%tab.extensions.table.description" GridPane.columnIndex="1" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="%tab.extensions.table.author" GridPane.columnIndex="2" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="%tab.extensions.table.version" GridPane.columnIndex="3" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="%tab.extensions.table.edit" GridPane.columnIndex="4" />
<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 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 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 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 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>
</VBox>
</ScrollPane>
@ -61,19 +61,19 @@
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<Button fx:id="btn_gpython" disable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#gpythonBtnClicked" text="%tab.extensions.button.pythonshell" 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">
<GridPane.margin>
<Insets left="-7.0" />
</GridPane.margin>
</TextField>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="%tab.extensions.port" textFill="#000000bb">
<Label fx:id="lbl_port" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Port:" textFill="#000000bb">
<GridPane.margin>
<Insets left="3.0" />
</GridPane.margin>
</Label>
<Button fx:id="btn_install" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#installBtnClicked" text="%tab.extensions.button.install" GridPane.columnIndex="5" />
<Button fx:id="btn_viewExtensionConsole" layoutX="401.0" layoutY="10.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#extConsoleBtnClicked" text="%tab.extensions.button.logs" GridPane.columnIndex="4" />
<Button fx:id="btn_install" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#installBtnClicked" text="Install" GridPane.columnIndex="5" />
<Button fx:id="btn_viewExtensionConsole" layoutX="401.0" layoutY="10.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#extConsoleBtnClicked" text="View logs" GridPane.columnIndex="4" />
</GridPane>
</GridPane>
</GridPane>

View File

@ -15,9 +15,9 @@
<children>
<AnchorPane prefHeight="262.0" prefWidth="318.0">
<children>
<CheckBox fx:id="cbx_alwaysOnTop" layoutX="14.0" layoutY="232.0" mnemonicParsing="false" text="%tab.extra.options.alwaysontop" />
<Hyperlink fx:id="url_troubleshooting" layoutX="223.0" layoutY="232.0" text="%tab.extra.troubleshooting" />
<Label layoutX="14.0" layoutY="8.0" text="%tab.extra.notepad" textFill="#000000bd" />
<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" />
<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" />
</children>
</AnchorPane>
@ -50,9 +50,9 @@
<Insets left="7.0" top="3.0" />
</padding>
<children>
<CheckBox fx:id="cbx_useSocks" mnemonicParsing="false" text="%tab.extra.options.advanced.socks" />
<CheckBox fx:id="cbx_disableDecryption" mnemonicParsing="false" text="%tab.extra.options.advanced.disabledecryption" GridPane.rowIndex="2" />
<CheckBox fx:id="cbx_debug" mnemonicParsing="false" text="%tab.extra.options.advanced.debugstdout" GridPane.rowIndex="3" />
<CheckBox fx:id="cbx_useSocks" mnemonicParsing="false" text="Use SOCKS proxy" />
<CheckBox fx:id="cbx_disableDecryption" mnemonicParsing="false" text="Disable decryption" GridPane.rowIndex="2" />
<CheckBox fx:id="cbx_debug" mnemonicParsing="false" text="Debug to stdout" GridPane.rowIndex="3" />
<GridPane fx:id="grd_socksInfo" disable="true" prefHeight="54.0" prefWidth="81.0" GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
@ -77,8 +77,8 @@
<RowConstraints maxHeight="29.0" minHeight="29.0" prefHeight="29.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="%tab.extra.options.advanced.proxy.ip" />
<Label text="%tab.extra.options.advanced.proxy.port" GridPane.rowIndex="1" />
<Label fx:id="lbl_proxyIp" text="%tab.extra.options.advanced.proxy.ip" />
<Label fx:id="lbl_proxyPort" text="%tab.extra.options.advanced.proxy.port" GridPane.rowIndex="1" />
<TextField fx:id="txt_socksPort" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" GridPane.columnIndex="1" GridPane.rowIndex="1">
<opaqueInsets>
<Insets />
@ -104,7 +104,7 @@
</GridPane>
</children>
</GridPane>
<CheckBox fx:id="cbx_advanced" mnemonicParsing="false" text="%tab.extra.options.advanced" textFill="#000000ba" GridPane.rowIndex="3">
<CheckBox fx:id="cbx_advanced" mnemonicParsing="false" text="Advanced" textFill="#000000ba" GridPane.rowIndex="3">
<GridPane.margin>
<Insets left="10.0" top="2.0" />
</GridPane.margin>
@ -112,12 +112,12 @@
<Insets top="2.0" />
</padding>
</CheckBox>
<CheckBox fx:id="cbx_gpython" mnemonicParsing="false" onAction="#gpythonCbxClick" text="%tab.extra.options.pythonscripting" textFill="#000000ba" GridPane.rowIndex="2">
<CheckBox fx:id="cbx_gpython" mnemonicParsing="false" onAction="#gpythonCbxClick" text="G-Python scripting" textFill="#000000ba" GridPane.rowIndex="2">
<GridPane.margin>
<Insets left="10.0" top="2.0" />
</GridPane.margin>
</CheckBox>
<CheckBox fx:id="cbx_admin" layoutX="20.0" layoutY="25.0" mnemonicParsing="false" onAction="#adminCbxClick" selected="true" text="%tab.extra.options.staffpermissions" textFill="#000000ba" GridPane.rowIndex="1">
<CheckBox fx:id="cbx_admin" layoutX="20.0" layoutY="25.0" mnemonicParsing="false" onAction="#adminCbxClick" selected="true" text="Client-side staff permissions" textFill="#000000ba" GridPane.rowIndex="1">
<GridPane.margin>
<Insets left="10.0" top="2.0" />
</GridPane.margin>

View File

@ -20,22 +20,22 @@
<Font size="18.0" />
</font>
</Label>
<Label layoutX="260.0" layoutY="57.0" text="%tab.info.description" textFill="#000000b2">
<Label fx:id="lbl_description" layoutX="260.0" layoutY="57.0" text="Habbo packet manipulator for Linux, Windows &amp; Mac" textFill="#000000b2">
<font>
<Font size="14.0" />
</font>
</Label>
<Label layoutX="260.0" layoutY="92.0" text="%tab.info.createdby" textFill="#000000b2">
<Label fx:id="lbl_createdBy" layoutX="260.0" layoutY="92.0" text="Created by:" textFill="#000000b2">
<font>
<Font name="System Bold" size="14.0" />
</font>
</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 size="14.0" />
</font>
</Label>
<Label layoutX="260.0" layoutY="124.0" text="%tab.info.contributors" textFill="#000000b2">
<Label fx:id="lbl_contrib" layoutX="260.0" layoutY="124.0" text="Contributors:" textFill="#000000b2">
<font>
<Font name="System Bold" size="14.0" />
</font>
@ -75,7 +75,7 @@
<Font size="14.0" />
</font>
</Label>
<Label layoutX="491.0" layoutY="92.0" text="%tab.info.links" textFill="#000000b2">
<Label fx:id="lbl_links" layoutX="491.0" layoutY="92.0" text="Links:" textFill="#000000b2">
<font>
<Font name="System Bold" size="14.0" />
</font>
@ -85,7 +85,7 @@
<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_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="%tab.info.donate" />
<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_d_bonnie" layoutX="400.0" layoutY="221.0" text="Discord - BonnieScripting (pt/br)" />-->
</children>

View File

@ -37,12 +37,12 @@
<GridPane.margin>
<Insets left="13.0" right="13.0" top="4.0" />
</GridPane.margin>
<Text fx:id="lbl_corruption" strokeType="OUTSIDE" strokeWidth="0.0" styleClass="corrupted-label" text="%tab.injection.corrupted.true">
<Text fx:id="lbl_corruption" strokeType="OUTSIDE" strokeWidth="0.0" styleClass="corrupted-label" text="isCorrupted: True">
<font>
<Font name="System Italic" size="11.0" />
</font>
</Text>
<Text fx:id="lbl_pcktInfo" fill="#000000b2" nodeOrientation="LEFT_TO_RIGHT" strokeType="OUTSIDE" strokeWidth="0.0" styleClass="pckt-info" text="%tab.injection.description" 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 name="System Italic" size="11.0" />
</font>
@ -61,12 +61,12 @@
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<Button fx:id="btn_sendToServer" disable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#sendToServer_clicked" text="%tab.injection.send.toserver" GridPane.halignment="CENTER" GridPane.valignment="CENTER">
<Button fx:id="btn_sendToServer" disable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#sendToServer_clicked" text="Send to server" GridPane.halignment="CENTER" GridPane.valignment="CENTER">
<GridPane.margin>
<Insets bottom="5.0" left="10.0" right="10.0" top="5.0" />
</GridPane.margin>
</Button>
<Button fx:id="btn_sendToClient" disable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#sendToClient_clicked" text="%tab.injection.send.toclient" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.valignment="CENTER">
<Button fx:id="btn_sendToClient" disable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#sendToClient_clicked" text="Send to client" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.valignment="CENTER">
<GridPane.margin>
<Insets bottom="5.0" left="10.0" right="10.0" top="5.0" />
</GridPane.margin>
@ -92,11 +92,11 @@
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Hyperlink alignment="CENTER_RIGHT" onAction="#clearHistoryClick" text="%tab.injection.history.clear" GridPane.columnIndex="1">
<Hyperlink fx:id="lnk_clearHistory" alignment="CENTER_RIGHT" onAction="#clearHistoryClick" text="Clear" GridPane.columnIndex="1">
<GridPane.margin>
<Insets right="6.0" />
</GridPane.margin></Hyperlink>
<Label fx:id="lblHistory" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="%tab.injection.history" textFill="#000000cc">
<Label fx:id="lblHistory" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="History:" textFill="#000000cc">
<GridPane.margin>
<Insets />
</GridPane.margin>

View File

@ -31,11 +31,11 @@
<VBox.margin>
<Insets bottom="-2.0" left="-2.0" right="-2.0" top="-2.0" />
</VBox.margin>
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="%tab.scheduler.table.index" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="%tab.scheduler.table.packet" GridPane.columnIndex="1" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="%tab.scheduler.table.interval" GridPane.columnIndex="2" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="%tab.scheduler.table.destination" GridPane.columnIndex="3" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="%tab.scheduler.table.edit" GridPane.columnIndex="4" />
<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 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 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 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 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>
</VBox>
</ScrollPane>
@ -67,14 +67,14 @@
<Insets left="-7.0" />
</GridPane.margin>
</TextField>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="%tab.scheduler.setup.packet" textFill="#000000bb">
<Label fx:id="lbl_setupPacket" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Packet:" textFill="#000000bb">
<GridPane.margin>
<Insets left="3.0" />
</GridPane.margin>
</Label>
<Button fx:id="btn_clear" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#clearBtnClicked" text="%tab.scheduler.button.clear" GridPane.columnIndex="3" />
<Button fx:id="btn_save" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#saveBtnClicked" text="%tab.scheduler.button.save" GridPane.columnIndex="4" />
<Button fx:id="btn_load" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#loadBtnClicked" text="%tab.scheduler.button.load" GridPane.columnIndex="5" />
<Button fx:id="btn_clear" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#clearBtnClicked" text="Clear" GridPane.columnIndex="3" />
<Button fx:id="btn_save" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#saveBtnClicked" text="S" GridPane.columnIndex="4" />
<Button fx:id="btn_load" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#loadBtnClicked" text="L" GridPane.columnIndex="5" />
</GridPane>
<GridPane prefHeight="33.0" prefWidth="502.0" GridPane.rowIndex="1">
<columnConstraints>
@ -96,17 +96,17 @@
<Insets right="5.0" />
</GridPane.margin>
</TextField>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="%tab.scheduler.setup.interval" textFill="#000000bb">
<Label fx:id="lbl_setupInterval" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Interval:" textFill="#000000bb">
<GridPane.margin>
<Insets left="3.0" />
</GridPane.margin>
</Label>
<Button fx:id="btn_addoredit" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#scheduleBtnClicked" text="%tab.scheduler.button.add" GridPane.columnIndex="4">
<Button fx:id="btn_addoredit" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#scheduleBtnClicked" text="Add" GridPane.columnIndex="4">
<GridPane.margin>
<Insets bottom="2.0" left="5.0" top="2.0" />
</GridPane.margin>
</Button>
<RadioButton fx:id="rb_incoming" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="%tab.scheduler.direction.in" GridPane.columnIndex="2">
<RadioButton fx:id="rb_incoming" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="In" GridPane.columnIndex="2">
<GridPane.margin>
<Insets left="5.0" />
</GridPane.margin>
@ -114,12 +114,12 @@
<ToggleGroup fx:id="scheduler_dest" />
</toggleGroup>
</RadioButton>
<RadioButton fx:id="rb_outgoing" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="%tab.scheduler.direction.out" toggleGroup="$scheduler_dest" GridPane.columnIndex="3">
<RadioButton fx:id="rb_outgoing" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Out" toggleGroup="$scheduler_dest" GridPane.columnIndex="3">
<GridPane.margin>
<Insets left="5.0" />
</GridPane.margin>
</RadioButton>
<CheckBox fx:id="cbx_hotkeys" mnemonicParsing="false" text="%tab.scheduler.hotkeys" textFill="#4d4d4d" GridPane.columnIndex="5">
<CheckBox fx:id="cbx_hotkeys" mnemonicParsing="false" text="Enable hotkeys (Ctrl+Shift+Index)" textFill="#4d4d4d" GridPane.columnIndex="5">
<GridPane.margin>
<Insets left="32.0" />
</GridPane.margin>

View File

@ -46,7 +46,7 @@
<GridPane.margin>
<Insets/>
</GridPane.margin>
<Label alignment="CENTER" text="%tab.tools.type.integer">
<Label fx:id="lbl_integer" alignment="CENTER" text="Integer:">
<GridPane.margin>
<Insets left="10.0"/>
</GridPane.margin>
@ -59,7 +59,7 @@
</TextField>
<Button fx:id="btnEncodeInt" disable="true" maxHeight="1.7976931348623157E308"
maxWidth="1.7976931348623157E308" mnemonicParsing="false"
onAction="#btnEncodeInt_clicked" text="%tab.tools.button.encode" GridPane.columnIndex="2"
onAction="#btnEncodeInt_clicked" text="Encode" GridPane.columnIndex="2"
GridPane.halignment="CENTER">
<GridPane.margin>
<Insets bottom="7.0" left="5.0" right="5.0" top="7.0"/>
@ -67,7 +67,7 @@
</Button>
<Button fx:id="btnDecodeInt" disable="true" maxHeight="1.7976931348623157E308"
maxWidth="1.7976931348623157E308" mnemonicParsing="false"
onAction="#btnDecodeInt_clicked" text="%tab.tools.button.decode" GridPane.columnIndex="3"
onAction="#btnDecodeInt_clicked" text="Decode" GridPane.columnIndex="3"
GridPane.halignment="CENTER">
<GridPane.margin>
<Insets bottom="7.0" left="5.0" right="5.0" top="7.0"/>
@ -80,7 +80,7 @@
</GridPane.margin>
</TextField>
<Label alignment="CENTER" text="%tab.tools.type.ushort" GridPane.rowIndex="1">
<Label fx:id="lbl_uShort" alignment="CENTER" text="Ushort:" GridPane.rowIndex="1">
<GridPane.margin>
<Insets left="10.0"/>
</GridPane.margin>
@ -94,7 +94,7 @@
</TextField>
<Button fx:id="btnEncodeUShort" disable="true" maxHeight="1.7976931348623157E308"
maxWidth="1.7976931348623157E308" mnemonicParsing="false"
onAction="#btnEncodeUShort_clicked" text="%tab.tools.button.encode" GridPane.columnIndex="2"
onAction="#btnEncodeUShort_clicked" text="Encode" GridPane.columnIndex="2"
GridPane.halignment="CENTER" GridPane.rowIndex="1">
<GridPane.margin>
<Insets bottom="7.0" left="5.0" right="5.0" top="7.0"/>
@ -102,7 +102,7 @@
</Button>
<Button fx:id="btnDecodeUshort" disable="true" maxHeight="1.7976931348623157E308"
maxWidth="1.7976931348623157E308" mnemonicParsing="false"
onAction="#btnDecodeUshort_clicked" text="%tab.tools.button.decode" GridPane.columnIndex="3"
onAction="#btnDecodeUshort_clicked" text="Decode" GridPane.columnIndex="3"
GridPane.halignment="CENTER" GridPane.rowIndex="1">
<GridPane.margin>
<Insets bottom="7.0" left="5.0" right="5.0" top="7.0"/>
@ -116,7 +116,7 @@
</TextField>
</GridPane>
<Label text="%tab.tools.encodingdecoding" textFill="#000000cc">
<Label fx:id="lbl_encodingDecoding" text="Encoding/Decoding" textFill="#000000cc">
<GridPane.margin>
<Insets left="6.0" top="5.0"/>
</GridPane.margin>
@ -179,7 +179,7 @@
</GridPane.margin>
</TextArea>
</GridPane>
<Label text="%tab.tools.packettoexpression" textFill="#000000cc">
<Label fx:id="lbl_packetToExpression" text="Packet &lt;-&gt; Expression" textFill="#000000cc">
<GridPane.margin>
<Insets left="6.0" top="2.0"/>
</GridPane.margin>

View File

@ -1015,11 +1015,11 @@ VBox > .split-menu-button.last > .arrow-button {
}
#language-picker .context-menu {
-fx-padding: 5 0 5 0;
-fx-padding: 0;
}
#language-picker .context-menu .menu-item {
-fx-padding: 5 0 5 5;
-fx-padding: 10 0 0 5;
}
#language-picker .label {

View File

@ -1121,11 +1121,11 @@ VBox > .split-menu-button.last > .arrow-button {
}
#language-picker .context-menu {
-fx-padding: 5 0 5 0;
-fx-padding: 0;
}
#language-picker .context-menu .menu-item {
-fx-padding: 0 0 0 5;
-fx-padding: 10 0 0 5;
}
#language-picker .label {

View File

@ -1014,11 +1014,11 @@ VBox > .split-menu-button.last > .arrow-button {
}
#language-picker .context-menu {
-fx-padding: 5 0 5 0;
-fx-padding: 0;
}
#language-picker .context-menu .menu-item {
-fx-padding: 0 0 0 5;
-fx-padding: 10 0 0 5;
}
#language-picker .label {

View File

@ -21,8 +21,9 @@ tab.connection.autodetect=Auto-detect
### Tab - Injection
tab.injection=Injection
tab.injection.corrupted.true=isCorrupted: True
tab.injection.corrupted.false=isCorrupted: False
tab.injection.corrupted=isCorrupted
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description=header (id:NULL, length:0)
tab.injection.description.header=header
tab.injection.description.packets=packets
@ -39,11 +40,12 @@ tab.injection.log.packetwithid=Packet with id
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.encodingdecoding=Encoding/decoding
tab.tools.packettoexpression=Packet <-> expression
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
@ -51,8 +53,8 @@ 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.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
@ -79,7 +81,7 @@ 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.port=Port
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Install
@ -90,7 +92,7 @@ tab.extensions.button.logs.windowtitle=Extension Console
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Notepad:
tab.extra.notepad=Notepad
tab.extra.troubleshooting=Troubleshooting
tab.extra.options.alwaysontop=Always on top
tab.extra.options.staffpermissions=Client-side staff permissions
@ -100,8 +102,8 @@ tab.extra.options.pythonscripting.alert.content=Before using G-Python, install t
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.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
@ -111,9 +113,9 @@ 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:
tab.info.createdby=Created by
tab.info.links=Links
tab.info.contributors=Contributors
## Alert
@ -301,11 +303,7 @@ 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.viewincoming.base=View Incoming: True
ext.logger.state.viewoutgoing.base=View Outgoing: True
ext.logger.state.autoscroll.base=Autoscroll: True
ext.logger.state.packetinfo=Packet info
ext.logger.state.packetinfo.base=Packet info: False
ext.logger.state.filtered=Filtered
ext.logger.state.filtered.base=Filtered: 0
@ -315,3 +313,5 @@ 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

View File

@ -23,8 +23,9 @@ tab.connection.autodetect=Auto-detect
### Tab - Injection
tab.injection=Injection
tab.injection.corrupted.true=isCorrupted: True
tab.injection.corrupted.false=isCorrupted: False
tab.injection.corrupted=isCorrupted
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description=header (id:NULL, length:0)
tab.injection.description.header=header
tab.injection.description.packets=packets
@ -41,11 +42,12 @@ tab.injection.log.packetwithid=Packet with id
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.encodingdecoding=Encoding/decoding
tab.tools.packettoexpression=Packet <-> expression
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
@ -53,8 +55,8 @@ 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.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
@ -81,7 +83,7 @@ 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.port=Port
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Install
@ -92,7 +94,7 @@ tab.extensions.button.logs.windowtitle=Extension Console
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Notepad:
tab.extra.notepad=Notepad
tab.extra.troubleshooting=Troubleshooting
tab.extra.options.alwaysontop=Always on top
tab.extra.options.staffpermissions=Client-side staff permissions
@ -102,8 +104,8 @@ tab.extra.options.pythonscripting.alert.content=Before using G-Python, install t
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.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
@ -113,9 +115,9 @@ 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:
tab.info.createdby=Created by
tab.info.links=Links
tab.info.contributors=Contributors
## Alert
@ -303,11 +305,7 @@ 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.viewincoming.base=View Incoming: True
ext.logger.state.viewoutgoing.base=View Outgoing: True
ext.logger.state.autoscroll.base=Autoscroll: True
ext.logger.state.packetinfo=Packet info
ext.logger.state.packetinfo.base=Packet info: False
ext.logger.state.filtered=Filtered
ext.logger.state.filtered.base=Filtered: 0
@ -317,3 +315,5 @@ 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

View File

@ -5,6 +5,7 @@
## Tabs
### Tab - Connection
ext.logger.state.viewincoming.base=Mostrar Incoming: True
tab.connection=Conexión
tab.connection.client=Tipo de cliente:
tab.connection.client.flash=Flash / Air
@ -19,12 +20,13 @@ tab.connection.port=Puerto:
tab.connection.host=Host:
tab.connection.button.connect=Conectar
tab.connection.button.abort=Abortar
tab.connection.autodetect=Detección automática
tab.connection.autodetect=Auto-Detección
### Tab - Injection
tab.injection=Inyectar
tab.injection.corrupted.true=isCorrupted: True
tab.injection.corrupted.false=isCorrupted: False
tab.injection.corrupted=isCorrupted
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description=header (id:NULL, length:0)
tab.injection.description.header=header
tab.injection.description.packets=packets
@ -41,11 +43,12 @@ tab.injection.log.packetwithid=Paquete con id
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.encodingdecoding=Encoding/decoding
tab.tools.packettoexpression=Packet <-> expression
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
@ -53,8 +56,8 @@ 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.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
@ -81,7 +84,7 @@ tab.extensions.table.edit.delete.tooltip=Cerrar la conexi
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.port=Port
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Instalar
@ -92,7 +95,7 @@ tab.extensions.button.logs.windowtitle=Consola de extensi
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Notepad:
tab.extra.notepad=Notepad
tab.extra.troubleshooting=Ayuda
tab.extra.options.alwaysontop=Mostrar siempre arriba
tab.extra.options.staffpermissions=Permisos Staff en cliente
@ -102,8 +105,8 @@ tab.extra.options.pythonscripting.alert.content=Antes de instalar G-Python, inst
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.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
@ -113,9 +116,9 @@ 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:
tab.info.createdby=Creado por
tab.info.links=Enlaces
tab.info.contributors=Contribuidores
## Alert
@ -171,7 +174,7 @@ alert.gpythonerror.content=Algo ha salido mal al iniciar la G-Python shell,\n\
## Internal extension
### Internal extension - G-ExtensionStore
ext.store.elapsedtime.second.single=seundo
ext.store.elapsedtime.second.single=segundo
ext.store.elapsedtime.second.multiple=segundos
ext.store.elapsedtime.minute.single=minuto
ext.store.elapsedtime.minute.multiple=minutos
@ -301,11 +304,7 @@ 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.viewincoming.base=Mostrar Incoming: True
ext.logger.state.viewoutgoing.base=Mostrar Outgoing: True
ext.logger.state.autoscroll.base=Autoscroll: True
ext.logger.state.packetinfo=Packet info
ext.logger.state.packetinfo.base=Packet info: False
ext.logger.state.filtered=Filtrado
ext.logger.state.filtered.base=Filtrado: 0
@ -315,3 +314,5 @@ 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

View File

@ -23,8 +23,9 @@ tab.connection.autodetect=Auto-detect
### Tab - Injection
tab.injection=Injection
tab.injection.corrupted.true=isCorrupted: True
tab.injection.corrupted.false=isCorrupted: False
tab.injection.corrupted=isCorrupted
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description=header (id:NULL, length:0)
tab.injection.description.header=header
tab.injection.description.packets=packets
@ -41,11 +42,12 @@ tab.injection.log.packetwithid=Packet with id
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.encodingdecoding=Encoding/decoding
tab.tools.packettoexpression=Packet <-> expression
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
@ -53,8 +55,8 @@ 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.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
@ -81,7 +83,7 @@ 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.port=Port
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Install
@ -92,7 +94,7 @@ tab.extensions.button.logs.windowtitle=Extension Console
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Notepad:
tab.extra.notepad=Notepad
tab.extra.troubleshooting=Troubleshooting
tab.extra.options.alwaysontop=Always on top
tab.extra.options.staffpermissions=Client-side staff permissions
@ -102,8 +104,8 @@ tab.extra.options.pythonscripting.alert.content=Before using G-Python, install t
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.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
@ -113,9 +115,9 @@ 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:
tab.info.createdby=Created by
tab.info.links=Links
tab.info.contributors=Contributors
## Alert
@ -303,11 +305,7 @@ 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.viewincoming.base=View Incoming: True
ext.logger.state.viewoutgoing.base=View Outgoing: True
ext.logger.state.autoscroll.base=Autoscroll: True
ext.logger.state.packetinfo=Packet info
ext.logger.state.packetinfo.base=Packet info: False
ext.logger.state.filtered=Filtered
ext.logger.state.filtered.base=Filtered: 0
@ -317,3 +315,5 @@ 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

View File

@ -26,8 +26,9 @@ tab.connection.autodetect=D
### Tab - Injection
tab.injection=Injecter
tab.injection.corrupted.true=isCorrupted: True
tab.injection.corrupted.false=isCorrupted: False
tab.injection.corrupted=isCorrupted
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description=header (id:NULL, length:0)
tab.injection.description.header=header
tab.injection.description.packets=packets
@ -44,11 +45,12 @@ tab.injection.log.packetwithid=Packet avec id
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.encodingdecoding=Encoder/decoder
tab.tools.packettoexpression=Packet <-> expression
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
@ -56,8 +58,8 @@ 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.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
@ -80,33 +82,33 @@ 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.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.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.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.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.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
@ -116,9 +118,9 @@ 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:
tab.info.createdby=Crée par
tab.info.links=Liens
tab.info.contributors=Contributeurs
## Alert
@ -129,7 +131,7 @@ alert.confirmation.button.donotaskagain=Ne pas demander
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\
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
@ -143,33 +145,33 @@ alert.invalidconnection.content=Tu as entr
### 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\
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\
à 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\
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\
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\
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\
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:
Plus d'information ici:
## Internal extension
@ -215,16 +217,16 @@ ext.store.extension.warning.requirement=Attention: ce framework a besoin --url:d
! 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.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.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.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.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
@ -234,7 +236,7 @@ ext.store.button.installed=D
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.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
@ -243,7 +245,7 @@ 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.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
@ -251,7 +253,7 @@ ext.store.search.ordering.byupdate.contenttitle=R
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.search.info.automaticosfiltering=Info: automatiquement filtré en fonction de l'OS que tu utilises
ext.store.category=Catégories
@ -305,11 +307,7 @@ 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.viewincoming.base=Voir Incoming: True
ext.logger.state.viewoutgoing.base=Voir Outgoing: True
ext.logger.state.autoscroll.base=Autoscroll: True
ext.logger.state.packetinfo=Packet info
ext.logger.state.packetinfo.base=Packet info: False
ext.logger.state.filtered=Filtré
ext.logger.state.filtered.base=Filtré: 0
@ -319,3 +317,5 @@ 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

View File

@ -23,8 +23,9 @@ tab.connection.autodetect=Auto-detect
### Tab - Injection
tab.injection=Injection
tab.injection.corrupted.true=isCorrupted: True
tab.injection.corrupted.false=isCorrupted: False
tab.injection.corrupted=isCorrupted
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description=header (id:NULL, length:0)
tab.injection.description.header=header
tab.injection.description.packets=packets
@ -41,11 +42,12 @@ tab.injection.log.packetwithid=Packet with id
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.encodingdecoding=Encoding/decoding
tab.tools.packettoexpression=Packet <-> expression
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
@ -53,8 +55,8 @@ 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.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
@ -81,7 +83,7 @@ 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.port=Port
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Install
@ -92,7 +94,7 @@ tab.extensions.button.logs.windowtitle=Extension Console
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Notepad:
tab.extra.notepad=Notepad
tab.extra.troubleshooting=Troubleshooting
tab.extra.options.alwaysontop=Always on top
tab.extra.options.staffpermissions=Client-side staff permissions
@ -102,8 +104,8 @@ tab.extra.options.pythonscripting.alert.content=Before using G-Python, install t
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.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
@ -113,9 +115,9 @@ 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:
tab.info.createdby=Created by
tab.info.links=Links
tab.info.contributors=Contributors
## Alert
@ -303,11 +305,7 @@ 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.viewincoming.base=View Incoming: True
ext.logger.state.viewoutgoing.base=View Outgoing: True
ext.logger.state.autoscroll.base=Autoscroll: True
ext.logger.state.packetinfo=Packet info
ext.logger.state.packetinfo.base=Packet info: False
ext.logger.state.filtered=Filtered
ext.logger.state.filtered.base=Filtered: 0
@ -317,3 +315,5 @@ 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

View File

@ -17,12 +17,13 @@ tab.connection.port=Port:
tab.connection.host=Host:
tab.connection.button.connect=Verbind
tab.connection.button.abort=Stop
tab.connection.autodetect=Auto-detect
tab.connection.autodetect=Auto-detectie
### Tab - Injection
tab.injection=Injectie
tab.injection.corrupted.true=isCorrupt: True
tab.injection.corrupted.false=isCorrupt: False
tab.injection.corrupted=isCorrupt
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description=header (id:NULL, lengte:0)
tab.injection.description.header=header
tab.injection.description.packets=packets
@ -39,11 +40,12 @@ tab.injection.log.packetwithid=Packet met id
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.encodingdecoding=Codering/Decodering
tab.tools.packettoexpression=Packet <-> expressie
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
@ -51,8 +53,8 @@ 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.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
@ -79,7 +81,7 @@ 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.port=Port
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Installeer
@ -90,18 +92,18 @@ tab.extensions.button.logs.windowtitle=Extensie Console
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Kladblok:
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=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.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
@ -111,9 +113,9 @@ 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:
tab.info.createdby=Gemaakt door
tab.info.links=Links
tab.info.contributors=Bijdragers
## Alert
@ -300,11 +302,7 @@ 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.viewincoming.base=Geef binnenkomend weer: True
ext.logger.state.viewoutgoing.base=Geef uitgaand weer: True
ext.logger.state.autoscroll.base=Autoscroll: True
ext.logger.state.packetinfo=Packet info
ext.logger.state.packetinfo.base=Packet info: False
ext.logger.state.filtered=Gefilterd
ext.logger.state.filtered.base=Gefilterd: 0
@ -314,3 +312,5 @@ 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

View File

@ -21,8 +21,9 @@ tab.connection.autodetect=Autodetectar
### Tab - Injection
tab.injection=Injeção
tab.injection.corrupted.true=estaCorrompido: Verdadeiro
tab.injection.corrupted.false=estaCorrompido: Falso
tab.injection.corrupted=estaCorrompido
tab.injection.corrupted.true=Verdadeiro
tab.injection.corrupted.false=Falso
tab.injection.description=cabeçalho (id:NULL, comprimento:0)
tab.injection.description.header=cabeçalho
tab.injection.description.packets=pacotes
@ -39,11 +40,12 @@ tab.injection.log.packetwithid=Pacote com id
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.encodingdecoding=Codificando/decodificando
tab.tools.packettoexpression=Pacote <-> expressão
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
@ -51,8 +53,8 @@ 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.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
@ -79,7 +81,7 @@ tab.extensions.table.edit.delete.tooltip=Fechar conex
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.port=Porta
tab.extensions.button.pythonshell=Terminal G-Python
tab.extensions.button.pythonshell.windowtitle=Terminal Scripting
tab.extensions.button.install=Instalar
@ -90,7 +92,7 @@ tab.extensions.button.logs.windowtitle=Console de Extens
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Anotações:
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
@ -100,8 +102,8 @@ tab.extra.options.pythonscripting.alert.content=Antes de usar G-Python, instale
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.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
@ -111,9 +113,9 @@ 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:
tab.info.createdby=Criado por
tab.info.links=Links
tab.info.contributors=Contribuidores
## Alert
@ -300,11 +302,7 @@ 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.viewincoming.base=Ver Chegando: Verdadeiro
ext.logger.state.viewoutgoing.base=Ver Saindo: Verdadeiro
ext.logger.state.autoscroll.base=Rolagem automática: Verdadeiro
ext.logger.state.packetinfo=Informação do pacote
ext.logger.state.packetinfo.base=Informação do pacote: Falso
ext.logger.state.filtered=Filtrado
ext.logger.state.filtered.base=Filtrado: 0
@ -314,3 +312,5 @@ ext.logger.element.replaced=Substitu
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

View File

@ -23,8 +23,9 @@ tab.connection.autodetect=Auto-detect
### Tab - Injection
tab.injection=Injection
tab.injection.corrupted.true=isCorrupted: True
tab.injection.corrupted.false=isCorrupted: False
tab.injection.corrupted=isCorrupted
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description=header (id:NULL, length:0)
tab.injection.description.header=header
tab.injection.description.packets=packets
@ -41,11 +42,12 @@ tab.injection.log.packetwithid=Packet with id
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.encodingdecoding=Encoding/decoding
tab.tools.packettoexpression=Packet <-> expression
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
@ -53,8 +55,8 @@ 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.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
@ -81,7 +83,7 @@ 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.port=Port
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Install
@ -92,7 +94,7 @@ tab.extensions.button.logs.windowtitle=Extension Console
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Notepad:
tab.extra.notepad=Notepad
tab.extra.troubleshooting=Troubleshooting
tab.extra.options.alwaysontop=Always on top
tab.extra.options.staffpermissions=Client-side staff permissions
@ -102,8 +104,8 @@ tab.extra.options.pythonscripting.alert.content=Before using G-Python, install t
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.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
@ -113,9 +115,9 @@ 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:
tab.info.createdby=Created by
tab.info.links=Links
tab.info.contributors=Contributors
## Alert
@ -303,11 +305,7 @@ 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.viewincoming.base=View Incoming: True
ext.logger.state.viewoutgoing.base=View Outgoing: True
ext.logger.state.autoscroll.base=Autoscroll: True
ext.logger.state.packetinfo=Packet info
ext.logger.state.packetinfo.base=Packet info: False
ext.logger.state.filtered=Filtered
ext.logger.state.filtered.base=Filtered: 0
@ -317,3 +315,5 @@ 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