Merge pull request #140 from WiredSpast/internationalization

Internationalization
This commit is contained in:
sirjonasxx 2022-12-27 19:18:28 +01:00 committed by GitHub
commit c1b9c07522
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
94 changed files with 3964 additions and 316 deletions

View File

@ -3,10 +3,8 @@ package gearth;
import gearth.misc.AdminValidator; import gearth.misc.AdminValidator;
import gearth.misc.Cacher; import gearth.misc.Cacher;
import gearth.misc.UpdateChecker; import gearth.misc.UpdateChecker;
import gearth.misc.listenerpattern.Observable;
import gearth.misc.listenerpattern.ObservableObject; import gearth.misc.listenerpattern.ObservableObject;
import gearth.ui.GEarthController; import gearth.ui.GEarthController;
import gearth.ui.subforms.logger.loggerdisplays.PacketLogger;
import gearth.ui.themes.Theme; import gearth.ui.themes.Theme;
import gearth.ui.themes.ThemeFactory; import gearth.ui.themes.ThemeFactory;
import gearth.ui.titlebar.TitleBarConfig; import gearth.ui.titlebar.TitleBarConfig;
@ -20,9 +18,6 @@ import javafx.scene.control.Alert;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.stage.StageStyle; import javafx.stage.StageStyle;
import sun.misc.Cache;
import java.util.function.Consumer;
public class GEarth extends Application { public class GEarth extends Application {

View File

@ -1,11 +1,11 @@
package gearth.misc; package gearth.misc;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.layout.Region;
import java.io.IOException; import java.io.IOException;
import java.io.PrintStream; import java.io.PrintStream;
@ -47,7 +47,7 @@ public class AdminValidator {
if (!AdminValidator.isAdmin()) { if (!AdminValidator.isAdmin()) {
Platform.runLater(() -> { Platform.runLater(() -> {
Alert alert = new Alert(Alert.AlertType.WARNING, "", ButtonType.OK); Alert alert = new Alert(Alert.AlertType.WARNING, "", ButtonType.OK);
alert.getDialogPane().setContent(new Label("G-Earth needs admin privileges in order to work on Flash,\nplease restart G-Earth with admin permissions unless\nyou're using Unity")); alert.getDialogPane().setContent(new Label(LanguageBundle.get("alert.adminvalidator.content").replaceAll("\\\\n", System.lineSeparator())));
try { try {
TitleBarController.create(alert).showAlert(); TitleBarController.create(alert).showAlert();
} catch (IOException e) { } catch (IOException e) {

View File

@ -2,6 +2,7 @@ package gearth.misc;
import gearth.GEarth; import gearth.GEarth;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
@ -37,10 +38,10 @@ public class UpdateChecker {
String body = (String)object.get("body"); String body = (String)object.get("body");
boolean isForcedUpdate = body.contains("(!)"); boolean isForcedUpdate = body.contains("(!)");
Alert alert = new Alert(isForcedUpdate ? Alert.AlertType.ERROR : Alert.AlertType.INFORMATION, "G-Earth is outdated!", ButtonType.OK); Alert alert = new Alert(isForcedUpdate ? Alert.AlertType.ERROR : Alert.AlertType.INFORMATION, LanguageBundle.get("alert.outdated.title"), ButtonType.OK);
FlowPane fp = new FlowPane(); FlowPane fp = new FlowPane();
Label lbl = new Label("A new version of G-Earth has been found ("+gitv+")" + System.lineSeparator()+ System.lineSeparator() + "Update to the latest version:"); Label lbl = new Label(LanguageBundle.get("alert.outdated.content.newversion") + " ("+gitv+")" + System.lineSeparator()+ System.lineSeparator() + LanguageBundle.get("alert.outdated.content.update") + ":");
Hyperlink link = new Hyperlink("https://github.com/sirjonasxx/G-Earth/releases"); Hyperlink link = new Hyperlink("https://github.com/sirjonasxx/G-Earth/releases");
fp.getChildren().addAll( lbl, link); fp.getChildren().addAll( lbl, link);
link.setOnAction(event -> { link.setOnAction(event -> {
@ -51,7 +52,7 @@ public class UpdateChecker {
WebView webView = new WebView(); WebView webView = new WebView();
webView.getEngine().loadContent("<html>A new version of G-Earth has been found ("+gitv+")<br><br>Update to the latest version:<br><a href=\"https://github.com/sirjonasxx/G-Earth/releases\">https://github.com/sirjonasxx/G-Earth/releases</a></html>"); webView.getEngine().loadContent(String.format("<html>%s (%s)<br><br>%s:<br><a href=\"https://github.com/sirjonasxx/G-Earth/releases\">https://github.com/sirjonasxx/G-Earth/releases</a></html>", LanguageBundle.get("alert.outdated.content.newversion"), gitv, LanguageBundle.get("alert.outdated.content.update")));
webView.setPrefSize(500, 200); webView.setPrefSize(500, 200);
alert.setResizable(false); alert.setResizable(false);

View File

@ -1,6 +1,5 @@
package gearth.protocol.connection.proxy; package gearth.protocol.connection.proxy;
import gearth.GEarth;
import gearth.misc.Cacher; import gearth.misc.Cacher;
import gearth.misc.OSValidator; import gearth.misc.OSValidator;
import gearth.protocol.HConnection; import gearth.protocol.HConnection;
@ -10,6 +9,7 @@ import gearth.protocol.connection.proxy.flash.NormalFlashProxyProvider;
import gearth.protocol.connection.proxy.flash.unix.LinuxRawIpFlashProxyProvider; import gearth.protocol.connection.proxy.flash.unix.LinuxRawIpFlashProxyProvider;
import gearth.protocol.connection.proxy.flash.windows.WindowsRawIpFlashProxyProvider; import gearth.protocol.connection.proxy.flash.windows.WindowsRawIpFlashProxyProvider;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
@ -108,9 +108,7 @@ public class ProxyProviderFactory {
Platform.runLater(() -> { Platform.runLater(() -> {
Alert alert = new Alert(Alert.AlertType.ERROR, "", ButtonType.OK); Alert alert = new Alert(Alert.AlertType.ERROR, "", ButtonType.OK);
alert.getDialogPane().getChildren().add(new Label("G-Earth is already connected to this hotel.\n" + alert.getDialogPane().getChildren().add(new Label(LanguageBundle.get("alert.alreadyconnected.content").replaceAll("\\\\n", System.lineSeparator())));
"Due to current limitations you can only connect one session per hotel to G-Earth in Raw IP mode on Windows.\n\n" +
"You can bypass this by using a SOCKS proxy [Extra -> Advanced -> SOCKS]"));
alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE); alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
alert.setResizable(false); alert.setResizable(false);
try { try {

View File

@ -1,6 +1,5 @@
package gearth.protocol.connection.proxy.flash; package gearth.protocol.connection.proxy.flash;
import gearth.GEarth;
import gearth.protocol.HConnection; import gearth.protocol.HConnection;
import gearth.protocol.connection.HProxy; import gearth.protocol.connection.HProxy;
import gearth.protocol.connection.HProxySetter; import gearth.protocol.connection.HProxySetter;
@ -12,6 +11,7 @@ import gearth.protocol.packethandler.flash.IncomingFlashPacketHandler;
import gearth.protocol.packethandler.flash.OutgoingFlashPacketHandler; import gearth.protocol.packethandler.flash.OutgoingFlashPacketHandler;
import gearth.protocol.packethandler.flash.FlashPacketHandler; import gearth.protocol.packethandler.flash.FlashPacketHandler;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
@ -126,7 +126,7 @@ public abstract class FlashProxyProvider implements ProxyProvider {
protected void showInvalidConnectionError() { protected void showInvalidConnectionError() {
Platform.runLater(() -> { Platform.runLater(() -> {
Alert alert = new Alert(Alert.AlertType.ERROR, "", ButtonType.OK); Alert alert = new Alert(Alert.AlertType.ERROR, "", ButtonType.OK);
alert.getDialogPane().getChildren().add(new Label("You entered invalid connection information, G-Earth could not connect")); alert.getDialogPane().getChildren().add(new Label(LanguageBundle.get("alert.invalidconnection.content")));
alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE); alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
alert.setResizable(false); alert.setResizable(false);
try { try {

View File

@ -5,6 +5,7 @@ import gearth.protocol.connection.proxy.nitro.NitroConstants;
import gearth.protocol.connection.proxy.nitro.os.NitroOsFunctions; import gearth.protocol.connection.proxy.nitro.os.NitroOsFunctions;
import gearth.protocol.connection.proxy.nitro.os.NitroOsFunctionsFactory; import gearth.protocol.connection.proxy.nitro.os.NitroOsFunctionsFactory;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
@ -50,14 +51,12 @@ public class NitroHttpProxy {
Platform.runLater(() -> { Platform.runLater(() -> {
Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.WARNING, ADMIN_WARNING_KEY, Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.WARNING, ADMIN_WARNING_KEY,
"Root certificate installation", null, LanguageBundle.get("alert.rootcertificate.title"), null,
"", "Remember my choice", "", LanguageBundle.get("alert.rootcertificate.remember"),
ButtonType.YES, ButtonType.NO ButtonType.YES, ButtonType.NO
); );
alert.getDialogPane().setContent(new Label("G-Earth detected that you do not have the root certificate authority installed.\n" + alert.getDialogPane().setContent(new Label(LanguageBundle.get("alert.rootcertificate.content").replaceAll("\\\\n", System.lineSeparator())));
"This is required for Nitro to work, do you want to continue?\n" +
"G-Earth will ask you for Administrator permission if you do so."));
try { try {
shouldInstall.set(TitleBarController.create(alert).showAlertAndWait() shouldInstall.set(TitleBarController.create(alert).showAlertAndWait()

View File

@ -10,6 +10,7 @@ import gearth.protocol.packethandler.PayloadBuffer;
import gearth.protocol.packethandler.flash.BufferChangeListener; import gearth.protocol.packethandler.flash.BufferChangeListener;
import gearth.protocol.packethandler.flash.FlashPacketHandler; import gearth.protocol.packethandler.flash.FlashPacketHandler;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
@ -72,10 +73,10 @@ public class Rc4Obtainer {
System.err.println("COULD NOT FIND RC4 TABLE"); System.err.println("COULD NOT FIND RC4 TABLE");
Platform.runLater(() -> { Platform.runLater(() -> {
Alert alert = new Alert(Alert.AlertType.WARNING, "Something went wrong!", ButtonType.OK); Alert alert = new Alert(Alert.AlertType.WARNING, LanguageBundle.get("alert.somethingwentwrong.title"), ButtonType.OK);
FlowPane fp = new FlowPane(); FlowPane fp = new FlowPane();
Label lbl = new Label("G-Earth has experienced an issue" + System.lineSeparator() + System.lineSeparator() + "Head over to our Troubleshooting page to solve the problem:"); Label lbl = new Label(LanguageBundle.get("alert.somethingwentwrong.content").replaceAll("\\\\n", System.lineSeparator()));
Hyperlink link = new Hyperlink("https://github.com/sirjonasxx/G-Earth/wiki/Troubleshooting"); Hyperlink link = new Hyperlink("https://github.com/sirjonasxx/G-Earth/wiki/Troubleshooting");
fp.getChildren().addAll(lbl, link); fp.getChildren().addAll(lbl, link);
link.setOnAction(event -> { link.setOnAction(event -> {

View File

@ -3,6 +3,7 @@ package gearth.services.extension_handler.extensions.implementations.network.aut
import gearth.misc.ConfirmationDialog; import gearth.misc.ConfirmationDialog;
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtension; import gearth.services.extension_handler.extensions.implementations.network.NetworkExtension;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
@ -68,13 +69,12 @@ public class Authenticator {
boolean[] done = {false}; boolean[] done = {false};
Platform.runLater(() -> { Platform.runLater(() -> {
Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.WARNING, connectExtensionKey Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.WARNING, connectExtensionKey
,"Confirmation Dialog", null, , LanguageBundle.get("alert.confirmation.windowtitle"), null,
"", "Remember my choice", "", LanguageBundle.get("alert.confirmation.button.remember"),
ButtonType.YES, ButtonType.NO ButtonType.YES, ButtonType.NO
); );
alert.getDialogPane().setContent(new Label("Extension \""+extension.getTitle()+"\" tries to connect but isn't known to G-Earth,\n" + alert.getDialogPane().setContent(new Label(String.format(LanguageBundle.get("alert.extconnection.content"), extension.getTitle()).replaceAll("\\\\n", System.lineSeparator())));
"accept this connection?"));
try { try {
if (!(TitleBarController.create(alert).showAlertAndWait() if (!(TitleBarController.create(alert).showAlertAndWait()

View File

@ -3,6 +3,7 @@ package gearth.services.g_python;
import gearth.GEarth; import gearth.GEarth;
import gearth.ui.subforms.extra.ExtraController; import gearth.ui.subforms.extra.ExtraController;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
@ -170,13 +171,11 @@ public class GPythonShell {
private void showError() { private void showError() {
Platform.runLater(() -> { Platform.runLater(() -> {
Alert alert = new Alert(Alert.AlertType.ERROR, "G-Python error", ButtonType.OK); Alert alert = new Alert(Alert.AlertType.ERROR, LanguageBundle.get("alert.gpythonerror.title"), ButtonType.OK);
alert.setTitle("G-Python error"); alert.setTitle(LanguageBundle.get("alert.gpythonerror.title"));
FlowPane fp = new FlowPane(); FlowPane fp = new FlowPane();
Label lbl = new Label("Something went wrong launching the G-Python shell," + Label lbl = new Label(LanguageBundle.get("alert.gpythonerror.content").replaceAll("\\\\n", System.lineSeparator()));
System.lineSeparator() + "are you sure you followed the installation guide correctly?" +
System.lineSeparator() + System.lineSeparator() + "More information here:");
Hyperlink link = new Hyperlink(ExtraController.INFO_URL_GPYTHON); Hyperlink link = new Hyperlink(ExtraController.INFO_URL_GPYTHON);
fp.getChildren().addAll(lbl, link); fp.getChildren().addAll(lbl, link);
link.setOnAction(event -> { link.setOnAction(event -> {

View File

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

View File

@ -1,5 +1,7 @@
package gearth.services.internal_extensions.extensionstore.application; package gearth.services.internal_extensions.extensionstore.application;
import gearth.GEarth;
import gearth.ui.translations.LanguageBundle;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -43,19 +45,19 @@ public class WebUtils {
} }
public static String elapsedTime(long time) { public static String elapsedTime(long time) {
if (time < 60) return time + (time == 1 ? " second" : " seconds"); if (time < 60) return time + " " + LanguageBundle.get("ext.store.elapsedtime.second." + (time == 1 ? "single": "multiple"));
time = time/60; time = time/60;
if (time < 60) return time + (time == 1 ? " minute" : " minutes"); if (time < 60) return time + " " + LanguageBundle.get("ext.store.elapsedtime.minute." + (time == 1 ? "single": "multiple"));
time = time/60; time = time/60;
if (time < 24) return time + (time == 1 ? " hour" : " hours"); if (time < 24) return time + " " + LanguageBundle.get("ext.store.elapsedtime.hour." + (time == 1 ? "single": "multiple"));
long days = time/24; long days = time/24;
if (days < 7) return days + (days == 1 ? " day" : " days"); if (days < 7) return days + " " + LanguageBundle.get("ext.store.elapsedtime.day." + (days == 1 ? "single": "multiple"));
long weeks = days/7; long weeks = days/7;
if (weeks < 6) return weeks + (weeks == 1 ? " week" : " weeks"); if (weeks < 6) return weeks + " " + LanguageBundle.get("ext.store.elapsedtime.week." + (weeks == 1 ? "single": "multiple"));
long months = days/31; long months = days/31;
if (months < 12) return months + (months == 1 ? " month" : " months"); if (months < 12) return months + " " + LanguageBundle.get("ext.store.elapsedtime.month." + (months == 1 ? "single": "multiple"));
long years = days/365; long years = days/365;
return years + (years == 1 ? " year" : " years"); return years + " " + LanguageBundle.get("ext.store.elapsedtime.year." + (years == 1 ? "single": "multiple"));
} }
public static String escapeMessage(String text) { public static String escapeMessage(String text) {

View File

@ -1,5 +1,6 @@
package gearth.services.internal_extensions.extensionstore.application.entities; package gearth.services.internal_extensions.extensionstore.application.entities;
import gearth.GEarth;
import gearth.protocol.HMessage; import gearth.protocol.HMessage;
import gearth.protocol.HPacket; import gearth.protocol.HPacket;
import gearth.services.internal_extensions.extensionstore.GExtensionStore; import gearth.services.internal_extensions.extensionstore.GExtensionStore;
@ -9,6 +10,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.e
import gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews.CategorizedOverview; import gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews.CategorizedOverview;
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository; import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension; import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
import gearth.ui.translations.LanguageBundle;
import netscape.javascript.JSObject; import netscape.javascript.JSObject;
public class StoreExtensionItem implements ContentItem { public class StoreExtensionItem implements ContentItem {
@ -56,12 +58,12 @@ public class StoreExtensionItem implements ContentItem {
.append("<div class=\"overview_item_info\">") .append("<div class=\"overview_item_info\">")
.append("<div onclick=\"").append(id).append(".onClick()\" class=\"oii_name clickable\">").append(WebUtils.escapeMessage(storeExtension.getTitle())).append("</div>") .append("<div onclick=\"").append(id).append(".onClick()\" class=\"oii_name clickable\">").append(WebUtils.escapeMessage(storeExtension.getTitle())).append("</div>")
.append("<div class=\"oii_desc\">By ").append(storeExtension.getAuthors().get(0).getName()).append(", last updated ").append(WebUtils.elapsedSince(storeExtension.getUpdateDate())).append(" ago</div>") .append("<div class=\"oii_desc\">").append(String.format(LanguageBundle.get("ext.store.extension.madeby"), storeExtension.getAuthors().get(0).getName())).append(", ").append(String.format(LanguageBundle.get("ext.store.extension.lastupdated"), WebUtils.elapsedSince(storeExtension.getUpdateDate()))).append("</div>")
.append("</div>") .append("</div>")
.append("<div onclick=\"").append(id).append(".onClick()\" class=\"overview_item_msgs clickable\">") .append("<div onclick=\"").append(id).append(".onClick()\" class=\"overview_item_msgs clickable\">")
.append("<div class=\"oim_top\">").append("Version: ").append(displayVersion()).append("</div>") .append("<div class=\"oim_top\">").append(LanguageBundle.get("ext.store.extension.version")).append(": ").append(displayVersion()).append("</div>")
.append("<div class=\"oim_bottom\">").append("Rating: ").append(storeExtension.getRating()).append("</div>") .append("<div class=\"oim_bottom\">").append(LanguageBundle.get("ext.store.extension.rating")).append(": ").append(storeExtension.getRating()).append("</div>")
// .append("<div class=\"oim_bottom\">").append(storeExtension.getFramework().getFramework().getName().replace("Native", "")).append(" </div>") // .append("<div class=\"oim_bottom\">").append(storeExtension.getFramework().getFramework().getName().replace("Native", "")).append(" </div>")
.append("</div>") .append("</div>")

View File

@ -8,6 +8,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.q
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository; import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory; import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering; import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
import gearth.ui.translations.LanguageBundle;
import netscape.javascript.JSObject; import netscape.javascript.JSObject;
import java.util.Arrays; import java.util.Arrays;
@ -58,7 +59,7 @@ public class CategoryItem implements ContentItem {
.append("</div>") .append("</div>")
.append("<div onclick=\"").append(id).append(".onClick()\" class=\"overview_item_msgs clickable\">") .append("<div onclick=\"").append(id).append(".onClick()\" class=\"overview_item_msgs clickable\">")
.append("<div class=\"oim_top\">").append(releasesCount).append(" releases").append("</div>") .append("<div class=\"oim_top\">").append(releasesCount).append(" ").append(LanguageBundle.get("ext.store.extension.author.releases")).append("</div>")
// .append("<div class=\"oim_bottom\">").append(storeExtension.getFramework().getFramework().getName().replace("Native", "")).append(" </div>") // .append("<div class=\"oim_bottom\">").append(storeExtension.getFramework().getFramework().getName().replace("Native", "")).append(" </div>")
.append("</div>") .append("</div>")

View File

@ -1,10 +1,12 @@
package gearth.services.internal_extensions.extensionstore.application.entities.categories; package gearth.services.internal_extensions.extensionstore.application.entities.categories;
import gearth.GEarth;
import gearth.services.internal_extensions.extensionstore.GExtensionStore; import gearth.services.internal_extensions.extensionstore.GExtensionStore;
import gearth.services.internal_extensions.extensionstore.application.entities.ContentItem; import gearth.services.internal_extensions.extensionstore.application.entities.ContentItem;
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview; import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository; import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory; import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
import gearth.ui.translations.LanguageBundle;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -57,17 +59,17 @@ public class CategoryOverview extends HOverview {
@Override @Override
public String title() { public String title() {
return "Categories"; return LanguageBundle.get("ext.store.categories.title");
} }
@Override @Override
public String description() { public String description() {
return "Explore the different kinds of extensions G-Earth has to offer"; return LanguageBundle.get("ext.store.categories.description");
} }
@Override @Override
public String contentTitle() { public String contentTitle() {
return "Categories"; return LanguageBundle.get("ext.store.categories.contenttitle");
} }
}; };
} }

View File

@ -8,6 +8,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.H
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory; import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension; import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
import gearth.services.internal_extensions.extensionstore.tools.EncodingUtil; import gearth.services.internal_extensions.extensionstore.tools.EncodingUtil;
import gearth.ui.translations.LanguageBundle;
import netscape.javascript.JSObject; import netscape.javascript.JSObject;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.json.JSONObject; import org.json.JSONObject;
@ -45,32 +46,32 @@ public class StoreExtensionDetailsItem implements ContentItem {
contentBuilder contentBuilder
.append(String.format("*%s*", storeExtension.getTitle())).append(" - v").append(storeExtension.getVersion()).append("\n\n") .append(String.format("*%s*", storeExtension.getTitle())).append(" - v").append(storeExtension.getVersion()).append("\n\n")
.append("*Description*\n").append(descriptionQuoted).append("\n \n") .append("*").append(LanguageBundle.get("ext.store.extension.details.description")).append(":*\n").append(descriptionQuoted).append("\n \n")
.append("*Author(s):* ").append(storeExtension.getAuthors().stream().map(StoreExtension.Author::getName).collect(Collectors.joining(", "))).append("\n\n") .append("*").append(LanguageBundle.get("ext.store.extension.details.authors")).append(":* ").append(storeExtension.getAuthors().stream().map(StoreExtension.Author::getName).collect(Collectors.joining(", "))).append("\n\n")
.append("*Categories:* ").append(storeExtension.getCategories().stream().map(ExtCategory::getName).collect(Collectors.joining(", "))).append("\n\n"); .append("*").append(LanguageBundle.get("ext.store.extension.details.categories")).append(":* ").append(storeExtension.getCategories().stream().map(ExtCategory::getName).collect(Collectors.joining(", "))).append("\n\n");
contentBuilder.append("*Technical information*").append("\n"); contentBuilder.append("*").append(LanguageBundle.get("ext.store.extension.details.technical_information")).append("*").append("\n");
if(storeExtension.getReleases() != null) if(storeExtension.getReleases() != null)
contentBuilder.append("> Releases: --url:Click Here-").append(storeExtension.getReleases()).append("\n"); contentBuilder.append("> ").append(LanguageBundle.get("ext.store.extension.details.releases")).append(": --url:").append(LanguageBundle.get("ext.store.extension.details.click_here")).append("-").append(storeExtension.getReleases()).append("\n");
contentBuilder.append("> Language: ").append(storeExtension.getLanguage()).append("\n") contentBuilder.append("> ").append(LanguageBundle.get("ext.store.extension.details.language")).append(": ").append(storeExtension.getLanguage()).append("\n")
.append("> Source: --url:Click Here-").append(storeExtension.getSource()).append("\n") .append("> ").append(LanguageBundle.get("ext.store.extension.details.source")).append(": --url:").append(LanguageBundle.get("ext.store.extension.details.click_here")).append("-").append(storeExtension.getSource()).append("\n")
.append("> Framework: ").append(storeExtension.getFramework().getFramework().getName()).append(" - v").append(storeExtension.getFramework().getVersion()).append("\n") .append("> ").append(LanguageBundle.get("ext.store.extension.details.framework")).append(": ").append(storeExtension.getFramework().getFramework().getName()).append(" - v").append(storeExtension.getFramework().getVersion()).append("\n")
.append("> Systems: ").append(String.join(", ", storeExtension.getCompatibility().getSystems())).append("\n \n"); .append("> ").append(LanguageBundle.get("ext.store.extension.details.systems")).append(": ").append(String.join(", ", storeExtension.getCompatibility().getSystems())).append("\n \n");
contentBuilder.append("*Compatible clients:* ").append(String.join(", ", storeExtension.getCompatibility().getClients())).append("\n\n"); contentBuilder.append("*").append(LanguageBundle.get("ext.store.extension.details.clients")).append(":* ").append(String.join(", ", storeExtension.getCompatibility().getClients())).append("\n\n");
if (storeExtension.getFramework().getFramework().isInstallationRequired()) { if (storeExtension.getFramework().getFramework().isInstallationRequired()) {
contentBuilder.append("Warning: the framework requires --url:additional installations-") contentBuilder.append(LanguageBundle.get("ext.store.extension.warning.requirement"))
.append(storeExtension.getFramework().getFramework().getInstallationInstructions()).append(" !\n\n"); .append(storeExtension.getFramework().getFramework().getInstallationInstructions()).append(" !\n\n");
} }
if (!storeExtension.isStable()) { if (!storeExtension.isStable()) {
contentBuilder.append("Warning: this extension has been marked unstable!\n\n"); contentBuilder.append(LanguageBundle.get("ext.store.extension.warning.unstable")).append("\n\n");
} }
contentBuilder.append("--startdiv--") contentBuilder.append("--startdiv--")
.append("\n*Screenshot: *").append("\n") .append("\n*").append(LanguageBundle.get("ext.store.extension.details.screenshot")).append(": *").append("\n")
.append("--img:").append(gExtensionStore.getRepository().getResourceUrl("store", "extensions", storeExtension.getTitle(), "screenshot.png")) .append("--img:").append(gExtensionStore.getRepository().getResourceUrl("store", "extensions", storeExtension.getTitle(), "screenshot.png"))
.append(" --enddiv--"); .append(" --enddiv--");
@ -151,8 +152,8 @@ public class StoreExtensionDetailsItem implements ContentItem {
.append("<div class=\"comment_body comment_open\">") .append("<div class=\"comment_body comment_open\">")
.append("<div class=\"cb_author\">") .append("<div class=\"cb_author\">")
.append("<div class=\"cba_name\">").append(WebUtils.escapeMessage(mainAuthor.getName())).append("</div>") .append("<div class=\"cba_name\">").append(WebUtils.escapeMessage(mainAuthor.getName())).append("</div>")
.append("<div class=\"cba_text\">").append(mainAuthor.getReputation()).append(" reputation</div>") .append("<div class=\"cba_text\">").append(mainAuthor.getReputation()).append(" ").append(LanguageBundle.get("ext.store.extension.author.reputation")).append("</div>")
.append("<div class=\"cba_text\">").append(mainAuthor.getExtensionsCount()).append(" releases</div>") .append("<div class=\"cba_text\">").append(mainAuthor.getExtensionsCount()).append(" ").append(LanguageBundle.get("ext.store.extension.author.releases")).append("</div>")
.append("<div class=\"cba_look\"><img src=\"").append(avatarLook).append("\" alt=\"\"></div>") // todo look .append("<div class=\"cba_look\"><img src=\"").append(avatarLook).append("\" alt=\"\"></div>") // todo look
.append("</div>") .append("</div>")
.append("<div class=\"cb_content\">").append(contentsInHtml()).append("</div>") .append("<div class=\"cb_content\">").append(contentsInHtml()).append("</div>")

View File

@ -1,5 +1,6 @@
package gearth.services.internal_extensions.extensionstore.application.entities.extensiondetails; package gearth.services.internal_extensions.extensionstore.application.entities.extensiondetails;
import gearth.GEarth;
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionsProducer; import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionsProducer;
import gearth.services.extension_handler.extensions.implementations.network.executer.NormalExtensionRunner; import gearth.services.extension_handler.extensions.implementations.network.executer.NormalExtensionRunner;
import gearth.services.internal_extensions.extensionstore.GExtensionStore; import gearth.services.internal_extensions.extensionstore.GExtensionStore;
@ -12,6 +13,7 @@ import gearth.services.internal_extensions.extensionstore.repository.models.Stor
import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension; import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension;
import gearth.services.internal_extensions.extensionstore.tools.StoreExtensionTools; import gearth.services.internal_extensions.extensionstore.tools.StoreExtensionTools;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
@ -62,7 +64,7 @@ public class StoreExtensionDetailsOverview extends HOverview {
public String buttonText() { public String buttonText() {
int mode = mode(); int mode = mode();
// return mode == 2 ? "Update" : "Install"; // return mode == 2 ? "Update" : "Install";
return mode == 0 ? "Install" : (mode == 1 ? "Installed" : "Update"); return LanguageBundle.get("ext.store.button." + (mode == 0 ? "install" : (mode == 1 ? "installed" : "update")));
} }
@Override @Override
@ -91,23 +93,23 @@ public class StoreExtensionDetailsOverview extends HOverview {
private void awaitPopup(String mode) { private void awaitPopup(String mode) {
popup(Alert.AlertType.WARNING, popup(Alert.AlertType.WARNING,
String.format("%s extension", mode), LanguageBundle.get(String.format("ext.store.extension.status.await.%s", mode)),
String.format("%s extension [%s]", mode, extension.getTitle()), String.format("%s [%s]", LanguageBundle.get(String.format("ext.store.extension.status.await.%s", mode)), extension.getTitle()),
String.format("Press \"OK\" and wait while the extension is being %sed", mode.toLowerCase())); LanguageBundle.get(String.format("ext.store.extension.status.await.%s.message", mode)));
} }
private void successPopup(String mode) { private void successPopup(String mode) {
popup(Alert.AlertType.INFORMATION, popup(Alert.AlertType.INFORMATION,
String.format("%s completed", mode), LanguageBundle.get(String.format("ext.store.extension.status.success.%s", mode)),
String.format("%s completed [%s]", mode, extension.getTitle()), String.format("%s [%s]", LanguageBundle.get(String.format("ext.store.extension.status.success.%s", mode)), extension.getTitle()),
String.format("Extension %s completed successfully", mode.toLowerCase())); LanguageBundle.get(String.format("ext.store.extension.status.success.%s.message", mode)));
} }
private void errorPopup(String mode, String error) { private void errorPopup(String mode, String error) {
popup(Alert.AlertType.ERROR, popup(Alert.AlertType.ERROR,
String.format("%s failed", mode), LanguageBundle.get(String.format("ext.store.extension.status.success.%s", mode)),
String.format("%s failed [%s]", mode, extension.getTitle()), String.format("%s [%s]", LanguageBundle.get(String.format("ext.store.extension.status.success.%s", mode)), extension.getTitle()),
String.format("%s failed with the following message: %s", mode, error)); String.format("%s: %s", LanguageBundle.get(String.format("ext.store.extension.status.success.%s.message", mode)), error));
} }
private void popup(Alert.AlertType alertType, String title, String header, String context) { private void popup(Alert.AlertType alertType, String title, String header, String context) {
@ -128,7 +130,7 @@ public class StoreExtensionDetailsOverview extends HOverview {
int mode = mode(); int mode = mode();
if (mode == 1) return; if (mode == 1) return;
String modeString = mode() == 0 ? "Install" : "Update"; String modeString = mode() == 0 ? "install" : "update";
HOverview selff = this; HOverview selff = this;
StoreExtensionTools.InstallExtListener listener = new StoreExtensionTools.InstallExtListener() { StoreExtensionTools.InstallExtListener listener = new StoreExtensionTools.InstallExtListener() {

View File

@ -7,6 +7,7 @@ import gearth.services.internal_extensions.extensionstore.repository.StoreReposi
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension; import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension; import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension;
import gearth.services.internal_extensions.extensionstore.tools.StoreExtensionTools; import gearth.services.internal_extensions.extensionstore.tools.StoreExtensionTools;
import gearth.ui.translations.LanguageBundle;
import org.apache.maven.artifact.versioning.ComparableVersion; import org.apache.maven.artifact.versioning.ComparableVersion;
import java.awt.*; import java.awt.*;
@ -30,7 +31,7 @@ public class InstalledOverview extends HOverview {
@Override @Override
public String buttonText() { public String buttonText() {
return "Open folder"; return LanguageBundle.get("ext.store.overview.folder");
} }
@Override @Override
@ -75,17 +76,17 @@ public class InstalledOverview extends HOverview {
@Override @Override
public String title() { public String title() {
return "Installed Extensions"; return LanguageBundle.get("ext.store.overview.title");
} }
@Override @Override
public String description() { public String description() {
return "Extensions that are already installed into G-Earth"; return LanguageBundle.get("ext.store.overview.description");
} }
@Override @Override
public String contentTitle() { public String contentTitle() {
return "Installed extensions"; return LanguageBundle.get("ext.store.overview.contenttitle");
} }
}; };
} }

View File

@ -6,6 +6,7 @@ import gearth.services.internal_extensions.extensionstore.application.WebUtils;
import gearth.services.internal_extensions.extensionstore.application.entities.StoreExtensionItem; import gearth.services.internal_extensions.extensionstore.application.entities.StoreExtensionItem;
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension; import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension; import gearth.services.internal_extensions.extensionstore.tools.InstalledExtension;
import gearth.ui.translations.LanguageBundle;
import org.apache.maven.artifact.versioning.ComparableVersion; import org.apache.maven.artifact.versioning.ComparableVersion;
public class StoreExtensionInstalledItem extends StoreExtensionItem { public class StoreExtensionInstalledItem extends StoreExtensionItem {
@ -55,11 +56,11 @@ public class StoreExtensionInstalledItem extends StoreExtensionItem {
.append("<div class=\"overview_item_info\">") .append("<div class=\"overview_item_info\">")
.append("<div class=\"oii_name\">").append(WebUtils.escapeMessage(installedExtension.getName())).append("</div>") .append("<div class=\"oii_name\">").append(WebUtils.escapeMessage(installedExtension.getName())).append("</div>")
.append("<div class=\"oii_desc\">Not found in G-ExtensionStore</div>") .append("<div class=\"oii_desc\">").append(LanguageBundle.get("ext.store.extension.notinstore")).append("</div>")
.append("</div>") .append("</div>")
.append("<div class=\"overview_item_msgs\">") .append("<div class=\"overview_item_msgs\">")
.append("<div class=\"oim_top\">").append("Version: ").append(displayVersion()).append("</div>") .append("<div class=\"oim_top\">").append(LanguageBundle.get("ext.store.extension.version")).append(": ").append(displayVersion()).append("</div>")
.append("<div class=\"oim_bottom\"></div>") .append("<div class=\"oim_bottom\"></div>")
.append("</div>") .append("</div>")

View File

@ -1,11 +1,11 @@
package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews; package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews;
import gearth.misc.OSValidator; import gearth.misc.OSValidator;
import gearth.services.internal_extensions.extensionstore.application.GExtensionStoreController;
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview; import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository; import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension; import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering; import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
import gearth.ui.translations.LanguageBundle;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -32,17 +32,17 @@ public class ByDateOverview extends QueriedExtensionOverview {
@Override @Override
public String title() { public String title() {
return "New Releases"; return LanguageBundle.get("ext.store.search.ordering.bydate.title");
} }
@Override @Override
public String description() { public String description() {
return "Extensions that were recently added to the G-ExtensionStore"; return LanguageBundle.get("ext.store.search.ordering.bydate.description");
} }
@Override @Override
public String contentTitle() { public String contentTitle() {
return "New Releases"; return LanguageBundle.get("ext.store.search.ordering.bydate.contenttitle");
} }
}; };
} }

View File

@ -1,11 +1,11 @@
package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews; package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews;
import gearth.misc.OSValidator; import gearth.misc.OSValidator;
import gearth.services.internal_extensions.extensionstore.application.GExtensionStoreController;
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview; import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository; import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension; import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering; import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
import gearth.ui.translations.LanguageBundle;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -32,17 +32,17 @@ public class ByRatingOverview extends QueriedExtensionOverview {
@Override @Override
public String title() { public String title() {
return "Popular Extensions"; return LanguageBundle.get("ext.store.search.ordering.byrating.title");
} }
@Override @Override
public String description() { public String description() {
return "Extensions sorted by rating"; return LanguageBundle.get("ext.store.search.ordering.byrating.description");
} }
@Override @Override
public String contentTitle() { public String contentTitle() {
return "Popular Extensions"; return LanguageBundle.get("ext.store.search.ordering.byrating.contenttitle");
} }
}; };
} }

View File

@ -5,6 +5,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.H
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository; import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension; import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering; import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
import gearth.ui.translations.LanguageBundle;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -31,17 +32,17 @@ public class ByUpdateOverview extends QueriedExtensionOverview {
@Override @Override
public String title() { public String title() {
return "Recently Updated"; return LanguageBundle.get("ext.store.search.ordering.byupdate.title");
} }
@Override @Override
public String description() { public String description() {
return "Extensions that were recently updated"; return LanguageBundle.get("ext.store.search.ordering.byupdate.description");
} }
@Override @Override
public String contentTitle() { public String contentTitle() {
return "Recently Updated"; return LanguageBundle.get("ext.store.search.ordering.byupdate.contenttitle");
} }
}; };
} }

View File

@ -1,12 +1,12 @@
package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews; package gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews;
import gearth.misc.OSValidator; import gearth.misc.OSValidator;
import gearth.services.internal_extensions.extensionstore.application.WebUtils;
import gearth.services.internal_extensions.extensionstore.application.entities.HOverview; import gearth.services.internal_extensions.extensionstore.application.entities.HOverview;
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository; import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory; import gearth.services.internal_extensions.extensionstore.repository.models.ExtCategory;
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension; import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering; import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
import gearth.ui.translations.LanguageBundle;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -47,7 +47,7 @@ public class CategorizedOverview extends QueriedExtensionOverview {
@Override @Override
public String contentTitle() { public String contentTitle() {
return "Category: " + category.getName(); return LanguageBundle.get("ext.store.category") + ": " + category.getName();
} }
}; };
} }

View File

@ -5,6 +5,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.H
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository; import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension; import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering; import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
import gearth.ui.translations.LanguageBundle;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -48,17 +49,17 @@ public class SearchedQueryOverview extends QueriedExtensionOverview {
@Override @Override
public String title() { public String title() {
return "Search"; return LanguageBundle.get("ext.store.search.title");
} }
@Override @Override
public String description() { public String description() {
return "Find the extension that fits your needs"; return LanguageBundle.get("ext.store.search.description");
} }
@Override @Override
public String contentTitle() { public String contentTitle() {
return "Search results"; return LanguageBundle.get("ext.store.search.results");
} }
}; };
} }

View File

@ -1,10 +1,12 @@
package gearth.services.internal_extensions.extensionstore.application.entities.search; package gearth.services.internal_extensions.extensionstore.application.entities.search;
import gearth.GEarth;
import gearth.services.internal_extensions.extensionstore.GExtensionStore; import gearth.services.internal_extensions.extensionstore.GExtensionStore;
import gearth.services.internal_extensions.extensionstore.application.GExtensionStoreController; import gearth.services.internal_extensions.extensionstore.application.GExtensionStoreController;
import gearth.services.internal_extensions.extensionstore.application.entities.ContentItem; import gearth.services.internal_extensions.extensionstore.application.entities.ContentItem;
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository; import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering; import gearth.services.internal_extensions.extensionstore.repository.querying.ExtensionOrdering;
import gearth.ui.translations.LanguageBundle;
import netscape.javascript.JSObject; import netscape.javascript.JSObject;
import java.util.ArrayList; import java.util.ArrayList;
@ -92,13 +94,13 @@ public class SearchComponent implements ContentItem {
.append("<div class=\"searchInnerContainer\">") .append("<div class=\"searchInnerContainer\">")
.append("<div class=\"centeredFlex\">") .append("<div class=\"centeredFlex\">")
.append("<label for=\"keyword\">Search by keyword:</label>") .append("<label for=\"keyword\">").append(LanguageBundle.get("ext.store.search.bykeyword")).append(":</label>")
.append(String.format("<input id=\"keyword\" value=\"%s\" name=\"keyword\" class=\"inputBox\" type=\"text\" " + .append(String.format("<input id=\"keyword\" value=\"%s\" name=\"keyword\" class=\"inputBox\" type=\"text\" " +
"oninput=\"%s.setSearchKeyword(this.value);\">", searchKeyword, id)) "oninput=\"%s.setSearchKeyword(this.value);\">", searchKeyword, id))
.append("</div>") .append("</div>")
.append("<div class=\"centeredFlex\">") .append("<div class=\"centeredFlex\">")
.append("<label for=\"ordering\">Extensions ordering:</label>"); .append("<label for=\"ordering\">").append(LanguageBundle.get("ext.store.search.ordering")).append("</label>");
// add ordering stuff // add ordering stuff
htmlBuilder.append(String.format("<select class=\"inputBox\" name=\"ordering\" id=\"ordering\" " + htmlBuilder.append(String.format("<select class=\"inputBox\" name=\"ordering\" id=\"ordering\" " +
@ -119,13 +121,13 @@ public class SearchComponent implements ContentItem {
.append("<div class=\"filterStuff\">"); .append("<div class=\"filterStuff\">");
addFilterBoxHtml(htmlBuilder, "Client", "Clients:", clients, id); addFilterBoxHtml(htmlBuilder, "Client", LanguageBundle.get("ext.store.search.filter.clients") + ":", clients, id);
addFilterBoxHtml(htmlBuilder, "Category", "Categories:", categories, id); addFilterBoxHtml(htmlBuilder, "Category", LanguageBundle.get("ext.store.search.filter.categories") + ":", categories, id);
addFilterBoxHtml(htmlBuilder, "Framework", "Frameworks:", frameworks, id); addFilterBoxHtml(htmlBuilder, "Framework", LanguageBundle.get("ext.store.search.filter.frameworks") + ":", frameworks, id);
htmlBuilder htmlBuilder
.append("</div>") .append("</div>")
.append("<br><p>Info: you are automatically filtering on the OS you use</p>") .append("<br><p>").append(LanguageBundle.get("ext.store.search.info.automaticosfiltering")).append("</p>")
.append("</div>") .append("</div>")
.append("</div>"); .append("</div>");

View File

@ -6,6 +6,7 @@ import gearth.services.internal_extensions.extensionstore.application.entities.H
import gearth.services.internal_extensions.extensionstore.application.entities.extensiondetails.StoreExtensionDetailsOverview; import gearth.services.internal_extensions.extensionstore.application.entities.extensiondetails.StoreExtensionDetailsOverview;
import gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews.SearchedQueryOverview; import gearth.services.internal_extensions.extensionstore.application.entities.queriedoverviews.SearchedQueryOverview;
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository; import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
import gearth.ui.translations.LanguageBundle;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -27,7 +28,7 @@ public class SearchOverview extends HOverview {
@Override @Override
public String buttonText() { public String buttonText() {
return "Search"; return LanguageBundle.get("ext.store.button.search");
} }
@Override @Override
@ -74,17 +75,17 @@ public class SearchOverview extends HOverview {
@Override @Override
public String title() { public String title() {
return "Search"; return LanguageBundle.get("ext.store.search.title");
} }
@Override @Override
public String description() { public String description() {
return "Find the extension that fits your needs"; return LanguageBundle.get("ext.store.search.description");
} }
@Override @Override
public String contentTitle() { public String contentTitle() {
return "Search extensions"; return LanguageBundle.get("ext.store.search.contenttitle");
} }
}; };
} }

View File

@ -1,27 +1,29 @@
package gearth.services.internal_extensions.extensionstore.repository.querying; package gearth.services.internal_extensions.extensionstore.repository.querying;
import gearth.ui.translations.LanguageBundle;
public enum ExtensionOrdering { public enum ExtensionOrdering {
RATING("Rating"), RATING("ext.store.ordering.rating"),
ALPHABETICAL("Alphabetical"), ALPHABETICAL("ext.store.ordering.alphabetical"),
LAST_UPDATED("Last updated"), LAST_UPDATED("ext.store.ordering.lastupdated"),
NEW_RELEASES("New releases"); NEW_RELEASES("ext.store.ordering.newreleases");
private String orderName; private String orderKey;
ExtensionOrdering(String orderName) { ExtensionOrdering(String orderKey) {
this.orderName = orderName; this.orderKey = orderKey;
} }
public String getOrderName() { public String getOrderName() {
return orderName; return LanguageBundle.get(orderKey);
} }
public static ExtensionOrdering fromString(String text) { public static ExtensionOrdering fromString(String text) {
for (ExtensionOrdering b : ExtensionOrdering.values()) { for (ExtensionOrdering b : ExtensionOrdering.values()) {
if (b.orderName.equalsIgnoreCase(text)) { if (LanguageBundle.get(b.orderKey).equalsIgnoreCase(text)) {
return b; return b;
} }
} }

View File

@ -8,6 +8,7 @@ import gearth.services.extension_handler.extensions.implementations.network.exec
import gearth.services.internal_extensions.extensionstore.repository.StoreFetch; import gearth.services.internal_extensions.extensionstore.repository.StoreFetch;
import gearth.services.internal_extensions.extensionstore.repository.StoreRepository; import gearth.services.internal_extensions.extensionstore.repository.StoreRepository;
import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension; import gearth.services.internal_extensions.extensionstore.repository.models.StoreExtension;
import gearth.ui.translations.LanguageBundle;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.maven.artifact.versioning.ComparableVersion; import org.apache.maven.artifact.versioning.ComparableVersion;
import org.json.JSONArray; import org.json.JSONArray;
@ -137,29 +138,29 @@ public class StoreExtensionTools {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
listener.fail("Error while unzipping"); listener.fail(LanguageBundle.get("ext.store.fail.unzip"));
removeExtension(path); removeExtension(path);
} }
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
listener.fail("Invalid extension URL"); listener.fail(LanguageBundle.get("ext.store.fail.invalidurl"));
try { try {
removeExtension(path); // cleanup removeExtension(path); // cleanup
} catch (IOException ignore) { } } catch (IOException ignore) { }
} catch (IOException e) { } catch (IOException e) {
listener.fail("Extension not available in repository"); listener.fail(LanguageBundle.get("ext.store.fail.notavailable"));
try { try {
removeExtension(path); // cleanup removeExtension(path); // cleanup
} catch (IOException ignore) { } } catch (IOException ignore) { }
} }
} }
else { else {
listener.fail("Something went wrong creating the extension directory, does the extension already exist?"); listener.fail(LanguageBundle.get("ext.store.fail.alreadyexists"));
// don't do cleanup since you might not want removal of current extension files // don't do cleanup since you might not want removal of current extension files
} }
} }
else { else {
listener.fail("Extension wasn't found"); listener.fail(LanguageBundle.get("ext.store.fail.notfound"));
} }
}).start(); }).start();
@ -233,8 +234,7 @@ public class StoreExtensionTools {
} }
} }
} catch (Exception e) { } catch (Exception e) {
listener.fail("Something went wrong with uninstalling the extension, make sure to disconnect" + listener.fail(LanguageBundle.get("ext.store.fail.uninstall"));
" the extension if it was still running.");
return; return;
} }

View File

@ -7,6 +7,8 @@ package gearth.services.internal_extensions.uilogger;
import gearth.protocol.HMessage; import gearth.protocol.HMessage;
import gearth.protocol.HPacket; import gearth.protocol.HPacket;
import gearth.ui.subforms.logger.loggerdisplays.PacketLogger; import gearth.ui.subforms.logger.loggerdisplays.PacketLogger;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
@ -39,7 +41,7 @@ public class UiLoggerController implements Initializable {
public CheckMenuItem chkViewIncoming; public CheckMenuItem chkViewIncoming;
public CheckMenuItem chkViewOutgoing; public CheckMenuItem chkViewOutgoing;
public CheckMenuItem chkDisplayStructure; public CheckMenuItem chkDisplayStructure;
public Label lblAutoScrolll; public Label lblAutoScroll;
public CheckMenuItem chkAutoscroll; public CheckMenuItem chkAutoscroll;
public CheckMenuItem chkSkipBigPackets; public CheckMenuItem chkSkipBigPackets;
public CheckMenuItem chkMessageName; public CheckMenuItem chkMessageName;
@ -71,6 +73,7 @@ public class UiLoggerController implements Initializable {
public RadioMenuItem chkReprHex; public RadioMenuItem chkReprHex;
public RadioMenuItem chkReprRawHex; public RadioMenuItem chkReprRawHex;
public RadioMenuItem chkReprNone; public RadioMenuItem chkReprNone;
public MenuItem menuItem_clear, menuItem_exportAll;
private Map<Integer, LinkedList<Long>> filterTimestamps = new HashMap<>(); private Map<Integer, LinkedList<Long>> filterTimestamps = new HashMap<>();
@ -86,6 +89,11 @@ public class UiLoggerController implements Initializable {
private List<MenuItem> allMenuItems = new ArrayList<>(); private List<MenuItem> allMenuItems = new ArrayList<>();
private UiLogger uiLogger; private UiLogger uiLogger;
public Menu menu_window, menu_window_onConnect, menu_window_onDisconnect, menu_view, menu_packets,
menu_packets_details, menu_packets_details_byteRep, menu_packets_details_message, menu_packets_antiSpam;
private TranslatableString viewIncoming, viewOutgoing, autoScroll, packetInfo, filtered;
private boolean isSelected(MenuItem item) { private boolean isSelected(MenuItem item) {
if (item instanceof CheckMenuItem) { if (item instanceof CheckMenuItem) {
return ((CheckMenuItem)item).isSelected(); return ((CheckMenuItem)item).isSelected();
@ -157,6 +165,8 @@ public class UiLoggerController implements Initializable {
appendLater.clear(); appendLater.clear();
} }
} }
initLanguageBinding();
} }
private static String cleanTextContent(String text) { private static String cleanTextContent(String text) {
@ -219,7 +229,7 @@ public class UiLoggerController implements Initializable {
if (chkTimestamp.isSelected()) { if (chkTimestamp.isSelected()) {
elements.add(new Element(String.format("(timestamp: %d)\n", System.currentTimeMillis()), "timestamp")); elements.add(new Element(String.format("(%s: %d)\n", LanguageBundle.get("ext.logger.element.timestamp"), System.currentTimeMillis()), "timestamp"));
} }
boolean packetInfoAvailable = uiLogger.getPacketInfoManager().getPacketInfoList().size() > 0; boolean packetInfoAvailable = uiLogger.getPacketInfoManager().getPacketInfoList().size() > 0;
@ -256,8 +266,8 @@ public class UiLoggerController implements Initializable {
elements.add(new Element("\n", "")); elements.add(new Element("\n", ""));
} }
if (isBlocked) elements.add(new Element("[Blocked]\n", "blocked")); if (isBlocked) elements.add(new Element(String.format("[%s]\n", LanguageBundle.get("ext.logger.element.blocked")), "blocked"));
else if (isReplaced) elements.add(new Element("[Replaced]\n", "replaced")); else if (isReplaced) elements.add(new Element(String.format("[%s]\n", LanguageBundle.get("ext.logger.element.replaced")), "replaced"));
if (!chkReprNone.isSelected()) { if (!chkReprNone.isSelected()) {
boolean isSkipped = chkSkipBigPackets.isSelected() && (packet.length() > 4000 || (packet.length() > 1000 && chkReprHex.isSelected())); boolean isSkipped = chkSkipBigPackets.isSelected() && (packet.length() > 4000 || (packet.length() > 1000 && chkReprHex.isSelected()));
@ -265,7 +275,7 @@ public class UiLoggerController implements Initializable {
Hexdump.hexdump(packet.toBytes()) : Hexdump.hexdump(packet.toBytes()) :
(chkReprRawHex.isSelected() ? Bytes.wrap(packet.toBytes()).encodeHex() : packet.toString()); (chkReprRawHex.isSelected() ? Bytes.wrap(packet.toBytes()).encodeHex() : packet.toString());
String type = isIncoming ? "Incoming" : "Outgoing"; String type = isIncoming ? LanguageBundle.get("ext.logger.element.direction.incoming") : LanguageBundle.get("ext.logger.element.direction.outgoing");
if (!chkReprHex.isSelected()) { if (!chkReprHex.isSelected()) {
elements.add(new Element(String.format("%s[", type), type.toLowerCase())); elements.add(new Element(String.format("%s[", type), type.toLowerCase()));
@ -276,7 +286,7 @@ public class UiLoggerController implements Initializable {
} }
if (isSkipped) { if (isSkipped) {
elements.add(new Element("<packet skipped>", "skipped")); elements.add(new Element(String.format("<%s>", LanguageBundle.get("ext.logger.element.skipped")), "skipped"));
} else } else
elements.add(new Element(packetRepresentation, String.format(chkReprHex.isSelected() ? "%sHex": "%s", type.toLowerCase()))); elements.add(new Element(packetRepresentation, String.format(chkReprHex.isSelected() ? "%sHex": "%s", type.toLowerCase())));
elements.add(new Element("\n", "")); elements.add(new Element("\n", ""));
@ -343,13 +353,13 @@ public class UiLoggerController implements Initializable {
public void updateLoggerInfo() { public void updateLoggerInfo() {
Platform.runLater(() -> { Platform.runLater(() -> {
lblViewIncoming.setText("View Incoming: " + (chkViewIncoming.isSelected() ? "True" : "False")); viewIncoming.setKey(1, "ext.logger.state." + (chkViewIncoming.isSelected() ? "true" : "false"));
lblViewOutgoing.setText("View Outgoing: " + (chkViewOutgoing.isSelected() ? "True" : "False")); viewIncoming.setKey(1, "ext.logger.state." + (chkViewOutgoing.isSelected() ? "true" : "false"));
lblAutoScrolll.setText("Autoscroll: " + (chkAutoscroll.isSelected() ? "True" : "False")); autoScroll.setKey(1, "ext.logger.state." + (chkAutoscroll.isSelected() ? "true" : "false"));
lblFiltered.setText("Filtered: " + filteredAmount); filtered.setFormat("%s: " + filteredAmount);
boolean packetInfoAvailable = uiLogger.getPacketInfoManager().getPacketInfoList().size() > 0; boolean packetInfoAvailable = uiLogger.getPacketInfoManager().getPacketInfoList().size() > 0;
lblPacketInfo.setText("Packet info: " + (packetInfoAvailable ? "True" : "False")); packetInfo.setKey(1, "ext.logger.state." + (packetInfoAvailable ? "true" : "false"));
}); });
} }
@ -389,9 +399,9 @@ public class UiLoggerController implements Initializable {
//Set extension filter //Set extension filter
FileChooser.ExtensionFilter extFilter = FileChooser.ExtensionFilter extFilter =
new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt"); new FileChooser.ExtensionFilter(String.format("%s (*.txt)", LanguageBundle.get("ext.logger.menu.packets.exportall.filetype")), "*.txt");
fileChooser.getExtensionFilters().add(extFilter); fileChooser.getExtensionFilters().add(extFilter);
fileChooser.setTitle("Save Packets"); fileChooser.setTitle(LanguageBundle.get("ext.logger.menu.packets.exportall.windowtitle"));
//Show save file dialog //Show save file dialog
File file = fileChooser.showSaveDialog(stage); File file = fileChooser.showSaveDialog(stage);
@ -416,4 +426,62 @@ public class UiLoggerController implements Initializable {
public void init(UiLogger uiLogger) { public void init(UiLogger uiLogger) {
this.uiLogger = uiLogger; this.uiLogger = uiLogger;
} }
private void initLanguageBinding() {
menu_window.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window"));
chkAlwaysOnTop.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.alwaysontop"));
menu_window_onConnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.onconnect"));
chkOpenOnConnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.onconnect.openwindow"));
chkResetOnConnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.onconnect.reset"));
menu_window_onDisconnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.ondisconnect"));
chkHideOnDisconnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.ondisconnect.hidewindow"));
chkResetOnDisconnect.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.window.ondisconnect.reset"));
menu_view.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.view"));
chkViewIncoming.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.view.incoming"));
chkViewOutgoing.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.view.outgoing"));
chkAutoscroll.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.view.autoscroll"));
menuItem_clear.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.view.cleartext"));
menu_packets.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets"));
menu_packets_details.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails"));
chkDisplayStructure.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.structure"));
chkTimestamp.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.timestamp"));
menu_packets_details_byteRep.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.byterep"));
chkReprLegacy.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.byterep.legacy"));
chkReprHex.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.byterep.hexdump"));
chkReprRawHex.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.byterep.rawhex"));
chkReprNone.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.byterep.none"));
menu_packets_details_message.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.message"));
chkMessageHash.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.message.hash"));
chkMessageName.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.message.name"));
chkMessageId.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.displaydetails.message.id"));
menu_packets_antiSpam.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam"));
chkAntiSpam_none.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam.none"));
chkAntiSpam_low.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam.low"));
chkAntiSpam_medium.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam.med"));
chkAntiSpam_high.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam.high"));
chkAntiSpam_ultra.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.antispam.ultra"));
chkSkipBigPackets.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.skipbig"));
menuItem_exportAll.textProperty().bind(new TranslatableString("%s", "ext.logger.menu.packets.exportall"));
viewIncoming = new TranslatableString("%s: %s", "ext.logger.menu.view.incoming", "ext.logger.state.true");
viewOutgoing = new TranslatableString("%s: %s", "ext.logger.menu.view.outgoing", "ext.logger.state.true");
autoScroll = new TranslatableString("%s: %s", "ext.logger.menu.view.autoscroll", "ext.logger.state.true");
packetInfo = new TranslatableString("%s: %s", "ext.logger.state.packetinfo", "ext.logger.state.false");
filtered = new TranslatableString("%s: 0", "ext.logger.state.filtered");
lblViewIncoming.textProperty().bind(viewIncoming);
lblViewOutgoing.textProperty().bind(viewOutgoing);
lblAutoScroll.textProperty().bind(autoScroll);
lblPacketInfo.textProperty().bind(packetInfo);
lblFiltered.textProperty().bind(filtered);
}
} }

View File

@ -1,5 +1,6 @@
package gearth.services.internal_extensions.uilogger; package gearth.services.internal_extensions.uilogger;
import gearth.GEarth;
import gearth.extensions.InternalExtensionFormCreator; import gearth.extensions.InternalExtensionFormCreator;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Parent; import javafx.scene.Parent;

View File

@ -3,8 +3,8 @@ package gearth.ui;
import gearth.protocol.connection.proxy.ProxyProviderFactory; import gearth.protocol.connection.proxy.ProxyProviderFactory;
import gearth.protocol.connection.proxy.SocksConfiguration; import gearth.protocol.connection.proxy.SocksConfiguration;
import gearth.ui.subforms.logger.loggerdisplays.PacketLoggerFactory; import gearth.ui.subforms.logger.loggerdisplays.PacketLoggerFactory;
import gearth.ui.translations.TranslatableString;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage; import javafx.stage.Stage;
import gearth.protocol.HConnection; import gearth.protocol.HConnection;
import gearth.ui.subforms.connection.ConnectionController; import gearth.ui.subforms.connection.ConnectionController;
@ -21,7 +21,7 @@ import java.util.List;
public class GEarthController { public class GEarthController {
public Tab tab_Logger; public Tab tab_Connection, tab_Logger, tab_Injection, tab_Tools, tab_Scheduler, tab_Extensions, tab_Extra, tab_Info;
public TabPane tabBar; public TabPane tabBar;
private Stage stage = null; private Stage stage = null;
private volatile HConnection hConnection; private volatile HConnection hConnection;
@ -67,6 +67,10 @@ public class GEarthController {
trySetController(); trySetController();
} }
if (PacketLoggerFactory.usesUIlogger()) {
tabBar.getTabs().remove(tab_Logger);
}
List<Tab> uiTabs = tabBar.getTabs(); List<Tab> uiTabs = tabBar.getTabs();
for (int i = 0; i < uiTabs.size(); i++) { for (int i = 0; i < uiTabs.size(); i++) {
Tab tab = uiTabs.get(i); Tab tab = uiTabs.get(i);
@ -79,11 +83,7 @@ public class GEarthController {
}); });
} }
if (PacketLoggerFactory.usesUIlogger()) { initLanguageBinding();
tabBar.getTabs().remove(tab_Logger);
}
} }
public void setStage(Stage stage) { public void setStage(Stage stage) {
@ -120,4 +120,13 @@ public class GEarthController {
hConnection.abort(); hConnection.abort();
} }
private void initLanguageBinding() {
tab_Connection.textProperty().bind(new TranslatableString("%s", "tab.connection"));
tab_Injection.textProperty().bind(new TranslatableString("%s", "tab.injection"));
tab_Tools.textProperty().bind(new TranslatableString("%s", "tab.tools"));
tab_Scheduler.textProperty().bind(new TranslatableString("%s", "tab.scheduler"));
tab_Extensions.textProperty().bind(new TranslatableString("%s", "tab.extensions"));
tab_Extra.textProperty().bind(new TranslatableString("%s", "tab.extra"));
tab_Info.textProperty().bind(new TranslatableString("%s", "tab.info"));
}
} }

View File

@ -6,6 +6,7 @@ import gearth.protocol.connection.HClient;
import gearth.protocol.connection.HState; import gearth.protocol.connection.HState;
import gearth.protocol.connection.proxy.ProxyProviderFactory; import gearth.protocol.connection.proxy.ProxyProviderFactory;
import gearth.services.Constants; import gearth.services.Constants;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.scene.control.*;
@ -29,7 +30,7 @@ public class ConnectionController extends SubForm {
public ComboBox<String> inpPort; public ComboBox<String> inpPort;
public ComboBox<String> inpHost; public ComboBox<String> inpHost;
public Button btnConnect; public Button btnConnect;
public Label lblState; public Label lblInpPort, lblInpHost, lblPort, lblHost, lblHotelVersion, lblClient, lblStateHead, lblState;
public TextField outHost; public TextField outHost;
public TextField outPort; public TextField outPort;
public CheckBox cbx_autodetect; public CheckBox cbx_autodetect;
@ -48,6 +49,8 @@ public class ConnectionController extends SubForm {
private volatile int initcount = 0; private volatile int initcount = 0;
private TranslatableString connect, state;
public void initialize() { public void initialize() {
Constants.UNITY_PACKETS = rd_unity.isSelected(); Constants.UNITY_PACKETS = rd_unity.isSelected();
@ -131,6 +134,8 @@ public class ConnectionController extends SubForm {
synchronized (this) { synchronized (this) {
tryMaybeConnectOnInit(); tryMaybeConnectOnInit();
} }
initLanguageBinding();
} }
@ -176,20 +181,20 @@ public class ConnectionController extends SubForm {
getHConnection().getStateObservable().addListener((oldState, newState) -> Platform.runLater(() -> { getHConnection().getStateObservable().addListener((oldState, newState) -> Platform.runLater(() -> {
updateInputUI(); updateInputUI();
if (newState == HState.NOT_CONNECTED) { if (newState == HState.NOT_CONNECTED) {
lblState.setText("Not connected"); state.setKey(0, "tab.connection.state.notconnected");
btnConnect.setText("Connect"); connect.setKey(0, "tab.connection.button.connect");
outHost.setText(""); outHost.setText("");
outPort.setText(""); outPort.setText("");
} }
else if (oldState == HState.NOT_CONNECTED) { else if (oldState == HState.NOT_CONNECTED) {
btnConnect.setText("Abort"); connect.setKey(0, "tab.connection.button.abort");
} }
if (newState == HState.CONNECTED) { if (newState == HState.CONNECTED) {
lblState.setText("Connected"); state.setKey(0, "tab.connection.state.connected");
} }
if (newState == HState.WAITING_FOR_CLIENT) { if (newState == HState.WAITING_FOR_CLIENT) {
lblState.setText("Waiting for connection"); state.setKey(0, "tab.connection.state.waiting");
} }
if (newState == HState.CONNECTED && useFlash()) { if (newState == HState.CONNECTED && useFlash()) {
@ -314,4 +319,24 @@ public class ConnectionController extends SubForm {
return false; return false;
} }
private void initLanguageBinding() {
TranslatableString port = new TranslatableString("%s", "tab.connection.port");
TranslatableString host = new TranslatableString("%s", "tab.connection.host");
lblInpPort.textProperty().bind(port);
lblInpHost.textProperty().bind(host);
lblPort.textProperty().bind(port);
lblHost.textProperty().bind(host);
cbx_autodetect.textProperty().bind(new TranslatableString("%s", "tab.connection.autodetect"));
connect = new TranslatableString("%s", "tab.connection.button.connect");
btnConnect.textProperty().bind(connect);
lblHotelVersion.textProperty().bind(new TranslatableString("%s", "tab.connection.version"));
lblClient.textProperty().bind(new TranslatableString("%s", "tab.connection.client"));
rd_unity.textProperty().bind(new TranslatableString("%s", "tab.connection.client.unity"));
rd_flash.textProperty().bind(new TranslatableString("%s", "tab.connection.client.flash"));
rd_nitro.textProperty().bind(new TranslatableString("%s", "tab.connection.client.nitro"));
lblStateHead.textProperty().bind(new TranslatableString("%s", "tab.connection.state"));
state = new TranslatableString("%s", "tab.connection.state.notconnected");
lblState.textProperty().bind(state);
}
} }

View File

@ -1,8 +1,11 @@
package gearth.ui.subforms.extensions; package gearth.ui.subforms.extensions;
import gearth.GEarth;
import gearth.services.extension_handler.extensions.ExtensionType; import gearth.services.extension_handler.extensions.ExtensionType;
import gearth.services.extension_handler.extensions.GEarthExtension; import gearth.services.extension_handler.extensions.GEarthExtension;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.event.EventHandler; import javafx.event.EventHandler;
import javafx.geometry.Insets; import javafx.geometry.Insets;
@ -80,7 +83,8 @@ public class ExtensionItemContainer extends GridPane {
add(versionLabel, 3, 0); add(versionLabel, 3, 0);
exitButton = new ExitButton(); exitButton = new ExitButton();
Tooltip delete = new Tooltip("Close connection with this extension"); Tooltip delete = new Tooltip();
delete.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.edit.delete.tooltip"));
Tooltip.install(exitButton,delete); Tooltip.install(exitButton,delete);
exitButton.show(); exitButton.show();
clickButton = new SimpleClickButton(); clickButton = new SimpleClickButton();
@ -89,7 +93,8 @@ public class ExtensionItemContainer extends GridPane {
buttonsBox = new HBox(clickButton, exitButton); buttonsBox = new HBox(clickButton, exitButton);
reloadButton = new ReloadButton(); reloadButton = new ReloadButton();
Tooltip reload = new Tooltip("Restart this extension"); Tooltip reload = new Tooltip();
reload.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.edit.restart.tooltip"));
Tooltip.install(reloadButton, reload); Tooltip.install(reloadButton, reload);
reloadButton.show(); reloadButton.show();
reloadButton.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> { reloadButton.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
@ -99,8 +104,6 @@ public class ExtensionItemContainer extends GridPane {
}); });
DeleteButton deleteButton = new DeleteButton(); DeleteButton deleteButton = new DeleteButton();
Tooltip uninstall = new Tooltip("Uninstall this extension");
Tooltip.install(deleteButton, uninstall);
deleteButton.show(); deleteButton.show();
GridPane this2 = this; GridPane this2 = this;
@ -110,8 +113,8 @@ public class ExtensionItemContainer extends GridPane {
if (ConfirmationDialog.showDialog(uninstallKey)) { if (ConfirmationDialog.showDialog(uninstallKey)) {
Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.CONFIRMATION, uninstallKey Alert alert = ConfirmationDialog.createAlertWithOptOut(Alert.AlertType.CONFIRMATION, uninstallKey
,"Confirmation Dialog", null, , LanguageBundle.get("alert.confirmation.windowtitle"), null,
"Are you sure want to uninstall this extension?", "Do not ask again", LanguageBundle.get("tab.extensions.table.edit.uninstall.confirmation"), LanguageBundle.get("alert.confirmation.button.donotaskagain"),
ButtonType.YES, ButtonType.NO ButtonType.YES, ButtonType.NO
); );
@ -217,4 +220,8 @@ public class ExtensionItemContainer extends GridPane {
} }
return null; return null;
} }
private void initLanguageBinding() {
}
} }

View File

@ -1,5 +1,6 @@
package gearth.ui.subforms.extensions; package gearth.ui.subforms.extensions;
import gearth.GEarth;
import gearth.services.extension_handler.ExtensionHandler; import gearth.services.extension_handler.ExtensionHandler;
import gearth.services.extension_handler.extensions.ExtensionListener; import gearth.services.extension_handler.extensions.ExtensionListener;
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionsProducer; import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionsProducer;
@ -10,6 +11,8 @@ import gearth.services.extension_handler.extensions.implementations.network.exec
import gearth.services.g_python.GPythonShell; import gearth.services.g_python.GPythonShell;
import gearth.ui.SubForm; import gearth.ui.SubForm;
import gearth.ui.subforms.extensions.logger.ExtensionLogger; import gearth.ui.subforms.extensions.logger.ExtensionLogger;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.scene.control.*;
@ -39,12 +42,14 @@ public class ExtensionsController extends SubForm {
private NetworkExtensionsProducer networkExtensionsProducer; // needed for port private NetworkExtensionsProducer networkExtensionsProducer; // needed for port
private ExtensionLogger extensionLogger = null; private ExtensionLogger extensionLogger = null;
public Label lbl_tableTitle, lbl_tableDesc, lbl_tableAuthor, lbl_tableVersion, lbl_tableEdit, lbl_port;
public void initialize() { public void initialize() {
scroller.widthProperty().addListener(observable -> header_ext.setPrefWidth(scroller.getWidth())); scroller.widthProperty().addListener(observable -> header_ext.setPrefWidth(scroller.getWidth()));
extensionLogger = new ExtensionLogger(); extensionLogger = new ExtensionLogger();
initLanguageBinding();
} }
protected void onParentSet() { protected void onParentSet() {
@ -80,9 +85,9 @@ public class ExtensionsController extends SubForm {
public void installBtnClicked(ActionEvent actionEvent) { public void installBtnClicked(ActionEvent actionEvent) {
FileChooser fileChooser = new FileChooser(); FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Install extension"); fileChooser.setTitle(LanguageBundle.get("tab.extensions.button.install.windowtitle"));
fileChooser.getExtensionFilters().addAll( fileChooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter("G-Earth extensions", ExecutionInfo.ALLOWEDEXTENSIONTYPES)); new FileChooser.ExtensionFilter(LanguageBundle.get("tab.extensions.button.install.filetype"), ExecutionInfo.ALLOWEDEXTENSIONTYPES));
File selectedFile = fileChooser.showOpenDialog(parentController.getStage()); File selectedFile = fileChooser.showOpenDialog(parentController.getStage());
if (selectedFile != null) { if (selectedFile != null) {
extensionRunner.installAndRunExtension(selectedFile.getPath(), networkExtensionsProducer.getPort()); extensionRunner.installAndRunExtension(selectedFile.getPath(), networkExtensionsProducer.getPort());
@ -116,7 +121,7 @@ public class ExtensionsController extends SubForm {
pythonShellLaunching = true; pythonShellLaunching = true;
Platform.runLater(() -> btn_gpython.setDisable(true)); Platform.runLater(() -> btn_gpython.setDisable(true));
GPythonShell shell = new GPythonShell( GPythonShell shell = new GPythonShell(
"Scripting shell " + gpytonShellCounter++, String.format("%s %d", LanguageBundle.get("tab.extensions.button.pythonshell.windowtitle"),gpytonShellCounter++),
networkExtensionsProducer.getPort(), networkExtensionsProducer.getPort(),
Authenticator.generatePermanentCookie() Authenticator.generatePermanentCookie()
); );
@ -129,4 +134,18 @@ public class ExtensionsController extends SubForm {
public ExtensionHandler getExtensionHandler() { public ExtensionHandler getExtensionHandler() {
return extensionHandler; return extensionHandler;
} }
private void initLanguageBinding() {
lbl_tableTitle.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.title"));
lbl_tableDesc.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.description"));
lbl_tableAuthor.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.author"));
lbl_tableVersion.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.version"));
lbl_tableEdit.textProperty().bind(new TranslatableString("%s", "tab.extensions.table.edit"));
lbl_port.textProperty().bind(new TranslatableString("%s:", "tab.extensions.port"));
btn_gpython.textProperty().bind(new TranslatableString("%s", "tab.extensions.button.pythonshell"));
btn_viewExtensionConsole.textProperty().bind(new TranslatableString("%s", "tab.extensions.button.logs"));
btn_install.textProperty().bind(new TranslatableString("%s", "tab.extensions.button.install"));
}
} }

View File

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

View File

@ -11,6 +11,8 @@ import gearth.services.g_python.GPythonVersionUtils;
import gearth.ui.SubForm; import gearth.ui.SubForm;
import gearth.ui.subforms.info.InfoController; import gearth.ui.subforms.info.InfoController;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.scene.control.*;
@ -59,6 +61,7 @@ public class ExtraController extends SubForm implements SocksConfiguration {
public TextField txt_socksPort; public TextField txt_socksPort;
public TextField txt_socksIp; public TextField txt_socksIp;
public CheckBox cbx_admin; public CheckBox cbx_admin;
public Label lbl_notepad, lbl_proxyIp, lbl_proxyPort;
private AdminService adminService; private AdminService adminService;
@ -92,6 +95,8 @@ public class ExtraController extends SubForm implements SocksConfiguration {
cbx_useSocks.selectedProperty().addListener(observable -> grd_socksInfo.setDisable(!cbx_useSocks.isSelected())); cbx_useSocks.selectedProperty().addListener(observable -> grd_socksInfo.setDisable(!cbx_useSocks.isSelected()));
ProxyProviderFactory.setSocksConfig(this); ProxyProviderFactory.setSocksConfig(this);
initLanguageBinding();
} }
@Override @Override
@ -177,12 +182,13 @@ public class ExtraController extends SubForm implements SocksConfiguration {
}); });
if (!GPythonVersionUtils.validInstallation()) { if (!GPythonVersionUtils.validInstallation()) {
Platform.runLater(() -> { Platform.runLater(() -> {
Alert alert = new Alert(Alert.AlertType.ERROR, "G-Python installation", ButtonType.OK); Alert alert = new Alert(Alert.AlertType.ERROR, LanguageBundle.get("tab.extra.options.pythonscripting.alert.title"), ButtonType.OK);
alert.setTitle("G-Python installation"); alert.setTitle(LanguageBundle.get("tab.extra.options.pythonscripting.alert.title"));
FlowPane fp = new FlowPane(); FlowPane fp = new FlowPane();
Label lbl = new Label("Before using G-Python, install the right packages using pip!" + Label lbl = new Label(LanguageBundle.get("tab.extra.options.pythonscripting.alert.content") +
System.lineSeparator() + System.lineSeparator() + "More information here:"); System.lineSeparator() + System.lineSeparator() +
LanguageBundle.get("tab.extra.options.pythonscripting.alert.moreinformation"));
Hyperlink link = new Hyperlink(INFO_URL_GPYTHON); Hyperlink link = new Hyperlink(INFO_URL_GPYTHON);
fp.getChildren().addAll( lbl, link); fp.getChildren().addAll( lbl, link);
link.setOnAction(event -> { link.setOnAction(event -> {
@ -219,4 +225,22 @@ public class ExtraController extends SubForm implements SocksConfiguration {
adminService.setEnabled(cbx_admin.isSelected()); adminService.setEnabled(cbx_admin.isSelected());
} }
private void initLanguageBinding() {
url_troubleshooting.textProperty().bind(new TranslatableString("%s", "tab.extra.troubleshooting"));
lbl_notepad.textProperty().bind(new TranslatableString("%s:", "tab.extra.notepad"));
lbl_proxyIp.textProperty().bind(new TranslatableString("%s:", "tab.extra.options.advanced.proxy.ip"));
lbl_proxyPort.textProperty().bind(new TranslatableString("%s:", "tab.extra.options.advanced.proxy.port"));
cbx_alwaysOnTop.textProperty().bind(new TranslatableString("%s", "tab.extra.options.alwaysontop"));
cbx_admin.textProperty().bind(new TranslatableString("%s", "tab.extra.options.staffpermissions"));
cbx_gpython.textProperty().bind(new TranslatableString("%s", "tab.extra.options.pythonscripting"));
cbx_advanced.textProperty().bind(new TranslatableString("%s", "tab.extra.options.advanced"));
cbx_useSocks.textProperty().bind(new TranslatableString("%s", "tab.extra.options.advanced.socks"));
cbx_disableDecryption.textProperty().bind(new TranslatableString("%s", "tab.extra.options.advanced.disabledecryption"));
cbx_debug.textProperty().bind(new TranslatableString("%s", "tab.extra.options.advanced.debugstdout"));
}
} }

View File

@ -2,6 +2,8 @@ package gearth.ui.subforms.info;
import gearth.GEarth; import gearth.GEarth;
import gearth.ui.titlebar.TitleBarController; import gearth.ui.titlebar.TitleBarController;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.scene.control.*;
import gearth.ui.SubForm; import gearth.ui.SubForm;
@ -24,7 +26,8 @@ public class InfoController extends SubForm {
public Hyperlink link_g_store; public Hyperlink link_g_store;
public Hyperlink link_t_gearth; public Hyperlink link_t_gearth;
public Label version; public Label version, lbl_description, lbl_createdBy, lbl_contrib, lbl_links;
public Button btn_donate;
public static void activateHyperlink(Hyperlink link) { public static void activateHyperlink(Hyperlink link) {
link.setOnAction((ActionEvent event) -> { link.setOnAction((ActionEvent event) -> {
@ -49,16 +52,18 @@ public class InfoController extends SubForm {
activateHyperlink(link_g_tanji); activateHyperlink(link_g_tanji);
activateHyperlink(link_g_store); activateHyperlink(link_g_store);
activateHyperlink(link_t_gearth); activateHyperlink(link_t_gearth);
initLanguageBinding();
} }
public void donate(ActionEvent actionEvent) { public void donate(ActionEvent actionEvent) {
String pubkey = "1GEarthEV9Ua3RcixsKTcuc1PPZd9hqri3"; String pubkey = "1GEarthEV9Ua3RcixsKTcuc1PPZd9hqri3";
Alert alert = new Alert(Alert.AlertType.INFORMATION, "Donate Bitcoins", ButtonType.OK); Alert alert = new Alert(Alert.AlertType.INFORMATION, LanguageBundle.get("tab.info.donate.alert.title"), ButtonType.OK);
alert.setHeaderText("Donate Bitcoins"); alert.setHeaderText(LanguageBundle.get("tab.info.donate.alert.title"));
VBox test = new VBox(); VBox test = new VBox();
test.getChildren().add(new Label("Bitcoin public address:")); test.getChildren().add(new Label(LanguageBundle.get("tab.info.donate.alert.content")));
TextArea pubText = new TextArea(pubkey); TextArea pubText = new TextArea(pubkey);
pubText.setPrefHeight(28); pubText.setPrefHeight(28);
pubText.setMaxWidth(250); pubText.setMaxWidth(250);
@ -73,4 +78,13 @@ public class InfoController extends SubForm {
e.printStackTrace(); e.printStackTrace();
} }
} }
private void initLanguageBinding() {
lbl_description.textProperty().bind(new TranslatableString("%s", "tab.info.description"));
lbl_createdBy.textProperty().bind(new TranslatableString("%s:", "tab.info.createdby"));
lbl_contrib.textProperty().bind(new TranslatableString("%s:", "tab.info.contributors"));
lbl_links.textProperty().bind(new TranslatableString("%s:", "tab.info.links"));
btn_donate.textProperty().bind(new TranslatableString("%s", "tab.info.donate"));
}
} }

View File

@ -1,10 +1,12 @@
package gearth.ui.subforms.injection; package gearth.ui.subforms.injection;
import gearth.GEarth;
import gearth.misc.StringifyAble; import gearth.misc.StringifyAble;
import gearth.protocol.HMessage; import gearth.protocol.HMessage;
import gearth.protocol.HPacket; import gearth.protocol.HPacket;
import gearth.services.packet_info.PacketInfo; import gearth.services.packet_info.PacketInfo;
import gearth.services.packet_info.PacketInfoManager; import gearth.services.packet_info.PacketInfoManager;
import gearth.ui.translations.LanguageBundle;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.HashMap; import java.util.HashMap;
@ -19,7 +21,7 @@ public class InjectedPackets implements StringifyAble {
public InjectedPackets(String packetsAsString, int amountPackets, PacketInfoManager packetInfoManager, HMessage.Direction direction) { public InjectedPackets(String packetsAsString, int amountPackets, PacketInfoManager packetInfoManager, HMessage.Direction direction) {
String description; String description;
if (amountPackets > 1) { if (amountPackets > 1) {
description = String.format("(packets: %d, length: %d)", amountPackets, packetsAsString.length()); description = String.format("(%s: %d, %s: %d)", LanguageBundle.get("tab.injection.description.packets"), amountPackets, LanguageBundle.get("tab.injection.description.length"), packetsAsString.length());
} }
else { // assume 1 packet else { // assume 1 packet
HPacket packet = new HPacket(packetsAsString); HPacket packet = new HPacket(packetsAsString);
@ -40,7 +42,7 @@ public class InjectedPackets implements StringifyAble {
description = String.format("%s", identifier); description = String.format("%s", identifier);
} }
else { else {
description = String.format("(id: %d, length: %d)", packet.headerId(), packet.length()); description = String.format("(%s: %d, %s: %d)", LanguageBundle.get("tab.injection.description.id"), packet.headerId(), LanguageBundle.get("tab.injection.description.length"), packet.length());
} }
} }

View File

@ -1,9 +1,12 @@
package gearth.ui.subforms.injection; package gearth.ui.subforms.injection;
import gearth.GEarth;
import gearth.misc.Cacher; import gearth.misc.Cacher;
import gearth.services.packet_info.PacketInfoManager; import gearth.services.packet_info.PacketInfoManager;
import gearth.protocol.HMessage; import gearth.protocol.HMessage;
import gearth.protocol.connection.HState; import gearth.protocol.connection.HState;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.scene.control.*;
@ -26,12 +29,15 @@ public class InjectionController extends SubForm {
private static final int historylimit = 69; private static final int historylimit = 69;
public TextArea inputPacket; public TextArea inputPacket;
public Text lbl_corrruption; public Text lbl_corruption;
public Text lbl_pcktInfo; public Text lbl_pcktInfo;
public Button btn_sendToServer; public Button btn_sendToServer;
public Button btn_sendToClient; public Button btn_sendToClient;
public ListView<InjectedPackets> history; public ListView<InjectedPackets> history;
public Label lblHistory; public Label lblHistory;
public Hyperlink lnk_clearHistory;
private TranslatableString corruption, pcktInfo;
protected void onParentSet() { protected void onParentSet() {
getHConnection().getStateObservable().addListener((oldState, newState) -> Platform.runLater(this::updateUI)); getHConnection().getStateObservable().addListener((oldState, newState) -> Platform.runLater(this::updateUI));
@ -52,14 +58,14 @@ public class InjectionController extends SubForm {
} }
}); });
lblHistory.setTooltip(new Tooltip("Double click a packet to restore it"));
List<Object> rawHistory = Cacher.getList(HISTORY_CACHE_KEY); List<Object> rawHistory = Cacher.getList(HISTORY_CACHE_KEY);
if (rawHistory != null) { if (rawHistory != null) {
List<InjectedPackets> history = rawHistory.stream() List<InjectedPackets> history = rawHistory.stream()
.map(o -> (String)o).limit(historylimit - 1).map(InjectedPackets::new).collect(Collectors.toList()); .map(o -> (String)o).limit(historylimit - 1).map(InjectedPackets::new).collect(Collectors.toList());
updateHistoryView(history); updateHistoryView(history);
} }
initLanguageBinding();
} }
private static boolean isPacketIncomplete(String line) { private static boolean isPacketIncomplete(String line) {
@ -103,33 +109,34 @@ public class InjectionController extends SubForm {
private void updateUI() { private void updateUI() {
boolean dirty = false; boolean dirty = false;
lbl_corrruption.setText("isCorrupted: False"); corruption.setKey(1, "tab.injection.corrupted.false");
lbl_corrruption.getStyleClass().clear(); lbl_corruption.getStyleClass().clear();
lbl_corrruption.getStyleClass().add("not-corrupted-label"); lbl_corruption.getStyleClass().add("not-corrupted-label");
HPacket[] packets = parsePackets(inputPacket.getText()); HPacket[] packets = parsePackets(inputPacket.getText());
if (packets.length == 0) { if (packets.length == 0) {
dirty = true; dirty = true;
lbl_corrruption.setFill(Paint.valueOf("#ee0404b2")); lbl_corruption.setFill(Paint.valueOf("#ee0404b2"));
lbl_corrruption.getStyleClass().clear(); lbl_corruption.getStyleClass().clear();
lbl_corrruption.getStyleClass().add("corrupted-label"); lbl_corruption.getStyleClass().add("corrupted-label");
} }
for (int i = 0; i < packets.length; i++) { for (int i = 0; i < packets.length; i++) {
if (packets[i].isCorrupted()) { if (packets[i].isCorrupted()) {
if (!dirty) { if (!dirty) {
lbl_corrruption.setText("isCorrupted: True -> " + i); corruption.setFormat("%s: %s -> " + i);
lbl_corrruption.getStyleClass().clear(); corruption.setKey(1, "tab.injection.corrupted.true");
lbl_corrruption.getStyleClass().add("corrupted-label"); lbl_corruption.getStyleClass().clear();
lbl_corruption.getStyleClass().add("corrupted-label");
dirty = true; dirty = true;
} else } else
lbl_corrruption.setText(lbl_corrruption.getText() + ", " + i); corruption.setFormat(corruption.getFormat() + ", " + i);
} }
} }
if (dirty && packets.length == 1) { if (dirty && packets.length == 1) {
lbl_corrruption.setText("isCorrupted: True"); // no index needed corruption.setFormatAndKeys("%s: %s", "tab.injection.corrupted", "tab.injection.corrupted.true");
} }
if (!dirty) { if (!dirty) {
@ -147,18 +154,23 @@ public class InjectionController extends SubForm {
btn_sendToClient.setDisable(!canSendToClient || getHConnection().getState() != HState.CONNECTED); btn_sendToClient.setDisable(!canSendToClient || getHConnection().getState() != HState.CONNECTED);
btn_sendToServer.setDisable(!canSendToServer || getHConnection().getState() != HState.CONNECTED); btn_sendToServer.setDisable(!canSendToServer || getHConnection().getState() != HState.CONNECTED);
if (packets.length == 1) { if (packets.length == 1) {
lbl_pcktInfo.setText("header (id:" + packets[0].headerId() + ", length:" + pcktInfo.setFormatAndKeys("%s (%s: " + packets[0].headerId() + ", %s: " + packets[0].length() + ")",
packets[0].length() + ")"); "tab.injection.description.header",
"tab.injection.description.id",
"tab.injection.description.length");
} }
else { else {
lbl_pcktInfo.setText(""); lbl_pcktInfo.setText("");
} }
} else { } else {
if (packets.length == 1) { if (packets.length == 1) {
lbl_pcktInfo.setText("header (id:NULL, length:" + packets[0].getBytesLength()+")"); pcktInfo.setFormatAndKeys("%s (%s:NULL, %s: " + packets[0].getBytesLength() + ")",
"tab.injection.description.header",
"tab.injection.description.id",
"tab.injection.description.length");
} }
else { else {
lbl_pcktInfo.setText(""); pcktInfo.setFormatAndKeys("");
} }
btn_sendToClient.setDisable(true); btn_sendToClient.setDisable(true);
@ -171,7 +183,7 @@ public class InjectionController extends SubForm {
HPacket[] packets = parsePackets(inputPacket.getText()); HPacket[] packets = parsePackets(inputPacket.getText());
for (HPacket packet : packets) { for (HPacket packet : packets) {
getHConnection().sendToServer(packet); getHConnection().sendToServer(packet);
writeToLog(Color.BLUE, "SS -> packet with id: " + packet.headerId()); writeToLog(Color.BLUE, String.format("SS -> %s: %d", LanguageBundle.get("tab.injection.log.packetwithid"), packet.headerId()));
} }
addToHistory(packets, inputPacket.getText(), HMessage.Direction.TOSERVER); addToHistory(packets, inputPacket.getText(), HMessage.Direction.TOSERVER);
@ -181,7 +193,7 @@ public class InjectionController extends SubForm {
HPacket[] packets = parsePackets(inputPacket.getText()); HPacket[] packets = parsePackets(inputPacket.getText());
for (HPacket packet : packets) { for (HPacket packet : packets) {
getHConnection().sendToClient(packet); getHConnection().sendToClient(packet);
writeToLog(Color.RED, "CS -> packet with id: " + packet.headerId()); writeToLog(Color.RED, String.format("CS -> %s: %d", LanguageBundle.get("tab.injection.log.packetwithid"), packet.headerId()));
} }
addToHistory(packets, inputPacket.getText(), HMessage.Direction.TOCLIENT); addToHistory(packets, inputPacket.getText(), HMessage.Direction.TOCLIENT);
@ -224,6 +236,23 @@ public class InjectionController extends SubForm {
updateHistoryView(new ArrayList<>()); updateHistoryView(new ArrayList<>());
} }
private void initLanguageBinding() {
lblHistory.textProperty().bind(new TranslatableString("%s", "tab.injection.history"));
lblHistory.setTooltip(new Tooltip());
lblHistory.getTooltip().textProperty().bind(new TranslatableString("%s", "tab.injection.history.tooltip"));
corruption = new TranslatableString("%s: %s", "tab.injection.corrupted", "tab.injection.corrupted.true");
lbl_corruption.textProperty().bind(corruption);
pcktInfo = new TranslatableString("%s (%s:NULL, %s:0)", "tab.injection.description.header", "tab.injection.description.id", "tab.injection.description.length");
lbl_pcktInfo.textProperty().bind(pcktInfo);
btn_sendToServer.textProperty().bind(new TranslatableString("%s", "tab.injection.send.toserver"));
btn_sendToClient.textProperty().bind(new TranslatableString("%s", "tab.injection.send.toclient"));
lnk_clearHistory.textProperty().bind(new TranslatableString("%s", "tab.injection.history.clear"));
}
public static void main(String[] args) { public static void main(String[] args) {
HPacket[] packets = parsePackets("{l}{h:3}{i:967585}{i:9589}{s:\"furni_inscriptionfuckfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\"}{s:\"sirjonasxx-II\"}{s:\"\"}{i:188}{i:0}{i:0}{b:false}"); HPacket[] packets = parsePackets("{l}{h:3}{i:967585}{i:9589}{s:\"furni_inscriptionfuckfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\"}{s:\"sirjonasxx-II\"}{s:\"\"}{i:188}{i:0}{i:0}{b:false}");
System.out.println(new HPacket("{l}{h:2550}{s:\"ClientPerf\"\"ormance\\\"}\"}{s:\"23\"}{s:\"fps\"}{s:\"Avatars: 1, Objects: 0\"}{i:76970180}").toExpression()); System.out.println(new HPacket("{l}{h:2550}{s:\"ClientPerf\"\"ormance\\\"}\"}{s:\"23\"}{s:\"fps\"}{s:\"Avatars: 1, Objects: 0\"}{i:76970180}").toExpression());

View File

@ -55,7 +55,7 @@ class LinuxTerminalLogger extends SimpleTerminalLogger {
packet.toString() packet.toString()
); );
output.append(colorizePackets.get("DEFAULT")); output.append(colorizePackets.get("ENGLISH"));
System.out.println(output.toString()); System.out.println(output.toString());
} }
@ -67,7 +67,7 @@ class LinuxTerminalLogger extends SimpleTerminalLogger {
System.out.println( System.out.println(
colorizePackets.get("EXPRESSION") + colorizePackets.get("EXPRESSION") +
expr + expr +
colorizePackets.get("DEFAULT") colorizePackets.get("ENGLISH")
); );
} }
} }

View File

@ -1,10 +1,14 @@
package gearth.ui.subforms.scheduler; package gearth.ui.subforms.scheduler;
import com.tulskiy.keymaster.common.Provider; import com.tulskiy.keymaster.common.Provider;
import gearth.GEarth;
import gearth.services.scheduler.Interval; import gearth.services.scheduler.Interval;
import gearth.services.scheduler.Scheduler; import gearth.services.scheduler.Scheduler;
import gearth.ui.translations.LanguageBundle;
import gearth.ui.translations.TranslatableString;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
@ -48,6 +52,9 @@ public class SchedulerController extends SubForm {
private Scheduler<InteractableScheduleItem> scheduler = null; private Scheduler<InteractableScheduleItem> scheduler = null;
private TranslatableString addoredit;
public Label lbl_tableIndex, lbl_tablePacket, lbl_tableInterval, lbl_tableDest, lbl_tableEdit, lbl_setupPacket, lbl_setupInterval;
public void initialize() { public void initialize() {
scrollpane.widthProperty().addListener(observable -> header.setPrefWidth(scrollpane.getWidth())); scrollpane.widthProperty().addListener(observable -> header.setPrefWidth(scrollpane.getWidth()));
@ -56,10 +63,6 @@ public class SchedulerController extends SubForm {
txt_packet.textProperty().addListener(event -> Platform.runLater(this::updateUI)); txt_packet.textProperty().addListener(event -> Platform.runLater(this::updateUI));
txt_delay.textProperty().addListener(event -> Platform.runLater(this::updateUI)); txt_delay.textProperty().addListener(event -> Platform.runLater(this::updateUI));
btn_clear.setTooltip(new Tooltip("Clear all items"));
btn_save.setTooltip(new Tooltip("Save to file"));
btn_load.setTooltip(new Tooltip("Load from file"));
updateUI(); updateUI();
//register hotkeys //register hotkeys
@ -76,6 +79,8 @@ public class SchedulerController extends SubForm {
provider.register(KeyStroke.getKeyStroke("control shift " + ii[0]), hotKey -> switchPauseHotkey(ii[0])); provider.register(KeyStroke.getKeyStroke("control shift " + ii[0]), hotKey -> switchPauseHotkey(ii[0]));
} }
System.setErr(err); System.setErr(err);
initLanguageBinding();
} }
@Override @Override
@ -157,7 +162,7 @@ public class SchedulerController extends SubForm {
rb_outgoing.setSelected(newItem.getDestinationProperty().get() == HMessage.Direction.TOSERVER); rb_outgoing.setSelected(newItem.getDestinationProperty().get() == HMessage.Direction.TOSERVER);
isBeingEdited = newItem; isBeingEdited = newItem;
btn_addoredit.setText("Edit"); addoredit.setKey(0, "tab.scheduler.button.edit");
updateUI(); updateUI();
newItem.onIsBeingUpdatedTrigger(); newItem.onIsBeingUpdatedTrigger();
} }
@ -175,7 +180,7 @@ public class SchedulerController extends SubForm {
rb_incoming.setSelected(true); rb_incoming.setSelected(true);
rb_outgoing.setSelected(false); rb_outgoing.setSelected(false);
btn_addoredit.setText("Add"); addoredit.setKey(0, "tab.scheduler.button.add");
updateUI(); updateUI();
} }
@ -203,9 +208,9 @@ public class SchedulerController extends SubForm {
//Set extension filter //Set extension filter
FileChooser.ExtensionFilter extFilter = FileChooser.ExtensionFilter extFilter =
new FileChooser.ExtensionFilter("SCHED files (*.sched)", "*.sched"); new FileChooser.ExtensionFilter(LanguageBundle.get("tab.scheduler.filetype"), "*.sched");
fileChooser.getExtensionFilters().add(extFilter); fileChooser.getExtensionFilters().add(extFilter);
fileChooser.setTitle("Save Schedule File"); fileChooser.setTitle(LanguageBundle.get("tab.scheduler.button.save.windowtitle"));
//Show save file dialog //Show save file dialog
File file = fileChooser.showSaveDialog(parentController.getStage()); File file = fileChooser.showSaveDialog(parentController.getStage());
@ -234,9 +239,9 @@ public class SchedulerController extends SubForm {
List<InteractableScheduleItem> list = new ArrayList<>(); List<InteractableScheduleItem> list = new ArrayList<>();
FileChooser fileChooser = new FileChooser(); FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Load Schedule File"); fileChooser.setTitle(LanguageBundle.get("tab.scheduler.button.load.windowtitle"));
fileChooser.getExtensionFilters().addAll( fileChooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter("Schedule Files", "*.sched")); new FileChooser.ExtensionFilter(LanguageBundle.get("tab.scheduler.filetype"), "*.sched"));
File selectedFile = fileChooser.showOpenDialog(parentController.getStage()); File selectedFile = fileChooser.showOpenDialog(parentController.getStage());
if (selectedFile != null) { if (selectedFile != null) {
@ -262,4 +267,35 @@ public class SchedulerController extends SubForm {
load(list); load(list);
} }
private void initLanguageBinding() {
addoredit = new TranslatableString("%s", "tab.scheduler.button.add");
btn_addoredit.textProperty().bind(addoredit);
btn_clear.textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.clear"));
btn_clear.setTooltip(new Tooltip());
btn_clear.getTooltip().textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.clear.tooltip"));
btn_save.textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.save"));
btn_save.setTooltip(new Tooltip());
btn_save.getTooltip().textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.save.tooltip"));
btn_load.textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.load"));
btn_load.setTooltip(new Tooltip());
btn_load.getTooltip().textProperty().bind(new TranslatableString("%s", "tab.scheduler.button.load.tooltip"));
lbl_tableIndex.textProperty().bind(new TranslatableString("%s", "tab.scheduler.table.index"));
lbl_tablePacket.textProperty().bind(new TranslatableString("%s", "tab.scheduler.table.packet"));
lbl_tableInterval.textProperty().bind(new TranslatableString("%s", "tab.scheduler.table.interval"));
lbl_tableDest.textProperty().bind(new TranslatableString("%s", "tab.scheduler.table.destination"));
lbl_tableEdit.textProperty().bind(new TranslatableString("%s", "tab.scheduler.table.edit"));
lbl_setupPacket.textProperty().bind(new TranslatableString("%s:", "tab.scheduler.setup.packet"));
lbl_setupInterval.textProperty().bind(new TranslatableString("%s:", "tab.scheduler.setup.interval"));
rb_incoming.textProperty().bind(new TranslatableString("%s", "tab.scheduler.direction.in"));
rb_outgoing.textProperty().bind(new TranslatableString("%s", "tab.scheduler.direction.out"));
cbx_hotkeys.textProperty().bind(new TranslatableString("%s", "tab.scheduler.hotkeys"));
}
} }

View File

@ -1,8 +1,10 @@
package gearth.ui.subforms.tools; package gearth.ui.subforms.tools;
import gearth.services.packet_info.PacketInfoManager; import gearth.services.packet_info.PacketInfoManager;
import gearth.ui.translations.TranslatableString;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea; import javafx.scene.control.TextArea;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCode;
@ -27,6 +29,8 @@ public class ToolsController extends SubForm {
public Button btn_toPacket; public Button btn_toPacket;
public TextArea txt_exprArea; public TextArea txt_exprArea;
public Label lbl_integer, lbl_uShort, lbl_encodingDecoding, lbl_packetToExpression;
//TODO: toExpression() without bytelength limit for this use only //TODO: toExpression() without bytelength limit for this use only
public void initialize() { public void initialize() {
@ -115,6 +119,7 @@ public class ToolsController extends SubForm {
} }
}); });
initLanguageBinding();
} }
public void btnEncodeInt_clicked(ActionEvent actionEvent) { public void btnEncodeInt_clicked(ActionEvent actionEvent) {
@ -156,4 +161,20 @@ public class ToolsController extends SubForm {
public void btn_toPacket_clicked(ActionEvent actionEvent) { public void btn_toPacket_clicked(ActionEvent actionEvent) {
txt_packetArea.setText(parseToPacket(txt_exprArea.getText()).toString()); txt_packetArea.setText(parseToPacket(txt_exprArea.getText()).toString());
} }
private void initLanguageBinding() {
lbl_integer.textProperty().bind(new TranslatableString("%s:", "tab.tools.type.integer"));
lbl_uShort.textProperty().bind(new TranslatableString("%s:", "tab.tools.type.ushort"));
TranslatableString encode = new TranslatableString("%s", "tab.tools.button.encode");
TranslatableString decode = new TranslatableString("%s", "tab.tools.button.decode");
btnEncodeInt.textProperty().bind(encode);
btnEncodeUShort.textProperty().bind(encode);
btnDecodeInt.textProperty().bind(decode);
btnDecodeUshort.textProperty().bind(decode);
lbl_encodingDecoding.textProperty().bind(new TranslatableString("%s/%s", "tab.tools.encoding", "tab.tools.decoding"));
lbl_packetToExpression.textProperty().bind(new TranslatableString("%s <-> %s", "tab.tools.packet", "tab.tools.expression"));
}
} }

View File

@ -2,16 +2,18 @@ package gearth.ui.titlebar;
import gearth.GEarth; import gearth.GEarth;
import gearth.ui.themes.ThemeFactory; import gearth.ui.themes.ThemeFactory;
import gearth.ui.translations.Language;
import gearth.ui.translations.LanguageBundle;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.InvalidationListener; import javafx.beans.InvalidationListener;
import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Alert; import javafx.scene.control.*;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Label;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.input.ContextMenuEvent;
import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
@ -19,6 +21,7 @@ import javafx.scene.layout.VBox;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.stage.StageStyle; import javafx.stage.StageStyle;
import javafx.stage.WindowEvent;
import java.io.IOException; import java.io.IOException;
import java.util.Optional; import java.util.Optional;
@ -30,6 +33,7 @@ public class TitleBarController {
public ImageView titleIcon; public ImageView titleIcon;
public ImageView themeBtn; public ImageView themeBtn;
public ImageView minimizeBtn; public ImageView minimizeBtn;
public MenuButton languagePicker;
private Stage stage; private Stage stage;
private TitleBarConfig config; private TitleBarConfig config;
@ -83,6 +87,9 @@ public class TitleBarController {
stage.titleProperty().addListener((i) -> controller.setTitle(stage.getTitle())); stage.titleProperty().addListener((i) -> controller.setTitle(stage.getTitle()));
controller.setTitle(stage.getTitle()); controller.setTitle(stage.getTitle());
controller.languagePicker.getItems().addAll(Language.getMenuItems());
controller.languagePicker.setGraphic(LanguageBundle.getLanguage().getIcon());
stage.getIcons().addListener((InvalidationListener) observable -> controller.updateIcon()); stage.getIcons().addListener((InvalidationListener) observable -> controller.updateIcon());
controller.updateIcon(); controller.updateIcon();
@ -96,11 +103,16 @@ public class TitleBarController {
if (!config.displayThemePicker()) { if (!config.displayThemePicker()) {
((GridPane) controller.themeBtn.getParent()).getChildren().remove(controller.themeBtn); ((GridPane) controller.themeBtn.getParent()).getChildren().remove(controller.themeBtn);
((GridPane) controller.languagePicker.getParent()).getChildren().remove(controller.languagePicker);
} }
}); });
return controller; return controller;
} }
private static void initLanguagePicker() {
}
public void updateIcon() { public void updateIcon() {
Platform.runLater(() -> titleIcon.setImage(stage.getIcons().size() > 0 ? stage.getIcons().get(0) : Platform.runLater(() -> titleIcon.setImage(stage.getIcons().size() > 0 ? stage.getIcons().get(0) :
new Image(GEarth.class.getResourceAsStream( new Image(GEarth.class.getResourceAsStream(
@ -158,5 +170,4 @@ public class TitleBarController {
} }
return Optional.empty(); return Optional.empty();
} }
} }

View File

@ -0,0 +1,82 @@
package gearth.ui.translations;
import javafx.event.ActionEvent;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuButton;
import javafx.scene.control.MenuItem;
import javafx.scene.image.ImageView;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
public enum Language {
ENGLISH ("en"),
DUTCH ("nl"),
FRENCH ("fr"),
GERMAN ("de"),
SPANISH ("es"),
PORTUGUESE ("pt"),
ITALIAN ("it"),
FINNISH ("fi"),
TURKISH ("tr");
public final ResourceBundle messages;
private final String locale;
Language(String locale) {
this.locale = locale;
ResourceBundle resBundle;
try {
InputStream stream = Language.class.getResourceAsStream(String.format("/gearth/ui/translations/messages_%s.properties", locale));
InputStreamReader isr = new InputStreamReader(stream, StandardCharsets.UTF_8);
resBundle = new PropertyResourceBundle(isr);
} catch (Exception e) {
System.out.printf("/gearth/ui/translations/messages_%s.properties%n", locale);
System.out.println("Couldn't load language file: " + locale);
resBundle = null;
}
this.messages = resBundle;
}
public MenuItem asMenuItem() {
MenuItem menuItem = new MenuItem(null, getIcon());
menuItem.setOnAction(this::onSelect);
return menuItem;
}
private void onSelect(ActionEvent actionEvent) {
ContextMenu ctxMenu = ((MenuItem) actionEvent.getSource()).getParentPopup();
((MenuButton) ctxMenu.getOwnerNode()).setGraphic(getIcon());
LanguageBundle.setLanguage(this);
}
public ImageView getIcon() {
ImageView icon = new ImageView();
icon.getStyleClass().addAll("language-icon", locale);
icon.setFitWidth(18);
icon.setFitHeight(18);
return icon;
}
public static MenuItem[] getMenuItems() {
return Arrays.stream(values())
.map(Language::asMenuItem)
.toArray(MenuItem[]::new);
}
public static Language getSystemLanguage() {
String locale = System.getProperty("user.language");
System.out.println(locale);
for (Language l : values())
if (l.locale.equals(locale))
return l;
return ENGLISH;
}
}

View File

@ -0,0 +1,54 @@
package gearth.ui.translations;
import gearth.misc.Cacher;
import gearth.services.internal_extensions.extensionstore.application.GExtensionStoreController;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.ResourceBundle;
import java.util.Set;
public class LanguageBundle extends ResourceBundle {
private static final String LANGUAGE_CACHE_KEY = "language";
private static Language current;
private static final Set<TranslatableString> requireUpdate = new HashSet<>();
static {
try {
current = Language.valueOf((String) Cacher.get(LANGUAGE_CACHE_KEY));
} catch (Exception e) {
current = Language.getSystemLanguage();
Cacher.put(LANGUAGE_CACHE_KEY, current.toString());
}
}
public static void addTranslatableString(TranslatableString translatableString) {
requireUpdate.add(translatableString);
}
@Override
protected Object handleGetObject(String key) {
return current.messages.getObject(key);
}
@Override
public Enumeration<String> getKeys() {
return current.messages.getKeys();
}
public static void setLanguage(Language lang) {
current = lang;
requireUpdate.forEach(TranslatableString::trigger);
GExtensionStoreController.reloadPage();
Cacher.put(LANGUAGE_CACHE_KEY, current.toString());
}
public static Language getLanguage() {
return current;
}
public static String get(String key) {
return current.messages.getString(key);
}
}

View File

@ -0,0 +1,82 @@
package gearth.ui.translations;
import gearth.misc.StringifyAble;
import javafx.beans.value.ObservableValueBase;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class TranslatableString extends ObservableValueBase<String> implements StringifyAble {
private String format;
private String[] keys;
public TranslatableString(String format, String... keys) {
this.format = format;
this.keys = keys;
this.fireValueChangedEvent();
LanguageBundle.addTranslatableString(this);
}
private TranslatableString(String fromString) {
constructFromString(fromString);
}
public String getFormat() {
return format;
}
@Override
public String getValue() {
return String.format(format, Arrays.stream(keys).map(LanguageBundle::get).toArray());
}
public void setKey(int index, String key) {
keys[index] = key;
fireValueChangedEvent();
}
public void setKeys(String... keys) {
this.keys = keys;
fireValueChangedEvent();
}
public void setFormat(String format) {
this.format = format;
fireValueChangedEvent();
}
public void setFormatAndKeys(String format, String... keys) {
this.format = format;
this.keys = keys;
fireValueChangedEvent();
}
protected void trigger() {
fireValueChangedEvent();
}
@Override
public String stringify() {
return new JSONObject()
.put("format", format)
.put("keys", keys)
.toString();
}
@Override
public void constructFromString(String str) {
JSONObject jsonObject = new JSONObject(str);
this.format = jsonObject.getString("format");
this.keys = jsonObject.getJSONArray("keys")
.toList().stream()
.map(k -> (String) k)
.toArray(String[]::new);
}
public static TranslatableString fromString(String str) {
return new TranslatableString(str);
}
}

View File

@ -5,19 +5,19 @@
<?import javafx.scene.input.*?> <?import javafx.scene.input.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<BorderPane fx:id="borderPane" prefHeight="560.0" prefWidth="820.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.services.internal_extensions.uilogger.UiLoggerController"> <BorderPane fx:id="borderPane" prefHeight="560.0" prefWidth="820.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.services.internal_extensions.uilogger.UiLoggerController">
<top> <top>
<MenuBar BorderPane.alignment="CENTER"> <MenuBar BorderPane.alignment="CENTER">
<Menu mnemonicParsing="false" text="Window"> <Menu fx:id="menu_window" mnemonicParsing="false" text="Window">
<items> <items>
<CheckMenuItem fx:id="chkAlwaysOnTop" mnemonicParsing="false" onAction="#toggleAlwaysOnTop" text="Always on top" /> <CheckMenuItem fx:id="chkAlwaysOnTop" mnemonicParsing="false" onAction="#toggleAlwaysOnTop" text="Always on top" />
<Menu mnemonicParsing="false" text="On connect"> <Menu fx:id="menu_window_onConnect" mnemonicParsing="false" text="On connect">
<items> <items>
<CheckMenuItem fx:id="chkOpenOnConnect" mnemonicParsing="false" text="Open window" /> <CheckMenuItem fx:id="chkOpenOnConnect" mnemonicParsing="false" text="Open window" />
<CheckMenuItem fx:id="chkResetOnConnect" mnemonicParsing="false" selected="true" text="Reset packetlogger" /> <CheckMenuItem fx:id="chkResetOnConnect" mnemonicParsing="false" selected="true" text="Reset packetlogger" />
</items> </items>
</Menu> </Menu>
<Menu mnemonicParsing="false" text="On disconnect"> <Menu fx:id="menu_window_onDisconnect" mnemonicParsing="false" text="On disconnect">
<items> <items>
<CheckMenuItem fx:id="chkHideOnDisconnect" mnemonicParsing="false" selected="true" text="Hide window" /> <CheckMenuItem fx:id="chkHideOnDisconnect" mnemonicParsing="false" selected="true" text="Hide window" />
<CheckMenuItem fx:id="chkResetOnDisconnect" mnemonicParsing="false" text="Reset packetlogger" /> <CheckMenuItem fx:id="chkResetOnDisconnect" mnemonicParsing="false" text="Reset packetlogger" />
@ -25,12 +25,12 @@
</Menu> </Menu>
</items> </items>
</Menu> </Menu>
<Menu mnemonicParsing="false" text="View"> <Menu fx:id="menu_view" mnemonicParsing="false" text="View">
<CheckMenuItem fx:id="chkViewIncoming" mnemonicParsing="false" text="View Incoming"> <CheckMenuItem fx:id="chkViewIncoming" mnemonicParsing="false" text="View incoming">
<accelerator> <accelerator>
<KeyCodeCombination alt="UP" code="I" control="DOWN" meta="UP" shift="UP" shortcut="UP" /> <KeyCodeCombination alt="UP" code="I" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
</accelerator></CheckMenuItem> </accelerator></CheckMenuItem>
<CheckMenuItem fx:id="chkViewOutgoing" mnemonicParsing="false" selected="true" text="View Outgoing"> <CheckMenuItem fx:id="chkViewOutgoing" mnemonicParsing="false" selected="true" text="View outgoing">
<accelerator> <accelerator>
<KeyCodeCombination alt="UP" code="O" control="DOWN" meta="UP" shift="UP" shortcut="UP" /> <KeyCodeCombination alt="UP" code="O" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
</accelerator></CheckMenuItem> </accelerator></CheckMenuItem>
@ -38,16 +38,16 @@
<accelerator> <accelerator>
<KeyCodeCombination alt="UP" code="L" control="DOWN" meta="UP" shift="UP" shortcut="UP" /> <KeyCodeCombination alt="UP" code="L" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
</accelerator></CheckMenuItem> </accelerator></CheckMenuItem>
<MenuItem mnemonicParsing="false" onAction="#clearText" text="Clear text"> <MenuItem fx:id="menuItem_clear" mnemonicParsing="false" onAction="#clearText" text="Clear text">
<accelerator> <accelerator>
<KeyCodeCombination alt="UP" code="E" control="DOWN" meta="UP" shift="UP" shortcut="UP" /> <KeyCodeCombination alt="UP" code="E" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
</accelerator></MenuItem> </accelerator></MenuItem>
</Menu> </Menu>
<Menu mnemonicParsing="false" text="Packets"> <Menu fx:id="menu_packets" mnemonicParsing="false" text="Packets">
<items> <items>
<Menu mnemonicParsing="false" text="Display Details"> <Menu fx:id="menu_packets_details" mnemonicParsing="false" text="Display details">
<items> <items>
<Menu mnemonicParsing="false" text="Byte representation"> <Menu fx:id="menu_packets_details_byteRep" mnemonicParsing="false" text="Byte representation">
<items> <items>
<RadioMenuItem fx:id="chkReprLegacy" mnemonicParsing="false" selected="true" text="Legacy"> <RadioMenuItem fx:id="chkReprLegacy" mnemonicParsing="false" selected="true" text="Legacy">
<toggleGroup> <toggleGroup>
@ -59,7 +59,7 @@
<RadioMenuItem fx:id="chkReprNone" mnemonicParsing="false" text="None" toggleGroup="$byterepr" /> <RadioMenuItem fx:id="chkReprNone" mnemonicParsing="false" text="None" toggleGroup="$byterepr" />
</items> </items>
</Menu> </Menu>
<Menu mnemonicParsing="false" text="Message"> <Menu fx:id="menu_packets_details_message" mnemonicParsing="false" text="Message">
<items> <items>
<CheckMenuItem fx:id="chkMessageName" mnemonicParsing="false" selected="true" text="Name" /> <CheckMenuItem fx:id="chkMessageName" mnemonicParsing="false" selected="true" text="Name" />
<CheckMenuItem fx:id="chkMessageHash" mnemonicParsing="false" text="Hash" /> <CheckMenuItem fx:id="chkMessageHash" mnemonicParsing="false" text="Hash" />
@ -70,7 +70,7 @@
<CheckMenuItem fx:id="chkTimestamp" mnemonicParsing="false" text="Timestamp" /> <CheckMenuItem fx:id="chkTimestamp" mnemonicParsing="false" text="Timestamp" />
</items> </items>
</Menu> </Menu>
<Menu mnemonicParsing="false" text="Anti-spam filter"> <Menu fx:id="menu_packets_antiSpam" mnemonicParsing="false" text="Anti-spam filter">
<items> <items>
<RadioMenuItem fx:id="chkAntiSpam_none" mnemonicParsing="false" selected="true" text="None"> <RadioMenuItem fx:id="chkAntiSpam_none" mnemonicParsing="false" selected="true" text="None">
<toggleGroup> <toggleGroup>
@ -84,7 +84,7 @@
</items> </items>
</Menu> </Menu>
<CheckMenuItem fx:id="chkSkipBigPackets" mnemonicParsing="false" selected="true" text="Skip big packets" /> <CheckMenuItem fx:id="chkSkipBigPackets" mnemonicParsing="false" selected="true" text="Skip big packets" />
<MenuItem mnemonicParsing="false" onAction="#exportAll" text="Export all" /> <MenuItem fx:id="menuItem_exportAll" mnemonicParsing="false" onAction="#exportAll" text="Export all" />
</items> </items>
</Menu> </Menu>
</MenuBar> </MenuBar>
@ -94,7 +94,7 @@
<padding> <padding>
<Insets left="10.0" top="1.0" /> <Insets left="10.0" top="1.0" />
</padding> </padding>
<Label fx:id="lblViewIncoming" style="-fx-text-fill: black !important" text="View Incoming: True"> <Label fx:id="lblViewIncoming" style="-fx-text-fill: black !important" text="View incoming: True">
<FlowPane.margin> <FlowPane.margin>
<Insets right="10.0" /> <Insets right="10.0" />
</FlowPane.margin> </FlowPane.margin>
@ -104,7 +104,7 @@
<Insets right="10.0" /> <Insets right="10.0" />
</FlowPane.margin> </FlowPane.margin>
</Label> </Label>
<Label fx:id="lblViewOutgoing" style="-fx-text-fill: black !important" text="View Outgoing: True"> <Label fx:id="lblViewOutgoing" style="-fx-text-fill: black !important" text="View outgoing: True">
<FlowPane.margin> <FlowPane.margin>
<Insets right="10.0" /> <Insets right="10.0" />
</FlowPane.margin> </FlowPane.margin>
@ -114,7 +114,7 @@
<Insets right="10.0" /> <Insets right="10.0" />
</FlowPane.margin> </FlowPane.margin>
</Label> </Label>
<Label fx:id="lblAutoScrolll" layoutX="151.0" layoutY="11.0" style="-fx-text-fill: black !important" text="Autoscroll: True"> <Label fx:id="lblAutoScroll" layoutX="151.0" layoutY="11.0" style="-fx-text-fill: black !important" text="Autoscroll: True">
<FlowPane.margin> <FlowPane.margin>
<Insets right="10.0" /> <Insets right="10.0" />
</FlowPane.margin></Label> </FlowPane.margin></Label>

View File

@ -5,30 +5,31 @@
<!--maxHeight="19.0" minHeight="19.0"--> <!--maxHeight="19.0" minHeight="19.0"-->
<VBox prefWidth="650.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.GEarthController"> <VBox prefWidth="650.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.GEarthController">
<TabPane id="main-tab-pane" fx:id="tabBar" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="295.0" prefWidth="650.0" tabClosingPolicy="UNAVAILABLE"> <TabPane id="main-tab-pane" fx:id="tabBar" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="295.0" prefWidth="650.0" tabClosingPolicy="UNAVAILABLE">
<Tab text="Connection"> <Tab fx:id="tab_Connection" text="Connection">
<text>tab.connection</text>
<fx:include fx:id="connection" source="subforms/connection/Connection.fxml" /> <fx:include fx:id="connection" source="subforms/connection/Connection.fxml" />
</Tab> </Tab>
<Tab fx:id="tab_Logger" text="Logger"> <Tab fx:id="tab_Logger" text="Logger">
<fx:include fx:id="logger" source="subforms/logger/Logger.fxml" /> <fx:include fx:id="logger" source="subforms/logger/Logger.fxml" />
</Tab> </Tab>
<Tab text="Injection"> <Tab fx:id="tab_Injection" text="Injection">
<fx:include fx:id="injection" source="subforms/injection/Injection.fxml" /> <fx:include fx:id="injection" source="subforms/injection/Injection.fxml" />
</Tab> </Tab>
<Tab text="Tools"> <Tab fx:id="tab_Tools" text="Tools">
<fx:include fx:id="tools" source="subforms/tools/Tools.fxml" /> <fx:include fx:id="tools" source="subforms/tools/Tools.fxml" />
</Tab> </Tab>
<Tab text="Scheduler"> <Tab fx:id="tab_Scheduler" text="Scheduler">
<fx:include fx:id="scheduler" source="subforms/scheduler/Scheduler.fxml" /> <fx:include fx:id="scheduler" source="subforms/scheduler/Scheduler.fxml" />
</Tab> </Tab>
<Tab text="Extensions"> <Tab fx:id="tab_Extensions" text="Extensions">
<fx:include fx:id="extensions" source="subforms/extensions/Extensions.fxml" /> <fx:include fx:id="extensions" source="subforms/extensions/Extensions.fxml" />
</Tab> </Tab>
<Tab text="Extra"> <Tab fx:id="tab_Extra" text="Extra">
<fx:include fx:id="extra" source="subforms/extra/Extra.fxml" /> <fx:include fx:id="extra" source="subforms/extra/Extra.fxml" />
</Tab> </Tab>
<Tab text="Info"> <Tab fx:id="tab_Info" text="Info">
<fx:include fx:id="info" source="subforms/info/Info.fxml" /> <fx:include fx:id="info" source="subforms/info/Info.fxml" />
</Tab> </Tab>
</TabPane> </TabPane>

View File

@ -45,7 +45,7 @@
<rowConstraints> <rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<Label text="Port:" GridPane.halignment="CENTER" GridPane.valignment="CENTER" /> <Label fx:id="lblInpPort" text="Port:" GridPane.halignment="CENTER" GridPane.valignment="CENTER" />
<ComboBox fx:id="inpPort" disable="true" editable="true" prefWidth="183.0" GridPane.columnIndex="1"> <ComboBox fx:id="inpPort" disable="true" editable="true" prefWidth="183.0" GridPane.columnIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets right="15.0" /> <Insets right="15.0" />
@ -60,7 +60,7 @@
<rowConstraints> <rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<Label text="Host:" GridPane.halignment="CENTER" GridPane.valignment="CENTER" /> <Label fx:id="lblInpHost" text="Host:" GridPane.halignment="CENTER" GridPane.valignment="CENTER" />
<ComboBox fx:id="inpHost" disable="true" editable="true" GridPane.columnIndex="1"> <ComboBox fx:id="inpHost" disable="true" editable="true" GridPane.columnIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets right="15.0" /> <Insets right="15.0" />
@ -78,13 +78,10 @@
<RowConstraints /> <RowConstraints />
<RowConstraints /> <RowConstraints />
</rowConstraints> </rowConstraints>
<CheckBox fx:id="cbx_autodetect" mnemonicParsing="false" selected="true" text="Auto-detect" textFill="#000000a9" GridPane.columnIndex="1" GridPane.rowIndex="3"> <CheckBox fx:id="cbx_autodetect" mnemonicParsing="false" selected="true" text="Auto-detect" textAlignment="CENTER" textFill="#000000a9" wrapText="true" GridPane.columnIndex="1" GridPane.rowIndex="3">
<GridPane.margin> <GridPane.margin>
<Insets left="-5.0" /> <Insets left="-5.0" />
</GridPane.margin> </GridPane.margin>
<font>
<Font size="12.0" />
</font>
</CheckBox> </CheckBox>
<Button fx:id="btnConnect" alignment="CENTER" maxWidth="1.7976931348623157E308" onAction="#btnConnect_clicked" text="Connect" GridPane.halignment="CENTER" GridPane.rowIndex="3" GridPane.valignment="CENTER"> <Button fx:id="btnConnect" alignment="CENTER" maxWidth="1.7976931348623157E308" onAction="#btnConnect_clicked" text="Connect" GridPane.halignment="CENTER" GridPane.rowIndex="3" GridPane.valignment="CENTER">
<GridPane.margin> <GridPane.margin>
@ -114,7 +111,7 @@
<RowConstraints maxHeight="86.0" minHeight="10.0" prefHeight="40.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="86.0" minHeight="10.0" prefHeight="40.0" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<children> <children>
<Label text="Hotel version:" textFill="#000000cc" /> <Label fx:id="lblHotelVersion" text="Hotel version:" textFill="#000000cc" />
<TextField fx:id="txtfield_hotelversion" editable="false" prefHeight="17.0" prefWidth="285.0" GridPane.rowIndex="1"> <TextField fx:id="txtfield_hotelversion" editable="false" prefHeight="17.0" prefWidth="285.0" GridPane.rowIndex="1">
<opaqueInsets> <opaqueInsets>
<Insets /> <Insets />
@ -140,10 +137,13 @@
<RowConstraints minHeight="20.0" prefHeight="34.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="20.0" prefHeight="34.0" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<children> <children>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Client type:" textFill="#000000cd"> <Label fx:id="lblClient" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="22.0" prefWidth="94.0" text="Client type:" textFill="#000000cd">
<padding> <padding>
<Insets left="12.0" /> <Insets left="8.0" />
</padding> </padding>
<GridPane.margin>
<Insets right="-20.0" />
</GridPane.margin>
</Label> </Label>
<RadioButton fx:id="rd_unity" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Unity" GridPane.columnIndex="3" GridPane.hgrow="ALWAYS" GridPane.vgrow="ALWAYS"> <RadioButton fx:id="rd_unity" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Unity" GridPane.columnIndex="3" GridPane.hgrow="ALWAYS" GridPane.vgrow="ALWAYS">
<toggleGroup> <toggleGroup>
@ -196,7 +196,7 @@
<GridPane.margin> <GridPane.margin>
<Insets bottom="14.0" left="20.0" right="20.0" /> <Insets bottom="14.0" left="20.0" right="20.0" />
</GridPane.margin> </GridPane.margin>
<Label text="Connection state:" textFill="#000000ba" GridPane.valignment="BOTTOM"> <Label fx:id="lblStateHead" text="Connection state:" textFill="#000000ba" GridPane.valignment="BOTTOM">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="2.0" /> <Insets bottom="5.0" left="2.0" />
</GridPane.margin> </GridPane.margin>
@ -225,12 +225,12 @@
<padding> <padding>
<Insets bottom="7.0" top="7.0" /> <Insets bottom="7.0" top="7.0" />
</padding> </padding>
<Label text="Game host:" textFill="#000000cc"> <Label fx:id="lblHost" text="Host:" textFill="#000000cc">
<GridPane.margin> <GridPane.margin>
<Insets left="10.0" /> <Insets left="10.0" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<Label text="Port:" textFill="#000000cc" GridPane.rowIndex="1"> <Label fx:id="lblPort" text="Port:" textFill="#000000cc" GridPane.rowIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets left="10.0" /> <Insets left="10.0" />
</GridPane.margin> </GridPane.margin>

View File

@ -31,11 +31,11 @@
<VBox.margin> <VBox.margin>
<Insets bottom="-2.0" left="-2.0" right="-2.0" top="-2.0" /> <Insets bottom="-2.0" left="-2.0" right="-2.0" top="-2.0" />
</VBox.margin> </VBox.margin>
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Title" /> <Label fx:id="lbl_tableTitle" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Title" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Description" GridPane.columnIndex="1" /> <Label fx:id="lbl_tableDesc" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Description" GridPane.columnIndex="1" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Author" GridPane.columnIndex="2" /> <Label fx:id="lbl_tableAuthor" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Author" GridPane.columnIndex="2" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Version" GridPane.columnIndex="3" /> <Label fx:id="lbl_tableVersion" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Version" GridPane.columnIndex="3" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Edit" GridPane.columnIndex="4" /> <Label fx:id="lbl_tableEdit" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Edit" GridPane.columnIndex="4" />
</GridPane> </GridPane>
</VBox> </VBox>
</ScrollPane> </ScrollPane>
@ -61,13 +61,13 @@
<rowConstraints> <rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<Button fx:id="btn_gpython" disable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#gpythonBtnClicked" text="G-Python shell" GridPane.columnIndex="3" /> <Button fx:id="btn_gpython" disable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#gpythonBtnClicked" text="G-Python Shell" GridPane.columnIndex="3" />
<TextField fx:id="ext_port" editable="false" prefHeight="26.0" prefWidth="157.0" GridPane.columnIndex="1"> <TextField fx:id="ext_port" editable="false" prefHeight="26.0" prefWidth="157.0" GridPane.columnIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets left="-7.0" /> <Insets left="-7.0" />
</GridPane.margin> </GridPane.margin>
</TextField> </TextField>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Port:" textFill="#000000bb"> <Label fx:id="lbl_port" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Port:" textFill="#000000bb">
<GridPane.margin> <GridPane.margin>
<Insets left="3.0" /> <Insets left="3.0" />
</GridPane.margin> </GridPane.margin>

View File

@ -4,7 +4,7 @@
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<GridPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="258.0" prefWidth="650.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.subforms.extra.ExtraController"> <GridPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="258.0" prefWidth="650.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.subforms.extra.ExtraController">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="331.0" minWidth="10.0" prefWidth="318.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="331.0" minWidth="10.0" prefWidth="318.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="390.0" minWidth="10.0" prefWidth="247.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="390.0" minWidth="10.0" prefWidth="247.0" />
@ -16,8 +16,8 @@
<AnchorPane prefHeight="262.0" prefWidth="318.0"> <AnchorPane prefHeight="262.0" prefWidth="318.0">
<children> <children>
<CheckBox fx:id="cbx_alwaysOnTop" layoutX="14.0" layoutY="232.0" mnemonicParsing="false" text="Always on top" /> <CheckBox fx:id="cbx_alwaysOnTop" layoutX="14.0" layoutY="232.0" mnemonicParsing="false" text="Always on top" />
<Hyperlink fx:id="url_troubleshooting" layoutX="223.0" layoutY="232.0" text="Troubleshooting" /> <Hyperlink fx:id="url_troubleshooting" alignment="CENTER_RIGHT" layoutX="170.0" layoutY="232.0" prefWidth="150.0" text="Troubleshooting" />
<Label layoutX="14.0" layoutY="8.0" text="Notepad:" textFill="#000000bd" /> <Label fx:id="lbl_notepad" layoutX="14.0" layoutY="8.0" text="Notepad:" textFill="#000000bd" />
<TextArea fx:id="txtarea_notepad" layoutX="11.0" layoutY="31.0" prefHeight="197.0" prefWidth="312.0" /> <TextArea fx:id="txtarea_notepad" layoutX="11.0" layoutY="31.0" prefHeight="197.0" prefWidth="312.0" />
</children> </children>
</AnchorPane> </AnchorPane>
@ -77,8 +77,8 @@
<RowConstraints maxHeight="29.0" minHeight="29.0" prefHeight="29.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="29.0" minHeight="29.0" prefHeight="29.0" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<children> <children>
<Label text="Proxy IP:" /> <Label fx:id="lbl_proxyIp" text="Proxy IP:" />
<Label text="Proxy port:" GridPane.rowIndex="1" /> <Label fx:id="lbl_proxyPort" text="Proxy port:" GridPane.rowIndex="1" />
<TextField fx:id="txt_socksPort" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" GridPane.columnIndex="1" GridPane.rowIndex="1"> <TextField fx:id="txt_socksPort" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" GridPane.columnIndex="1" GridPane.rowIndex="1">
<opaqueInsets> <opaqueInsets>
<Insets /> <Insets />

View File

@ -20,22 +20,22 @@
<Font size="18.0" /> <Font size="18.0" />
</font> </font>
</Label> </Label>
<Label layoutX="260.0" layoutY="57.0" text="Habbo packet manipulator for Linux, Windows &amp; Mac" 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>
<Font size="14.0" /> <Font size="14.0" />
</font> </font>
</Label> </Label>
<Label layoutX="260.0" layoutY="92.0" text="Created by:" textFill="#000000b2"> <Label fx:id="lbl_createdBy" layoutX="260.0" layoutY="92.0" text="Created by:" textFill="#000000b2">
<font> <font>
<Font name="System Bold" size="14.0" /> <Font name="System Bold" size="14.0" />
</font> </font>
</Label> </Label>
<Label layoutX="344.0" layoutY="92.0" text="sirjonasxx" textFill="#000000b2"> <Label layoutX="363.0" layoutY="92.0" text="sirjonasxx" textFill="#000000b2">
<font> <font>
<Font size="14.0" /> <Font size="14.0" />
</font> </font>
</Label> </Label>
<Label layoutX="260.0" layoutY="124.0" text="Contributors:" textFill="#000000b2"> <Label fx:id="lbl_contrib" layoutX="260.0" layoutY="124.0" text="Contributors:" textFill="#000000b2">
<font> <font>
<Font name="System Bold" size="14.0" /> <Font name="System Bold" size="14.0" />
</font> </font>
@ -75,7 +75,7 @@
<Font size="14.0" /> <Font size="14.0" />
</font> </font>
</Label> </Label>
<Label layoutX="491.0" layoutY="92.0" text="Links:" textFill="#000000b2"> <Label fx:id="lbl_links" layoutX="491.0" layoutY="92.0" text="Links:" textFill="#000000b2">
<font> <font>
<Font name="System Bold" size="14.0" /> <Font name="System Bold" size="14.0" />
</font> </font>
@ -85,7 +85,7 @@
<Hyperlink fx:id="link_g_tanji" layoutX="487.0" layoutY="152.0" text="Github - Tanji" /> <Hyperlink fx:id="link_g_tanji" layoutX="487.0" layoutY="152.0" text="Github - Tanji" />
<Hyperlink fx:id="link_d_gearth" layoutX="487.0" layoutY="172.0" text="Discord - G-Earth" /> <Hyperlink fx:id="link_d_gearth" layoutX="487.0" layoutY="172.0" text="Discord - G-Earth" />
<Hyperlink fx:id="link_g_store" layoutX="487.0" layoutY="212.0" text="G-ExtensionStore" /> <Hyperlink fx:id="link_g_store" layoutX="487.0" layoutY="212.0" text="G-ExtensionStore" />
<Button layoutX="537.0" layoutY="14.0" mnemonicParsing="false" onAction="#donate" prefHeight="20.0" prefWidth="100.0" text="Donate BTC" /> <Button fx:id="btn_donate" layoutX="537.0" layoutY="14.0" mnemonicParsing="false" onAction="#donate" prefHeight="20.0" prefWidth="100.0" text="Donate BTC" />
<Hyperlink fx:id="link_t_gearth" layoutX="487.0" layoutY="192.0" text="Twitter - G-Earth" /> <Hyperlink fx:id="link_t_gearth" layoutX="487.0" layoutY="192.0" text="Twitter - G-Earth" />
<!--<Hyperlink fx:id="link_d_bonnie" layoutX="400.0" layoutY="221.0" text="Discord - BonnieScripting (pt/br)" />--> <!--<Hyperlink fx:id="link_d_bonnie" layoutX="400.0" layoutY="221.0" text="Discord - BonnieScripting (pt/br)" />-->
</children> </children>

View File

@ -5,7 +5,7 @@
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?> <?import javafx.scene.text.*?>
<GridPane prefHeight="258.0" prefWidth="650.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.subforms.injection.InjectionController"> <GridPane prefHeight="258.0" prefWidth="650.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.subforms.injection.InjectionController">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="180.0" minWidth="180.0" prefWidth="180.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="180.0" minWidth="180.0" prefWidth="180.0" />
@ -37,12 +37,12 @@
<GridPane.margin> <GridPane.margin>
<Insets left="13.0" right="13.0" top="4.0" /> <Insets left="13.0" right="13.0" top="4.0" />
</GridPane.margin> </GridPane.margin>
<Text fx:id="lbl_corrruption" styleClass="corrupted-label" strokeType="OUTSIDE" strokeWidth="0.0" text="isCorrupted: True"> <Text fx:id="lbl_corruption" strokeType="OUTSIDE" strokeWidth="0.0" styleClass="corrupted-label" text="isCorrupted: True">
<font> <font>
<Font name="System Italic" size="11.0" /> <Font name="System Italic" size="11.0" />
</font> </font>
</Text> </Text>
<Text fx:id="lbl_pcktInfo" fill="#000000b2" styleClass="pckt-info" nodeOrientation="LEFT_TO_RIGHT" strokeType="OUTSIDE" strokeWidth="0.0" text="header (id:NULL, length:0)" GridPane.columnIndex="1" GridPane.halignment="RIGHT"> <Text fx:id="lbl_pcktInfo" fill="#000000b2" nodeOrientation="LEFT_TO_RIGHT" strokeType="OUTSIDE" strokeWidth="0.0" styleClass="pckt-info" text="header (id=NULL, length=0)" GridPane.columnIndex="1" GridPane.halignment="RIGHT">
<font> <font>
<Font name="System Italic" size="11.0" /> <Font name="System Italic" size="11.0" />
</font> </font>
@ -92,7 +92,7 @@
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<children> <children>
<Hyperlink alignment="CENTER_RIGHT" onAction="#clearHistoryClick" text="Clear" GridPane.columnIndex="1"> <Hyperlink fx:id="lnk_clearHistory" alignment="CENTER_RIGHT" onAction="#clearHistoryClick" text="Clear" GridPane.columnIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets right="6.0" /> <Insets right="6.0" />
</GridPane.margin></Hyperlink> </GridPane.margin></Hyperlink>

View File

@ -31,11 +31,11 @@
<VBox.margin> <VBox.margin>
<Insets bottom="-2.0" left="-2.0" right="-2.0" top="-2.0" /> <Insets bottom="-2.0" left="-2.0" right="-2.0" top="-2.0" />
</VBox.margin> </VBox.margin>
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Index" /> <Label fx:id="lbl_tableIndex" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Index" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Packet" GridPane.columnIndex="1" /> <Label fx:id="lbl_tablePacket" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Packet" GridPane.columnIndex="1" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Interval" GridPane.columnIndex="2" /> <Label fx:id="lbl_tableInterval" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Interval" GridPane.columnIndex="2" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Destination" GridPane.columnIndex="3" /> <Label fx:id="lbl_tableDest" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Destination" GridPane.columnIndex="3" />
<Label alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Edit" GridPane.columnIndex="4" /> <Label fx:id="lbl_tableEdit" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" style="-fx-text-fill: #666666; -fx-background-color: #F7F7F7;" text="Edit" GridPane.columnIndex="4" />
</GridPane> </GridPane>
</VBox> </VBox>
</ScrollPane> </ScrollPane>
@ -67,7 +67,7 @@
<Insets left="-7.0" /> <Insets left="-7.0" />
</GridPane.margin> </GridPane.margin>
</TextField> </TextField>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Packet:" textFill="#000000bb"> <Label fx:id="lbl_setupPacket" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Packet:" textFill="#000000bb">
<GridPane.margin> <GridPane.margin>
<Insets left="3.0" /> <Insets left="3.0" />
</GridPane.margin> </GridPane.margin>
@ -96,7 +96,7 @@
<Insets right="5.0" /> <Insets right="5.0" />
</GridPane.margin> </GridPane.margin>
</TextField> </TextField>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Interval:" textFill="#000000bb"> <Label fx:id="lbl_setupInterval" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Interval:" textFill="#000000bb">
<GridPane.margin> <GridPane.margin>
<Insets left="3.0" /> <Insets left="3.0" />
</GridPane.margin> </GridPane.margin>

View File

@ -46,7 +46,7 @@
<GridPane.margin> <GridPane.margin>
<Insets/> <Insets/>
</GridPane.margin> </GridPane.margin>
<Label alignment="CENTER" text="Integer:"> <Label fx:id="lbl_integer" alignment="CENTER" text="Integer:">
<GridPane.margin> <GridPane.margin>
<Insets left="10.0"/> <Insets left="10.0"/>
</GridPane.margin> </GridPane.margin>
@ -80,7 +80,7 @@
</GridPane.margin> </GridPane.margin>
</TextField> </TextField>
<Label alignment="CENTER" text="Ushort:" GridPane.rowIndex="1"> <Label fx:id="lbl_uShort" alignment="CENTER" text="Ushort:" GridPane.rowIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets left="10.0"/> <Insets left="10.0"/>
</GridPane.margin> </GridPane.margin>
@ -116,7 +116,7 @@
</TextField> </TextField>
</GridPane> </GridPane>
<Label text="Encoding/decoding" textFill="#000000cc"> <Label fx:id="lbl_encodingDecoding" text="Encoding/Decoding" textFill="#000000cc">
<GridPane.margin> <GridPane.margin>
<Insets left="6.0" top="5.0"/> <Insets left="6.0" top="5.0"/>
</GridPane.margin> </GridPane.margin>
@ -179,7 +179,7 @@
</GridPane.margin> </GridPane.margin>
</TextArea> </TextArea>
</GridPane> </GridPane>
<Label text="Packet &lt;-&gt; expression" textFill="#000000cc"> <Label fx:id="lbl_packetToExpression" text="Packet &lt;-&gt; Expression" textFill="#000000cc">
<GridPane.margin> <GridPane.margin>
<Insets left="6.0" top="2.0"/> <Insets left="6.0" top="2.0"/>
</GridPane.margin> </GridPane.margin>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -1007,3 +1007,71 @@ VBox > .split-menu-button.last > .arrow-button {
.scroll-pane { .scroll-pane {
-fx-background-color: white; -fx-background-color: white;
} }
#language-picker {
-fx-background-color: transparent;
-fx-border-color: transparent;
-fx-padding: 0;
}
#language-picker .context-menu {
-fx-padding: 0;
}
#language-picker .context-menu .menu-item {
-fx-padding: 10 0 0 5;
}
#language-picker .label {
-fx-padding: 0 5;
-fx-max-width: 0;
}
#language-picker .arrow,
#language-picker .arrow-button {
-fx-opacity: 0;
-fx-max-width: 0;
-fx-padding: 0;
}
#language-picker .menu-item .label {
-fx-max-width: 0;
-fx-padding: 0;
-fx-label-padding: 0;
}
.language-icon.en {
-fx-image: url("lang/EN.png");
}
.language-icon.nl {
-fx-image: url("lang/NL.png");
}
.language-icon.fr {
-fx-image: url("lang/FR.png");
}
.language-icon.es {
-fx-image: url("lang/ES.png");
}
.language-icon.de {
-fx-image: url("lang/DE.png");
}
.language-icon.tr {
-fx-image: url("lang/TR.png");
}
.language-icon.pt {
-fx-image: url("lang/PT.png");
}
.language-icon.fi {
-fx-image: url("lang/FI.png");
}
.language-icon.it {
-fx-image: url("lang/IT.png");
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@ -1113,3 +1113,71 @@ VBox > .split-menu-button.last > .arrow-button {
-fx-border-radius: 10; -fx-border-radius: 10;
-fx-border-color: rgba(240, 240, 240, 0.8); -fx-border-color: rgba(240, 240, 240, 0.8);
} }
#language-picker {
-fx-background-color: transparent;
-fx-border-color: transparent;
-fx-padding: 0;
}
#language-picker .context-menu {
-fx-padding: 0;
}
#language-picker .context-menu .menu-item {
-fx-padding: 10 0 0 5;
}
#language-picker .label {
-fx-padding: 0;
-fx-max-width: 0;
}
#language-picker .arrow,
#language-picker .arrow-button {
-fx-opacity: 0;
-fx-max-width: 0;
-fx-padding: 0;
}
#language-picker .menu-item .label {
-fx-max-width: 0;
-fx-padding: 0;
-fx-label-padding: 0;
}
.language-icon.en {
-fx-image: url("lang/EN.png");
}
.language-icon.nl {
-fx-image: url("lang/NL.png");
}
.language-icon.fr {
-fx-image: url("lang/FR.png");
}
.language-icon.es {
-fx-image: url("lang/ES.png");
}
.language-icon.de {
-fx-image: url("lang/DE.png");
}
.language-icon.tr {
-fx-image: url("lang/TR.png");
}
.language-icon.pt {
-fx-image: url("lang/PT.png");
}
.language-icon.fi {
-fx-image: url("lang/FI.png");
}
.language-icon.it {
-fx-image: url("lang/IT.png");
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@ -1006,3 +1006,71 @@ VBox > .split-menu-button.last > .arrow-button {
.scroll-pane { .scroll-pane {
-fx-background-color: white; -fx-background-color: white;
} }
#language-picker {
-fx-background-color: transparent;
-fx-border-color: transparent;
-fx-padding: 0;
}
#language-picker .context-menu {
-fx-padding: 0;
}
#language-picker .context-menu .menu-item {
-fx-padding: 10 0 0 5;
}
#language-picker .label {
-fx-padding: 0;
-fx-max-width: 0;
}
#language-picker .arrow,
#language-picker .arrow-button {
-fx-opacity: 0;
-fx-max-width: 0;
-fx-padding: 0;
}
#language-picker .menu-item .label {
-fx-max-width: 0;
-fx-padding: 0;
-fx-label-padding: 0;
}
.language-icon.en {
-fx-image: url("lang/EN.png");
}
.language-icon.nl {
-fx-image: url("lang/NL.png");
}
.language-icon.fr {
-fx-image: url("lang/FR.png");
}
.language-icon.es {
-fx-image: url("lang/ES.png");
}
.language-icon.de {
-fx-image: url("lang/DE.png");
}
.language-icon.tr {
-fx-image: url("lang/TR.png");
}
.language-icon.pt {
-fx-image: url("lang/PT.png");
}
.language-icon.fi {
-fx-image: url("lang/FI.png");
}
.language-icon.it {
-fx-image: url("lang/IT.png");
}

View File

@ -5,7 +5,7 @@
<?import javafx.scene.image.*?> <?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<GridPane id="title-bar" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.titlebar.TitleBarController"> <GridPane id="title-bar" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gearth.ui.titlebar.TitleBarController">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" /> <ColumnConstraints hgrow="SOMETIMES" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" />
@ -15,7 +15,7 @@
<RowConstraints maxHeight="25.0" minHeight="25.0" prefHeight="25.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="25.0" minHeight="25.0" prefHeight="25.0" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<children> <children>
<ImageView fx:id="minimizeBtn" id="minimize-button" fitHeight="25.0" fitWidth="50.0" onMouseClicked="#handleMinimizeAction" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1"> <ImageView id="minimize-button" fx:id="minimizeBtn" fitHeight="25.0" fitWidth="50.0" onMouseClicked="#handleMinimizeAction" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1">
<image> <image>
<Image url="@files/minimizeButton.png" /> <Image url="@files/minimizeButton.png" />
</image> </image>
@ -31,6 +31,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" />
<ColumnConstraints hgrow="ALWAYS" /> <ColumnConstraints hgrow="ALWAYS" />
<ColumnConstraints maxWidth="-Infinity" /> <ColumnConstraints maxWidth="-Infinity" />
<ColumnConstraints maxWidth="-Infinity" />
<ColumnConstraints maxWidth="7.0" minWidth="7.0" prefWidth="7.0" /> <ColumnConstraints maxWidth="7.0" minWidth="7.0" prefWidth="7.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
@ -47,7 +48,11 @@
<Insets left="2.0" /> <Insets left="2.0" />
</padding> </padding>
</Label> </Label>
<ImageView fx:id="themeBtn" id="theme-button" fitHeight="20.0" fitWidth="38.0" onMouseClicked="#toggleTheme" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="3"> <MenuButton id="language-picker" fx:id="languagePicker" alignment="CENTER" contentDisplay="CENTER" graphicTextGap="0.0" mnemonicParsing="false" translateX="-5.0" GridPane.columnIndex="3">
<items>
</items>
</MenuButton>
<ImageView id="theme-button" fx:id="themeBtn" fitHeight="20.0" fitWidth="38.0" onMouseClicked="#toggleTheme" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="4">
<image> <image>
<Image url="@../themes/G-Earth/themeButton.png" /> <Image url="@../themes/G-Earth/themeButton.png" />
</image> </image>

View File

@ -0,0 +1,329 @@
# German (Translated by @MAIK#5094)
! (English messages provided below, require translation to German)
## Tabs
### Tab - Connection
tab.connection=Verbindung
tab.connection.client=Client Typ:
tab.connection.client.flash=Flash / Air
tab.connection.client.unity=Unity
tab.connection.client.nitro=Nitro
tab.connection.version=Hotel Version:
tab.connection.state=Verbindungsstatus:
tab.connection.state.notconnected=Nicht verbunden.
tab.connection.state.connected=Verbunden!
tab.connection.state.waiting=Auf Verbindung warten...
tab.connection.port=Port:
tab.connection.host=Host:
tab.connection.button.connect=Verbinden
tab.connection.button.abort=Abbrechen
tab.connection.autodetect=Automatisch
### Tab - Injection
tab.injection=Injektion
tab.injection.corrupted=Paket fehlerhaft?
tab.injection.corrupted.true=Ja
tab.injection.corrupted.false=Nein
tab.injection.description.header=Header
tab.injection.description.packets=Pakete
tab.injection.description.id=ID
tab.injection.description.length=Länge
tab.injection.send.toserver=Zum Server senden
tab.injection.send.toclient=Zum Client senden
tab.injection.history=Verlauf:
tab.injection.history.clear=Leeren
tab.injection.history.tooltip=Doppelklick, um ein Paket wiederherzustellen
tab.injection.log.packetwithid=Paket mit ID
### Tab - Tools
tab.tools=Tools
tab.tools.button.encode=kodieren
tab.tools.button.decode=dekodieren
tab.tools.type.integer=Ganze Zahl
tab.tools.type.ushort=Kurze Zahl
tab.tools.encoding=Codierung
tab.tools.decoding=Dekodierung
tab.tools.packet=Paket
tab.tools.expression=Bezeichnung
### Tab - Scheduler
tab.scheduler=Ablauf
tab.scheduler.table.index=Nr.
tab.scheduler.table.packet=Paket
tab.scheduler.table.interval=Intervall
tab.scheduler.table.destination=Server/Client
tab.scheduler.table.edit=Aktionen
tab.scheduler.setup.packet=Paket
tab.scheduler.setup.interval=Intervall
tab.scheduler.button.clear=Leeren
tab.scheduler.button.clear.tooltip=Alles löschen
tab.scheduler.button.save=S
tab.scheduler.button.save.tooltip=Datei speichern
tab.scheduler.button.save.windowtitle=Planer Datei speichern
tab.scheduler.button.load=Ö
tab.scheduler.button.load.tooltip=Datei öffnen
tab.scheduler.button.load.windowtitle=Ablauf-Datei öffnen
tab.scheduler.button.add=Hinzufügen
tab.scheduler.button.edit=Ändern
tab.scheduler.direction.in=In
tab.scheduler.direction.out=Out
tab.scheduler.hotkeys=Hotkey nutzen (Strg+Shift+Nr.)
tab.scheduler.filetype=Ablauf-Dateien (*.sched)
### Tab - Extensions
tab.extensions=Erweiterungen
tab.extensions.table.title=Titel
tab.extensions.table.description=Beschreibung
tab.extensions.table.author=Autor(en)
tab.extensions.table.version=Version
tab.extensions.table.edit=Aktionen
tab.extensions.table.edit.delete.tooltip=Verbindung der Erweiterung abbrechen
tab.extensions.table.edit.restart.tooltip=Erweiterung neustarten
tab.extensions.table.edit.uninstall.tooltip=Erweiterung deinstallieren
tab.extensions.table.edit.uninstall.confirmation=Bist du dir sicher, dass du die Erweiterung deinstallieren möchtest?
tab.extensions.port=Port
tab.extensions.button.pythonshell=G-Python Shell
tab.extensions.button.pythonshell.windowtitle=Scripting Shell
tab.extensions.button.install=Installieren
tab.extensions.button.install.windowtitle=Erweiterung installieren
tab.extensions.button.install.filetype=G-Earth Erweiterungen
tab.extensions.button.logs=Verlauf
tab.extensions.button.logs.windowtitle=Verlauf der Erweiterungen
### Tab - Extra
tab.extra=Extras
tab.extra.notepad=Notepad
tab.extra.troubleshooting=Fehlerbehebungen
tab.extra.options.alwaysontop=Immer im Vordergrund
tab.extra.options.staffpermissions=Client-seitige Staff-Berechtigungen
tab.extra.options.pythonscripting=G-Python Scripting
tab.extra.options.pythonscripting.alert.title=G-Python Installation
tab.extra.options.pythonscripting.alert.content=Bevor du G-Python verwendest, installiere die richtigen Pakete mit "pip"!
tab.extra.options.pythonscripting.alert.moreinformation=Weitere Informationen hier:
tab.extra.options.advanced=Erweitert
tab.extra.options.advanced.socks=SOCKS Proxy benutzen
tab.extra.options.advanced.proxy.ip=Proxy IP
tab.extra.options.advanced.proxy.port=Proxy Port
tab.extra.options.advanced.disabledecryption=Entschlüsselung deaktivieren
tab.extra.options.advanced.debugstdout=Debuggen nach stdout
### Tab - Info
tab.info=Info
tab.info.description=Habbo Paket-Manipulator für Linux, Windows & Mac
tab.info.donate=BTC spenden
tab.info.donate.alert.title=Bitcoins spenden
tab.info.donate.alert.content=Öffentliche Bitcoin-Adresse:
tab.info.createdby=Erstellt von
tab.info.links=Links
tab.info.contributors=Mitwirkende
## Alert
### Alert - Confirmation
alert.confirmation.windowtitle=Halt, du musst vorher noch etwas bestätigen
alert.confirmation.button.donotaskagain=Nicht nochmal nachfragen
alert.confirmation.button.remember=Meine Auswahl merken
### Alert - AdminValidator
alert.adminvalidator.content=G-Earth braucht Administrator-Rechte, damit der Flash-Client funktioniert,\n\
bitte starte G-Earth mit Administrator-Rechten neu,\n\
außer du möchtest dich mit dem Unity-Client einloggen.
### Alert - Outdated
alert.outdated.title=Huch, G-Earth ist veraltet!
alert.outdated.content.newversion=Eine neue Version von G-Earth wurde gefunden.
alert.outdated.content.update=Auf neueste Version updaten
### Alert - Invalid connection
alert.invalidconnection.content=Du hast falsche Verbindungsinformationen eingegeben, G-Earth kann dazu keine Verbindung herstellen
### Alert - Nitro root certificate
alert.rootcertificate.title=Root Zertifikat Installation
alert.rootcertificate.remember=Meine Auswahl merken
alert.rootcertificate.content=G-Earth meldet, dass du noch nicht das Root Zertifikat installiert hast.\n\
Dies ist notwendig, damit der Nitro-Client funktioniert. Möchtest du fortfahren?\n\
G-Earth wird dich nach Administrator-Rechten fragen, wenn du fortfährst.
### Alert - Already connected
alert.alreadyconnected.content=G-Earth ist bereits zu diesem Hotel verbunden.\n\
Aufgrund aktuelles Einschränkungen, kannst du nur pro Hotel nur eine Verbindung aufbauen im Raw IP Modus auf Windows.\n\
\n\
Du kannst dies mit SOCKS Proxys umgehen [Extras -> Erweitert -> SOCKS]
### Alert - Something went wrong
alert.somethingwentwrong.title=Oops, etwas ist schiefgelaufen!
alert.somethingwentwrong.content=Oops, da ist wohl etwas schiefgelaufen!\n\
\n\
Geh zu unserer Fehlerbehebungs-Seite, um das Problem zu lösen:
### Alert - Allow extension connection
alert.extconnection.content=Die Erweiterung "%s" versucht eine Verbindung zu G-Earth aufzubauen.\n\
Diese ist aber nicht in G-Earth bekannt, akzeptierst du trotzdem die Verbindung?
### Alert - G-Python error
alert.gpythonerror.title=G-Python Fehler
alert.gpythonerror.content=Etwas ist schiefgelaufen beim Start von G-Python Shell,\n\
bist du sicher, dass du die Installation richtig durchgeführt hast?\n\
\n\
Weitere Informationen hier:
## Internal extension
### Internal extension - G-Erweiterungs-Laden
ext.store.elapsedtime.second.single=Sekunde
ext.store.elapsedtime.second.multiple=Sekunden
ext.store.elapsedtime.minute.single=Minute
ext.store.elapsedtime.minute.multiple=Minuten
ext.store.elapsedtime.hour.single=Stunde
ext.store.elapsedtime.hour.multiple=Stunden
ext.store.elapsedtime.day.single=Tag
ext.store.elapsedtime.day.multiple=Tagen
ext.store.elapsedtime.week.single=Woche
ext.store.elapsedtime.week.multiple=Wochen
ext.store.elapsedtime.month.single=Monat
ext.store.elapsedtime.month.multiple=Monaten
ext.store.elapsedtime.year.single=Jahr
ext.store.elapsedtime.year.multiple=Jahren
ext.store.extension.version=Version
ext.store.extension.rating=Bewertung
ext.store.extension.madeby=von %s
ext.store.extension.lastupdated=letzte Aktualisierung vor %s
ext.store.extension.notinstore=Nicht im G-Erweiterungs-Laden gefunden
ext.store.extension.details.description=Beschreibung
ext.store.extension.details.authors=Autor(en)
ext.store.extension.details.categories=Kategorie(n)
ext.store.extension.details.technical_information=Technische Informationen:
ext.store.extension.details.click_here=Hier klicken
ext.store.extension.details.releases=Release
ext.store.extension.details.language=Sprache
ext.store.extension.details.source=Quelle
ext.store.extension.details.framework=Framework
ext.store.extension.details.systems=System(e)
ext.store.extension.details.clients=Kompatibel mit folgenden Clienten
ext.store.extension.details.screenshot=Screenshot
ext.store.extension.author.reputation=Bewertungen
ext.store.extension.author.releases=Releases
ext.store.extension.warning.requirement=Warnung: Das Framework benötigt --url:additional installations-
! IMPORTANT: the previous line has to end with the --url component like the english version
ext.store.extension.warning.unstable=Warnung: Diese Erweiterung ist als instabil gekennzeichnet!
ext.store.extension.status.await.install=Erweiterung installieren
ext.store.extension.status.await.install.message=Klick auf "OK" und warte, bis die Erweiterung installiert ist
ext.store.extension.status.await.update=Erweiterung aktualisieren
ext.store.extension.status.await.update.message=Klick auf "OK" und warte bis die Erweiterung aktualisiert worden ist
ext.store.extension.status.success.install=Installation beendet
ext.store.extension.status.success.install.message=Die Erweiterung wurde erfolgreich installiert
ext.store.extension.status.success.update=Aktualisierung beendet
ext.store.extension.status.success.update.message=Die Erweiterung wurde erfolgreich aktualisiert
ext.store.extension.status.error.install=Installation fehlgeschlagen
ext.store.extension.status.error.install.message=Die Installation ist mit folgendem Hinweis fehlgeschlagen
ext.store.extension.status.error.update=Aktualisierung fehlgeschlagen
ext.store.extension.status.error.update.message=Die Aktualisierung ist mit folgendem Hinweis fehlgeschlagen
ext.store.button.search=Suche
ext.store.button.install=Installieren
ext.store.button.installed=Installiert
ext.store.button.update=Aktualisieren
ext.store.search.title=Suche
ext.store.search.description=Du bist auf der Suche nach Erweiterungen? Hier kannst du nach Erweiterungen suchen!
ext.store.search.contenttitle=Erweiterung suchen
ext.store.search.bykeyword=Nach Stichwort suchen
ext.store.search.results=Suchergebnisse
ext.store.search.ordering=Sortieren nach:
ext.store.search.ordering.bydate.title=Neuste Releases
ext.store.search.ordering.bydate.description=Diese Erweiterungen sind vor kurzem hinzugefügt worden.
ext.store.search.ordering.bydate.contenttitle=Neuste Releases
ext.store.search.ordering.byrating.title=Beliebte Erweiterungen
ext.store.search.ordering.byrating.description=Diese Erweiterungen kommen gut bei anderen Nutzern an.
ext.store.search.ordering.byrating.contenttitle=Beliebte Erweiterungen
ext.store.search.ordering.byupdate.title=Zuletzt aktualisiert
ext.store.search.ordering.byupdate.description=Diese Erweiterungen sind vor kurzem aktualisiert worden und somit auf dem neusten Stand!
ext.store.search.ordering.byupdate.contenttitle=Vor kurzem aktualisiert
ext.store.search.filter.clients=Client
ext.store.search.filter.categories=Kategorien
ext.store.search.filter.frameworks=Framework
ext.store.search.info.automaticosfiltering=Hinweis: Du filterst automatisch nach dem Betriebssystem, welches du aktuell verwendest.
ext.store.category=Kategorien
ext.store.overview.title=Installierte Erweiterungen
ext.store.overview.description=Hier siehst du alle Erweiterungen, die du bereits installiert hast.
ext.store.overview.contenttitle=Bereits installierte Erweiterungen
ext.store.overview.folder=Ordner öffnen
ext.store.categories.title=Kategorien
ext.store.categories.description=Hier findest du die verschiedesten Kategorien. Schau sie dir mal an, vielleicht findest du eine Erweiterung, die dir helfen kann.
ext.store.categories.contenttitle=Kategorie
ext.store.fail.unzip=Beim Entpacken ist ein Fehler aufgetreten
ext.store.fail.invalidurl=Ungültige Erweiterungs-URL
ext.store.fail.notavailable=Erweiterung nicht verfügbar
ext.store.fail.alreadyexists=Oops, etwas ist beim Erstellen des Erweiterungs-Verzeichnis schiefgelaufen, existiert die Erweiterung bereits?
ext.store.fail.notfound=Erweiterung nicht gefunden
ext.store.fail.uninstall=Oops, etwas ist beim Deinstallieren der Erweiterung schiefgelaufen. Achte darauf, dass du die Erweiterung erst beendest und dann die Deinstallation beginnst.
ext.store.ordering.rating=Bewertungen
ext.store.ordering.alphabetical=Alphabet (A-Z)
ext.store.ordering.lastupdated=Zuletzt aktualisiert
ext.store.ordering.newreleases=Neuste Release
### Internal extension - Logger
ext.logger.menu.window=Fenster
ext.logger.menu.window.alwaysontop=Immer im Vordergrund
ext.logger.menu.window.onconnect=Beim verbinden ...
ext.logger.menu.window.onconnect.openwindow=Fenster öffnen
ext.logger.menu.window.onconnect.reset=Paketlogger reseten
ext.logger.menu.window.ondisconnect=Beim beenden ...
ext.logger.menu.window.ondisconnect.hidewindow=Fenster verstecken
ext.logger.menu.window.ondisconnect.reset=Paketlogger reseten
ext.logger.menu.view=Ein-/Ausblenden
ext.logger.menu.view.incoming=Incoming (ankommende) Pakete anzeigen
ext.logger.menu.view.outgoing=Outgoing (weggehende) Pakete anzeigen
ext.logger.menu.view.autoscroll=Automatisch scrollen
ext.logger.menu.view.cleartext=Inhalt leeren
ext.logger.menu.packets=Pakete
ext.logger.menu.packets.displaydetails=Details anzeigen
ext.logger.menu.packets.displaydetails.byterep=Byte-Darstellung
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
ext.logger.menu.packets.displaydetails.byterep.none=Keine
ext.logger.menu.packets.displaydetails.message=Message
ext.logger.menu.packets.displaydetails.message.name=Name
ext.logger.menu.packets.displaydetails.message.hash=Hash
ext.logger.menu.packets.displaydetails.message.id=ID
ext.logger.menu.packets.displaydetails.structure=Structure
ext.logger.menu.packets.displaydetails.timestamp=Timestamp
ext.logger.menu.packets.antispam=Anti-Spam Filter
ext.logger.menu.packets.antispam.none=Keiner
ext.logger.menu.packets.antispam.low=Gering
ext.logger.menu.packets.antispam.med=Medium
ext.logger.menu.packets.antispam.high=Hoch
ext.logger.menu.packets.antispam.ultra=Sehr hoch
ext.logger.menu.packets.skipbig=Große Pakete überspringen
ext.logger.menu.packets.exportall=Alle Pakete exportieren
ext.logger.menu.packets.exportall.windowtitle=Pakete speichern
ext.logger.menu.packets.exportall.filetype=.TXT Dateien
ext.logger.state.packetinfo=Paket-Info
ext.logger.state.filtered=Gefiltert
ext.logger.element.timestamp=Zeitstempel
ext.logger.element.blocked=Blockiert
ext.logger.element.replaced=Ersetzt
ext.logger.element.direction.outgoing=Outgoing (weggehen)
ext.logger.element.direction.incoming=Incoming (ankommen)
ext.logger.element.skipped=Paket übersprungen
ext.logger.state.true=Ja
ext.logger.state.false=Nein

View File

@ -0,0 +1,325 @@
# English (Original)
## Tabs
### Tab - Connection
tab.connection=Connection
tab.connection.client=Client type:
tab.connection.client.flash=Flash / Air
tab.connection.client.unity=Unity
tab.connection.client.nitro=Nitro
tab.connection.version=Hotel version:
tab.connection.state=Connection state:
tab.connection.state.notconnected=Not connected
tab.connection.state.connected=Connected
tab.connection.state.waiting=Waiting for connection
tab.connection.port=Port:
tab.connection.host=Host:
tab.connection.button.connect=Connect
tab.connection.button.abort=Abort
tab.connection.autodetect=Auto-detect
### Tab - Injection
tab.injection=Injection
tab.injection.corrupted=isCorrupted
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description.header=header
tab.injection.description.packets=packets
tab.injection.description.id=id
tab.injection.description.length=length
tab.injection.send.toserver=Send to server
tab.injection.send.toclient=Send to client
tab.injection.history=History:
tab.injection.history.clear=Clear
tab.injection.history.tooltip=Double click a packet to restore it
tab.injection.log.packetwithid=Packet with id
### Tab - Tools
tab.tools=Tools
tab.tools.button.encode=Encode
tab.tools.button.decode=Decode
tab.tools.type.integer=Integer
tab.tools.type.ushort=Ushort
tab.tools.encoding=Encoding
tab.tools.decoding=Decoding
tab.tools.packet=Packet
tab.tools.expression=Expression
### Tab - Scheduler
tab.scheduler=Scheduler
tab.scheduler.table.index=Index
tab.scheduler.table.packet=Packet
tab.scheduler.table.interval=Interval
tab.scheduler.table.destination=Destination
tab.scheduler.table.edit=Edit
tab.scheduler.setup.packet=Packet
tab.scheduler.setup.interval=Interval
tab.scheduler.button.clear=Clear
tab.scheduler.button.clear.tooltip=Clear all items
tab.scheduler.button.save=S
tab.scheduler.button.save.tooltip=Save to file
tab.scheduler.button.save.windowtitle=Save Schedule File
tab.scheduler.button.load=L
tab.scheduler.button.load.tooltip=Load from file
tab.scheduler.button.load.windowtitle=Load Schedule File
tab.scheduler.button.add=Add
tab.scheduler.button.edit=Edit
tab.scheduler.direction.in=In
tab.scheduler.direction.out=Out
tab.scheduler.hotkeys=Enable hotkeys (Ctrl+Shift+Index)
tab.scheduler.filetype=Schedule Files (*.sched)
### Tab - Extensions
tab.extensions=Extensions
tab.extensions.table.title=Title
tab.extensions.table.description=Description
tab.extensions.table.author=Author
tab.extensions.table.version=Version
tab.extensions.table.edit=Edit
tab.extensions.table.edit.delete.tooltip=Close connection with this extension
tab.extensions.table.edit.restart.tooltip=Restart this extension
tab.extensions.table.edit.uninstall.tooltip=Uninstall this extension
tab.extensions.table.edit.uninstall.confirmation=Are you sure want to uninstall this extension?
tab.extensions.port=Port
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Install
tab.extensions.button.install.windowtitle=Install extension
tab.extensions.button.install.filetype=G-Earth extensions
tab.extensions.button.logs=View logs
tab.extensions.button.logs.windowtitle=Extension Console
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Notepad
tab.extra.troubleshooting=Troubleshooting
tab.extra.options.alwaysontop=Always on top
tab.extra.options.staffpermissions=Client-side staff permissions
tab.extra.options.pythonscripting=G-Python scripting
tab.extra.options.pythonscripting.alert.title=G-Python installation
tab.extra.options.pythonscripting.alert.content=Before using G-Python, install the right packages using pip!
tab.extra.options.pythonscripting.alert.moreinformation=More information here:
tab.extra.options.advanced=Advanced
tab.extra.options.advanced.socks=Use SOCKS proxy
tab.extra.options.advanced.proxy.ip=Proxy IP
tab.extra.options.advanced.proxy.port=Proxy port
tab.extra.options.advanced.disabledecryption=Disable decryption
tab.extra.options.advanced.debugstdout=Debug to stdout
### Tab - Info
tab.info=Info
tab.info.description=Habbo packet manipulator for Linux, Windows & Mac
tab.info.donate=Donate BTC
tab.info.donate.alert.title=Donate Bitcoins
tab.info.donate.alert.content=Bitcoin public address:
tab.info.createdby=Created by
tab.info.links=Links
tab.info.contributors=Contributors
## Alert
### Alert - Confirmation
alert.confirmation.windowtitle=Confirmation Dialog
alert.confirmation.button.donotaskagain=Do not ask again
alert.confirmation.button.remember=Remember my choice
### Alert - AdminValidator
alert.adminvalidator.content=G-Earth needs admin privileges in order to work on Flash,\n\
please restart G-Earth with admin permissions unless\n\
you're using Unity
### Alert - Outdated
alert.outdated.title=G-Earth is outdated!
alert.outdated.content.newversion=A new version of G-Earth has been found
alert.outdated.content.update=Update to the latest version
### Alert - Invalid connection
alert.invalidconnection.content=You entered invalid connection information, G-Earth could not connect
### Alert - Nitro root certificate
alert.rootcertificate.title=Root certificate installation
alert.rootcertificate.remember=Remember my choice
alert.rootcertificate.content=G-Earth detected that you do not have the root certificate authority installed.\n\
This is required for Nitro to work, do you want to continue?\n\
G-Earth will ask you for Administrator permission if you do so.
### Alert - Already connected
alert.alreadyconnected.content=G-Earth is already connected to this hotel.\n\
Due to current limitations you can only connect one session per hotel to G-Earth in Raw IP mode on Windows.\n\
\n\
You can bypass this by using a SOCKS proxy [Extra -> Advanced -> SOCKS]
### Alert - Something went wrong
alert.somethingwentwrong.title=Something went wrong!
alert.somethingwentwrong.content=Something went wrong!\n\
\n\
Head over to our Troubleshooting page to solve the problem:
### Alert - Allow extension connection
alert.extconnection.content=Extension "%s" tries to connect but isn't known to G-Earth,\n\
accept this connection?
### Alert - G-Python error
alert.gpythonerror.title=G-Python error
alert.gpythonerror.content=Something went wrong launching the G-Python shell,\n\
are you sure you followed the installation guide correctly?\n\
\n\
More information here:
## Internal extension
### Internal extension - G-ExtensionStore
ext.store.elapsedtime.second.single=second
ext.store.elapsedtime.second.multiple=seconds
ext.store.elapsedtime.minute.single=minute
ext.store.elapsedtime.minute.multiple=minutes
ext.store.elapsedtime.hour.single=hour
ext.store.elapsedtime.hour.multiple=hours
ext.store.elapsedtime.day.single=day
ext.store.elapsedtime.day.multiple=days
ext.store.elapsedtime.week.single=week
ext.store.elapsedtime.week.multiple=weeks
ext.store.elapsedtime.month.single=month
ext.store.elapsedtime.month.multiple=months
ext.store.elapsedtime.year.single=year
ext.store.elapsedtime.year.multiple=years
ext.store.extension.version=Version
ext.store.extension.rating=Rating
ext.store.extension.madeby=By %s
ext.store.extension.lastupdated=last updated %s ago
ext.store.extension.notinstore=Not found in G-ExtensionStore
ext.store.extension.details.description=Description
ext.store.extension.details.authors=Author(s)
ext.store.extension.details.categories=Categories
ext.store.extension.details.technical_information=Technical information
ext.store.extension.details.click_here=Click here
ext.store.extension.details.releases=Releases
ext.store.extension.details.language=Language
ext.store.extension.details.source=Source
ext.store.extension.details.framework=Framework
ext.store.extension.details.systems=Systems
ext.store.extension.details.clients=Compatible clients
ext.store.extension.details.screenshot=Screenshot
ext.store.extension.author.reputation=reputation
ext.store.extension.author.releases=releases
ext.store.extension.warning.requirement=Warning: the framework requires --url:additional installations-
! IMPORTANT: the previous line has to end with the --url component like the english version
ext.store.extension.warning.unstable=Warning: this extension has been marked unstable!
ext.store.extension.status.await.install=Install extension
ext.store.extension.status.await.install.message=Press "OK" and wait while the extension is begin installed
ext.store.extension.status.await.update=Update extension
ext.store.extension.status.await.update.message=Press "OK" and wait while the extension is begin updated
ext.store.extension.status.success.install=Install completed
ext.store.extension.status.success.install.message=Extension installation completed successfully
ext.store.extension.status.success.update=Update completed
ext.store.extension.status.success.update.message=Extension update completed successfully
ext.store.extension.status.error.install=Install failed
ext.store.extension.status.error.install.message=Installation failed with the following message
ext.store.extension.status.error.update=Update failed
ext.store.extension.status.error.update.message=Update failed with the following message
ext.store.button.search=Search
ext.store.button.install=Install
ext.store.button.installed=Installed
ext.store.button.update=Update
ext.store.search.title=Search
ext.store.search.description=Find the extension that fits your needs
ext.store.search.contenttitle=Search extensions
ext.store.search.bykeyword=Search by keyword
ext.store.search.results=Search results
ext.store.search.ordering=Extensions ordering
ext.store.search.ordering.bydate.title=New Releases
ext.store.search.ordering.bydate.description=Extensions that were recently added to the G-ExtensionStore
ext.store.search.ordering.bydate.contenttitle=New Releases
ext.store.search.ordering.byrating.title=Popular Extensions
ext.store.search.ordering.byrating.description=Extensions sorted by rating
ext.store.search.ordering.byrating.contenttitle=Popular Extensions
ext.store.search.ordering.byupdate.title=Recently Updated
ext.store.search.ordering.byupdate.description=Extensions that were recently updated
ext.store.search.ordering.byupdate.contenttitle=Recently Updated
ext.store.search.filter.clients=Clients
ext.store.search.filter.categories=Categories
ext.store.search.filter.frameworks=Frameworks
ext.store.search.info.automaticosfiltering=Info: you are automatically filtering on the OS you use
ext.store.category=Category
ext.store.overview.title=Installed Extensions
ext.store.overview.description=Extensions that are already installed into G-Earth
ext.store.overview.contenttitle=Installed extensions
ext.store.overview.folder=Open folder
ext.store.categories.title=Categories
ext.store.categories.description=Explore the different kinds of extensions G-Earth has to offer
ext.store.categories.contenttitle=Categories
ext.store.fail.unzip=Error while unzipping
ext.store.fail.invalidurl=Invalid extension URL
ext.store.fail.notavailable=Extension not available in repository
ext.store.fail.alreadyexists=Something went wrong creating the extension directory, does the extension already exist?
ext.store.fail.notfound=Extension wasn't found
ext.store.fail.uninstall=Something went wrong with uninstalling the extension, make sure to disconnect the extension if it was still running.
ext.store.ordering.rating=Rating
ext.store.ordering.alphabetical=Alphabetical
ext.store.ordering.lastupdated=Last updated
ext.store.ordering.newreleases=New releases
### Internal extension - Logger
ext.logger.menu.window=Window
ext.logger.menu.window.alwaysontop=Always on top
ext.logger.menu.window.onconnect=On connect
ext.logger.menu.window.onconnect.openwindow=Open window
ext.logger.menu.window.onconnect.reset=Reset packetlogger
ext.logger.menu.window.ondisconnect=On disconnect
ext.logger.menu.window.ondisconnect.hidewindow=Hide window
ext.logger.menu.window.ondisconnect.reset=Reset packetlogger
ext.logger.menu.view=View
ext.logger.menu.view.incoming=View incoming
ext.logger.menu.view.outgoing=View outgoing
ext.logger.menu.view.autoscroll=Autoscroll
ext.logger.menu.view.cleartext=Clear text
ext.logger.menu.packets=Packets
ext.logger.menu.packets.displaydetails=Display details
ext.logger.menu.packets.displaydetails.byterep=Byte representation
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
ext.logger.menu.packets.displaydetails.byterep.none=None
ext.logger.menu.packets.displaydetails.message=Message
ext.logger.menu.packets.displaydetails.message.name=Name
ext.logger.menu.packets.displaydetails.message.hash=Hash
ext.logger.menu.packets.displaydetails.message.id=Id
ext.logger.menu.packets.displaydetails.structure=Structure
ext.logger.menu.packets.displaydetails.timestamp=Timestamp
ext.logger.menu.packets.antispam=Anti-spam filter
ext.logger.menu.packets.antispam.none=None
ext.logger.menu.packets.antispam.low=Low
ext.logger.menu.packets.antispam.med=Medium
ext.logger.menu.packets.antispam.high=High
ext.logger.menu.packets.antispam.ultra=Ultra
ext.logger.menu.packets.skipbig=Skip big packets
ext.logger.menu.packets.exportall=Export all
ext.logger.menu.packets.exportall.windowtitle=Save Packets
ext.logger.menu.packets.exportall.filetype=TXT files
ext.logger.state.packetinfo=Packet info
ext.logger.state.filtered=Filtered
ext.logger.element.timestamp=timestamp
ext.logger.element.blocked=Blocked
ext.logger.element.replaced=Replaced
ext.logger.element.direction.outgoing=Outgoing
ext.logger.element.direction.incoming=Incoming
ext.logger.element.skipped=packet skipped
ext.logger.state.true=True
ext.logger.state.false=False

View File

@ -0,0 +1,325 @@
# Spanish (Translated by denio4321)
## Tabs
### Tab - Connection
tab.connection=Conexión
tab.connection.client=Tipo de cliente:
tab.connection.client.flash=Flash / Air
tab.connection.client.unity=Unity
tab.connection.client.nitro=Nitro
tab.connection.version=Versión del Hotel:
tab.connection.state=Estado de la conexión:
tab.connection.state.notconnected=No conectado
tab.connection.state.connected=Conectado
tab.connection.state.waiting=Esperando para la conexión
tab.connection.port=Puerto:
tab.connection.host=Host:
tab.connection.button.connect=Conectar
tab.connection.button.abort=Abortar
tab.connection.autodetect=Auto-Detección
### Tab - Injection
tab.injection=Inyectar
tab.injection.corrupted=isCorrupted
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description.header=header
tab.injection.description.packets=packets
tab.injection.description.id=id
tab.injection.description.length=longitud
tab.injection.send.toserver=Enviar al servidor
tab.injection.send.toclient=Enviar a cliente
tab.injection.history=Historial
tab.injection.history.clear=Borrar
tab.injection.history.tooltip=Doble click para restaurar un paquete.
tab.injection.log.packetwithid=Paquete con id
### Tab - Tools
tab.tools=Herramientas
tab.tools.button.encode=Codificar
tab.tools.button.decode=Decodificar
tab.tools.type.integer=Integer
tab.tools.type.ushort=Ushort
tab.tools.encoding=Encoding
tab.tools.decoding=Decoding
tab.tools.packet=Packet
tab.tools.expression=Expression
### Tab - Scheduler
tab.scheduler=Planificador
tab.scheduler.table.index=Index
tab.scheduler.table.packet=Packet
tab.scheduler.table.interval=Interval
tab.scheduler.table.destination=Destinación
tab.scheduler.table.edit=Editar
tab.scheduler.setup.packet=Packet
tab.scheduler.setup.interval=Interval
tab.scheduler.button.clear=Borrar
tab.scheduler.button.clear.tooltip=Borrar todos los items
tab.scheduler.button.save=S
tab.scheduler.button.save.tooltip=Guardar a un archivo
tab.scheduler.button.save.windowtitle=Guardar Planificador a un archivo
tab.scheduler.button.load=L
tab.scheduler.button.load.tooltip=Cargar de un archivo
tab.scheduler.button.load.windowtitle=Cargar archivo Planificador
tab.scheduler.button.add=Añadir
tab.scheduler.button.edit=Editar
tab.scheduler.direction.in=In
tab.scheduler.direction.out=Out
tab.scheduler.hotkeys=Activar Atajos (Ctrl+Shift+Index)
tab.scheduler.filetype=Archivos Planificador (*.sched)
### Tab - Extensions
tab.extensions=Extensiones
tab.extensions.table.title=Titulo
tab.extensions.table.description=Descripción
tab.extensions.table.author=Autor
tab.extensions.table.version=Versión
tab.extensions.table.edit=Editar
tab.extensions.table.edit.delete.tooltip=Cerrar la conexión de esta extensión
tab.extensions.table.edit.restart.tooltip=Reiniciar extensión
tab.extensions.table.edit.uninstall.tooltip=Desinstalar esta extensión
tab.extensions.table.edit.uninstall.confirmation=¿Seguro que quieres desinstalar esta extensión?
tab.extensions.port=Port
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Instalar
tab.extensions.button.install.windowtitle=Instalar extensión
tab.extensions.button.install.filetype=Extensiones de G-Earth
tab.extensions.button.logs=Ver logs
tab.extensions.button.logs.windowtitle=Consola de extensión
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Notepad
tab.extra.troubleshooting=Ayuda
tab.extra.options.alwaysontop=Mostrar siempre arriba
tab.extra.options.staffpermissions=Permisos Staff en cliente
tab.extra.options.pythonscripting=G-Python scripting
tab.extra.options.pythonscripting.alert.title=Instalación de G-Python
tab.extra.options.pythonscripting.alert.content=Antes de instalar G-Python, instala los paquetes con pip!
tab.extra.options.pythonscripting.alert.moreinformation=Mas información aqui:
tab.extra.options.advanced=Avanzado
tab.extra.options.advanced.socks=Usar proxy SOCKS
tab.extra.options.advanced.proxy.ip=Proxy IP
tab.extra.options.advanced.proxy.port=Proxy port
tab.extra.options.advanced.disabledecryption=Deshabilitar desencriptación
tab.extra.options.advanced.debugstdout=Debug to stdout
### Tab - Info
tab.info=Info
tab.info.description=Habbo packet manipulador para Linux, Windows & Mac
tab.info.donate=Donar BTC
tab.info.donate.alert.title=Donar Bitcoins
tab.info.donate.alert.content=Dirección pública de bitcoins:
tab.info.createdby=Creado por
tab.info.links=Enlaces
tab.info.contributors=Contribuidores
## Alert
### Alert - Confirmation
alert.confirmation.windowtitle=Diálogo de confirmación
alert.confirmation.button.donotaskagain=No me preguntes de nuevo
alert.confirmation.button.remember=Recordar mi elección
### Alert - AdminValidator
alert.adminvalidator.content=G-Earth necesita permisos de administrador para funcionar en flash,\n\
por favor reinicie G-Earth con los permisos si no estás usando Unity
### Alert - Outdated
alert.outdated.title=¡G-Earth está desactualizado!
alert.outdated.content.newversion=Una nueva versión de G-Earth ha sido encontrada
alert.outdated.content.update=Actualizar a la versión mas reciente
### Alert - Invalid connection
alert.invalidconnection.content=Has introducida una conexión inválida, G-Earth no se ha podido conectar
### Alert - Nitro root certificate
alert.rootcertificate.title=Instalar Certificado Root
alert.rootcertificate.remember=Recordar mi elección
alert.rootcertificate.content=G-Earth detectó que no tienes un certificado de autoridad root instalado.\n\
Esto es requerido para que Nitro funcione, ¿Quieres continuar?\n\
G-Earth te pedirá permisos de administrador para instalarlo.
### Alert - Already connected
alert.alreadyconnected.content=G-Earth ya está conectado a este hotel.\n\
Debido a actuales limitaciones solo puedes conectarte una sesión por hotel a G-Earth en el modo Raw IP.\n\
\n\
Puedes saltarte esto usando un proxy SOCKS [Extra -> Avanzado -> SOCKS]
### Alert - Something went wrong
alert.somethingwentwrong.title=¡Algo ha salido mal!
alert.somethingwentwrong.content=¡Algo ha salido mal!\n\
\n\
Ve a nuestra página de ayuda para solucionar el problema:
### Alert - Allow extension connection
alert.extconnection.content=La extensión "%s" intenta conectarse pero es desconocida para G-Earth,\n\
¿Aceptar conexión?
### Alert - G-Python error
alert.gpythonerror.title=G-Python error
alert.gpythonerror.content=Algo ha salido mal al iniciar la G-Python shell,\n\
¿Estás seguro de que has seguido la guia correctamente?\n\
\n\
Mas información aqui:
## Internal extension
### Internal extension - G-ExtensionStore
ext.store.elapsedtime.second.single=segundo
ext.store.elapsedtime.second.multiple=segundos
ext.store.elapsedtime.minute.single=minuto
ext.store.elapsedtime.minute.multiple=minutos
ext.store.elapsedtime.hour.single=hora
ext.store.elapsedtime.hour.multiple=horas
ext.store.elapsedtime.day.single=día
ext.store.elapsedtime.day.multiple=dias
ext.store.elapsedtime.week.single=semana
ext.store.elapsedtime.week.multiple=semanas
ext.store.elapsedtime.month.single=mes
ext.store.elapsedtime.month.multiple=meses
ext.store.elapsedtime.year.single=año
ext.store.elapsedtime.year.multiple=años
ext.store.extension.version=Versión
ext.store.extension.rating=Valoración
ext.store.extension.madeby=Por %s
ext.store.extension.lastupdated=Última actualización hace %s
ext.store.extension.notinstore=No encontrado en G-ExtensionStore
ext.store.extension.details.description=Descripción
ext.store.extension.details.authors=Autor(es)
ext.store.extension.details.categories=Categorias
ext.store.extension.details.technical_information=Información técnica
ext.store.extension.details.click_here=Pulsa aqui
ext.store.extension.details.releases=Versiones
ext.store.extension.details.language=Lenguaje
ext.store.extension.details.source=Source
ext.store.extension.details.framework=Framework
ext.store.extension.details.systems=Sistemas
ext.store.extension.details.clients=Clientes compatibles
ext.store.extension.details.screenshot=Capturas de pantalla
ext.store.extension.author.reputation=reputación
ext.store.extension.author.releases=Versiones
ext.store.extension.warning.requirement=Atención: el framework requiere --url:instalaciones adicionales-
! IMPORTANT: the previous line has to end with the --url component like the english version
ext.store.extension.warning.unstable=Atención: ¡Esta extensión está marcada como no estable!
ext.store.extension.status.await.install=Instalar extensión
ext.store.extension.status.await.install.message=Presione "OK" y espere mientras comienza la instalación
ext.store.extension.status.await.update=Actualizar extension
ext.store.extension.status.await.update.message=Presione "OK" y espere mientras comienza la actualización
ext.store.extension.status.success.install=Instalación completa
ext.store.extension.status.success.install.message=La instalación se ha completado satisfactoriamente
ext.store.extension.status.success.update=Actualización completa
ext.store.extension.status.success.update.message=La actualización se ha completado satisfactoriamente
ext.store.extension.status.error.install=Instalación fallida
ext.store.extension.status.error.install.message=Instalación fallida con el siguiente mensaje
ext.store.extension.status.error.update=Actualización fallida
ext.store.extension.status.error.update.message=Actualización fallida con el siguiente mensaje
ext.store.button.search=Buscar
ext.store.button.install=Instalar
ext.store.button.installed=Instalados
ext.store.button.update=Actualizar
ext.store.search.title=Buscar
ext.store.search.description=Busca la extensión que mejor satisface tus necesidades
ext.store.search.contenttitle=Buscar extensions
ext.store.search.bykeyword=Buscar por palabras clave
ext.store.search.results=Resultados de la busqueda
ext.store.search.ordering=Orden de extensiones
ext.store.search.ordering.bydate.title=Nuevas extensiones
ext.store.search.ordering.bydate.description=Extensiones que han sido recientemente añadidas a la G-ExtensionStore
ext.store.search.ordering.bydate.contenttitle=Nuevas extensiones
ext.store.search.ordering.byrating.title=Extensiones populares
ext.store.search.ordering.byrating.description=Extensiones por valoración
ext.store.search.ordering.byrating.contenttitle=Extensiones populares
ext.store.search.ordering.byupdate.title=Recientemente actualizadas
ext.store.search.ordering.byupdate.description=Extensiones que han sido recientemente actualizadas
ext.store.search.ordering.byupdate.contenttitle=Recientemente actualizadas
ext.store.search.filter.clients=Clientes
ext.store.search.filter.categories=Categorias
ext.store.search.filter.frameworks=Frameworks
ext.store.search.info.automaticosfiltering=Nota: automaticamente se filtran las extensiones disponibles al OS que estás utilizando
ext.store.category=Categoria
ext.store.overview.title=Extensiones Instaladas
ext.store.overview.description=Extensiones que ya están instaladas en G-Earth
ext.store.overview.contenttitle=Extensiones Instaladas
ext.store.overview.folder=Abrir carpeta
ext.store.categories.title=Categorias
ext.store.categories.description=Explora las diferentes categorias que G-Earth tiene por ofrecerte
ext.store.categories.contenttitle=Categorias
ext.store.fail.unzip=Error while unzipping
ext.store.fail.invalidurl=Invalid extension URL
ext.store.fail.notavailable=Extension not available in repository
ext.store.fail.alreadyexists=Something went wrong creating the extension directory, does the extension already exist?
ext.store.fail.notfound=Extension wasn't found
ext.store.fail.uninstall=Something went wrong with uninstalling the extension, make sure to disconnect the extension if it was still running.
ext.store.ordering.rating=Rating
ext.store.ordering.alphabetical=Alphabetical
ext.store.ordering.lastupdated=Last updated
ext.store.ordering.newreleases=New releases
### Internal extension - Logger
ext.logger.menu.window=Ventana
ext.logger.menu.window.alwaysontop=Siempre arriba
ext.logger.menu.window.onconnect=Al conectar
ext.logger.menu.window.onconnect.openwindow=Abrir ventana
ext.logger.menu.window.onconnect.reset=Reiniciar packetlogger
ext.logger.menu.window.ondisconnect=Al desconectar
ext.logger.menu.window.ondisconnect.hidewindow=Esconder ventana
ext.logger.menu.window.ondisconnect.reset=Reiniciar packetlogger
ext.logger.menu.view=Vista
ext.logger.menu.view.incoming=Mostrar incoming
ext.logger.menu.view.outgoing=Mostrar outgoing
ext.logger.menu.view.autoscroll=Autoscroll
ext.logger.menu.view.cleartext=Limpiar texto
ext.logger.menu.packets=Packets
ext.logger.menu.packets.displaydetails=Mostrar detalles
ext.logger.menu.packets.displaydetails.byterep=Representación Byte
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
ext.logger.menu.packets.displaydetails.byterep.none=Ninguno
ext.logger.menu.packets.displaydetails.message=Message
ext.logger.menu.packets.displaydetails.message.name=Nombre
ext.logger.menu.packets.displaydetails.message.hash=Hash
ext.logger.menu.packets.displaydetails.message.id=Id
ext.logger.menu.packets.displaydetails.structure=Structure
ext.logger.menu.packets.displaydetails.timestamp=Hora
ext.logger.menu.packets.antispam=Filtro Anti-spam
ext.logger.menu.packets.antispam.none=None
ext.logger.menu.packets.antispam.low=Bajo
ext.logger.menu.packets.antispam.med=Medio
ext.logger.menu.packets.antispam.high=Alto
ext.logger.menu.packets.antispam.ultra=Ultra
ext.logger.menu.packets.skipbig=Saltar paquetes grandes
ext.logger.menu.packets.exportall=Exportar todos
ext.logger.menu.packets.exportall.windowtitle=Guardar Packets
ext.logger.menu.packets.exportall.filetype=archivos TXT
ext.logger.state.packetinfo=Packet info
ext.logger.state.filtered=Filtrado
ext.logger.element.timestamp=hora
ext.logger.element.blocked=Bloqueado
ext.logger.element.replaced=Replazado
ext.logger.element.direction.outgoing=Outgoing
ext.logger.element.direction.incoming=Incoming
ext.logger.element.skipped=packet skipped
ext.logger.state.true=True
ext.logger.state.false=False

View File

@ -0,0 +1,325 @@
# Finnish (Translated by justeeri)
## Tabs
### Tab - Connection
tab.connection=Yhteys
tab.connection.client=Asiakasohjelma:
tab.connection.client.flash=Flash / Air
tab.connection.client.unity=Unity
tab.connection.client.nitro=Nitro
tab.connection.version=Versio
tab.connection.state=Yhteyden tila:
tab.connection.state.notconnected=Ei yhdistetty
tab.connection.state.connected=Yhdistetty
tab.connection.state.waiting=Odotetaan yhteyttä
tab.connection.port=Portti:
tab.connection.host=Isäntä:
tab.connection.button.connect=Yhdistä
tab.connection.button.abort=Keskeytä
tab.connection.autodetect=Automaattitunnistus
### Tab - Injection
tab.injection=Injektio
tab.injection.corrupted=onVioittunut
tab.injection.corrupted.true=Tosi
tab.injection.corrupted.false=Epätosi
tab.injection.description.header=otsake
tab.injection.description.packets=paketit
tab.injection.description.id=id
tab.injection.description.length=pituus
tab.injection.send.toserver=Lähetä palvelimelle
tab.injection.send.toclient=Lähetä asiakkaalle
tab.injection.history=Historia:
tab.injection.history.clear=Tyhjennä
tab.injection.history.tooltip=Palauta paketti kaksoisnapsauttamalla sitä
tab.injection.log.packetwithid=Paketti tunnuksella
### Tab - Tools
tab.tools=Työkalut
tab.tools.button.encode=Enkoodaa
tab.tools.button.decode=Dekoodaa
tab.tools.type.integer=Integer
tab.tools.type.ushort=Ushort
tab.tools.encoding=Enkoodaus
tab.tools.decoding=Dekoodaus
tab.tools.packet=Paketti
tab.tools.expression=Ilmaisu
### Tab - Scheduler
tab.scheduler=Ajastus
tab.scheduler.table.index=Indeksi
tab.scheduler.table.packet=Paketti
tab.scheduler.table.interval=Aikaväli
tab.scheduler.table.destination=Kohde
tab.scheduler.table.edit=Muokkaa
tab.scheduler.setup.packet=Paketti
tab.scheduler.setup.interval=Aikaväli
tab.scheduler.button.clear=Tyhjennä
tab.scheduler.button.clear.tooltip=Tyhjennä kaikki kohteet
tab.scheduler.button.save=S
tab.scheduler.button.save.tooltip=Tallenna tiedostoon
tab.scheduler.button.save.windowtitle=Tallenna ajastustiedosto
tab.scheduler.button.load=L
tab.scheduler.button.load.tooltip=Lataa tiedostosta
tab.scheduler.button.load.windowtitle=Lataa ajastustiedosto
tab.scheduler.button.add=Lisää
tab.scheduler.button.edit=Muokkaa
tab.scheduler.direction.in=Sisään
tab.scheduler.direction.out=Ulos
tab.scheduler.hotkeys=Salli oikopolut (Ctrl+Shift+Index)
tab.scheduler.filetype=Ajastustiedostot (*.sched)
### Tab - Extensions
tab.extensions=Laajennukset
tab.extensions.table.title=Otsikko
tab.extensions.table.description=Kuvaus
tab.extensions.table.author=Tekijä
tab.extensions.table.version=Versio
tab.extensions.table.edit=Muokkaa
tab.extensions.table.edit.delete.tooltip=Katkaise yhteys tähän laajennukseen
tab.extensions.table.edit.restart.tooltip=Käynnistä tämä laajennus uudelleen
tab.extensions.table.edit.uninstall.tooltip=Poista tämän laajennuksen asennus
tab.extensions.table.edit.uninstall.confirmation=Haluatko varmasti poistaa tämän laajennuksen?
tab.extensions.port=Portti
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Asenna
tab.extensions.button.install.windowtitle=Asenna laajennus
tab.extensions.button.install.filetype=G-Earth -laajennus
tab.extensions.button.logs=Näytä lokit
tab.extensions.button.logs.windowtitle=Laajennuskonsoli
### Tab - Extra
tab.extra=Lisät
tab.extra.notepad=Muistio
tab.extra.troubleshooting=Vianmääritys
tab.extra.options.alwaysontop=Aina ylimmäisenä
tab.extra.options.staffpermissions=Client-side staffioikeudet
tab.extra.options.pythonscripting=G-Python scripting
tab.extra.options.pythonscripting.alert.title=G-Python -asennus
tab.extra.options.pythonscripting.alert.content=Ennen kuin käytät G-Pythonia, asenna oikeat paketit pip:llä!
tab.extra.options.pythonscripting.alert.moreinformation=Lisätietoja täältä:
tab.extra.options.advanced=Lisäasetukset
tab.extra.options.advanced.socks=Käytä SOCKS-proxya
tab.extra.options.advanced.proxy.ip=Proxy IP
tab.extra.options.advanced.proxy.port=Proxy-portti
tab.extra.options.advanced.disabledecryption=Poista salauksen purku käytöstä
tab.extra.options.advanced.debugstdout=Virheenkorjaus stdoutiin
### Tab - Info
tab.info=Tiedot
tab.info.description=Habbo pakettimanipulaattori Linuxille, Windowsille ja Macille
tab.info.donate=Lahjoita BTC
tab.info.donate.alert.title=Lahjoita Bitcoineja
tab.info.donate.alert.content=Bitcoin julkinen osoite:
tab.info.createdby=Luonut
tab.info.links=Linkit
tab.info.contributors=Avustajat
## Alert
### Alert - Confirmation
alert.confirmation.windowtitle=Vahvistus
alert.confirmation.button.donotaskagain=Älä kysy uudestaan
alert.confirmation.button.remember=Muista valintani
### Alert - AdminValidator
alert.adminvalidator.content=G-Earth tarvitsee järjestelmänvalvojan oikeudet toimiakseen Flashin kanssa.\n\
Käynnistä G-Earth uudelleen järjestelmänvalvojan oikeuksilla, jos et käytä Unityä.
### Alert - Outdated
alert.outdated.title=G-Earth on vanhentunut!
alert.outdated.content.newversion=G-Earthista on löydetty uusi versio
alert.outdated.content.update=Päivitä uusimpaan versioon
### Alert - Invalid connection
alert.invalidconnection.content=Annoit virheelliset yhteystiedot, G-Earth ei voinut muodostaa yhteyttä
### Alert - Nitro root certificate
alert.rootcertificate.title=Juurivarmenteen asennus
alert.rootcertificate.remember=Muista valintani
alert.rootcertificate.content=G-Earth havaitsi, että sinulla ei ole juurivarmentajaa asennettuna.\n\
Tämä tarvitaan, jotta Nitro toimii, haluatko jatkaa?\n\
G-Earth pyytää sinulta järjestelmänvalvojan lupaa, jos teet niin.
### Alert - Already connected
alert.alreadyconnected.content=G-Earth on jo yhdistetty tähän hotelliin.\n\
Nykyisten rajoitusten vuoksi voit yhdistää vain yhden istunnon hotellia kohti G-Earthiin Raw IP -tilassa Windowsissa.\n\
\n\
Voit ohittaa tämän käyttämällä SOCKS-välityspalvelinta [Lisät -> Lisäasetukset -> SOCKS]
### Alert - Something went wrong
alert.somethingwentwrong.title=Jokin meni pieleen!
alert.somethingwentwrong.content=Jokin meni pieleen!\n\
\n\
Siirry Vianetsintä-sivullemme ratkaistaksesi ongelma:
### Alert - Allow extension connection
alert.extconnection.content=Laajennus "%s" yrittää muodostaa yhteyden, mutta G-Earth ei tunne sitä.\n\
Hyväksytkö tämän yhteyden?
### Alert - G-Python error
alert.gpythonerror.title=G-Python virhe
alert.gpythonerror.content=Jotain meni pieleen G-Python-kuoren käynnistämisessä.\n\
Oletko varma, että noudatit asennusopasta oikein?\n\
\n\
Lisätietoja täältä:
## Internal extension
### Internal extension - G-ExtensionStore
ext.store.elapsedtime.second.single=sekunti
ext.store.elapsedtime.second.multiple=sekuntia
ext.store.elapsedtime.minute.single=minuutti
ext.store.elapsedtime.minute.multiple=minuuttia
ext.store.elapsedtime.hour.single=tunti
ext.store.elapsedtime.hour.multiple=tuntia
ext.store.elapsedtime.day.single=päivä
ext.store.elapsedtime.day.multiple=päivää
ext.store.elapsedtime.week.single=viikko
ext.store.elapsedtime.week.multiple=viikkoa
ext.store.elapsedtime.month.single=kuukausi
ext.store.elapsedtime.month.multiple=kuukautta
ext.store.elapsedtime.year.single=vuosi
ext.store.elapsedtime.year.multiple=vuotta
ext.store.extension.version=Versio
ext.store.extension.rating=Arvio
ext.store.extension.madeby=Tekijä: %s
ext.store.extension.lastupdated=viimeksi päivitetty %s sitten
ext.store.extension.notinstore=Ei löydy G-ExtensionStoresta
ext.store.extension.details.description=Kuvaus
ext.store.extension.details.authors=Tekijä(t))
ext.store.extension.details.categories=Kategoriat
ext.store.extension.details.technical_information=Tekniset tiedot
ext.store.extension.details.click_here=Klikkaa tästä
ext.store.extension.details.releases=Julkaisut
ext.store.extension.details.language=Ohjelmointikieli
ext.store.extension.details.source=Lähde
ext.store.extension.details.framework=Kehys
ext.store.extension.details.systems=Järjestelmät
ext.store.extension.details.clients=Yhteensopivat asiakasohjelmat
ext.store.extension.details.screenshot=Kuvakaappaus
ext.store.extension.author.reputation=maine
ext.store.extension.author.releases=julkaisua
ext.store.extension.warning.requirement=Varoitus: runko vaatii --url:lisäasennuksia-
! IMPORTANT: the previous line has to end with the --url component like the english version
ext.store.extension.warning.unstable=Warning: tämä laajennus on merkitty epävakaaksi!
ext.store.extension.status.await.install=Asenna laajennus
ext.store.extension.status.await.install.message=Paina "OK" ja odota laajennuksen asentumista
ext.store.extension.status.await.update=Päivitä laajennus
ext.store.extension.status.await.update.message=Paina "OK" ja odota laajennuksen päivittymistä
ext.store.extension.status.success.install=Asennus valmis
ext.store.extension.status.success.install.message=Laajennuksen asennus onnistui
ext.store.extension.status.success.update=Päivitys valmis
ext.store.extension.status.success.update.message=Laajennuksen päivitys onnistui
ext.store.extension.status.error.install=Asennus epäonnistui
ext.store.extension.status.error.install.message=Asennus epäonnistui seuraavalla viestillä
ext.store.extension.status.error.update=Päivitys epäonnistui
ext.store.extension.status.error.update.message=Päivitys epäonnistui seuraavalla viestillä
ext.store.button.search=Etsi
ext.store.button.install=Asenna
ext.store.button.installed=Asennettu
ext.store.button.update=Päivitä
ext.store.search.title=Hae
ext.store.search.description=Hae tarpeitasi vastaava laajennus
ext.store.search.contenttitle=Hae laajennuksia
ext.store.search.bykeyword=Etsi hakusanalla
ext.store.search.results=Hakutulokset
ext.store.search.ordering=Laajennusten järjestys
ext.store.search.ordering.bydate.title=Uudet julkaisut
ext.store.search.ordering.bydate.description=Laajennukset, jotka on äskettäin lisätty G-ExtensionStoreen
ext.store.search.ordering.bydate.contenttitle=Uudet julkaisut
ext.store.search.ordering.byrating.title=Suositut laajennukset
ext.store.search.ordering.byrating.description=Laajennukset lajiteltu arvioiden mukaan
ext.store.search.ordering.byrating.contenttitle=Suositut laajennukset
ext.store.search.ordering.byupdate.title=Äskettäin päivitetty
ext.store.search.ordering.byupdate.description=Hiljattain päivitetyt laajennukset
ext.store.search.ordering.byupdate.contenttitle=Äskettäin päivitetty
ext.store.search.filter.clients=Asiakasohjelmat
ext.store.search.filter.categories=Kategoriat
ext.store.search.filter.frameworks=Kehykset
ext.store.search.info.automaticosfiltering=Info: suodatat automaattisesti käyttämäsi käyttöjärjestelmän mukaan
ext.store.category=Kategoria
ext.store.overview.title=Asennetut laajennukset
ext.store.overview.description=Laajennukset, jotka on jo asennettu G-Earthiin
ext.store.overview.contenttitle=Asennetut laajennukset
ext.store.overview.folder=Avaa kansio
ext.store.categories.title=Kategoriat
ext.store.categories.description=Tutustu G-Earthin tarjoamiin erilaisiin laajennuksiin
ext.store.categories.contenttitle=Kategoriat
ext.store.fail.unzip=Virhe purettaessa
ext.store.fail.invalidurl=Virheellinen laajennuksen URL-osoite
ext.store.fail.notavailable=Laajennus ei ole saatavilla arkistossa
ext.store.fail.alreadyexists=Jotain meni pieleen laajennushakemiston luomisessa. Onko laajennus jo olemassa?
ext.store.fail.notfound=Laajennusta ei löytynyt
ext.store.fail.uninstall=Jotain meni pieleen laajennuksen poistamisessa. Muista pysäyttää laajennus, jos se on edelleen käynnissä.
ext.store.ordering.rating=Pisteet
ext.store.ordering.alphabetical=Aakkosjärjestys
ext.store.ordering.lastupdated=Viimeksi päivitetty
ext.store.ordering.newreleases=Uudet julkaisut
### Internal extension - Logger
ext.logger.menu.window=Ikkuna
ext.logger.menu.window.alwaysontop=Aina päälimmäisenä
ext.logger.menu.window.onconnect=Yhdistäessä
ext.logger.menu.window.onconnect.openwindow=Avaa ikkuna
ext.logger.menu.window.onconnect.reset=Nollaa pakettiloki
ext.logger.menu.window.ondisconnect=Yhteyden katketessa
ext.logger.menu.window.ondisconnect.hidewindow=Piilota ikkuna
ext.logger.menu.window.ondisconnect.reset=Nollaa pakettiloki
ext.logger.menu.view=Näkymä
ext.logger.menu.view.incoming=Näytä sisääntulevat
ext.logger.menu.view.outgoing=Näytä uloslähtevät
ext.logger.menu.view.autoscroll=Automaattirullaus
ext.logger.menu.view.cleartext=Tyhjennä teksti
ext.logger.menu.packets=Paketit
ext.logger.menu.packets.displaydetails=Näytä tiedot
ext.logger.menu.packets.displaydetails.byterep=Bittiesitys
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raaka hex
ext.logger.menu.packets.displaydetails.byterep.none=Ei mikään
ext.logger.menu.packets.displaydetails.message=Viesti
ext.logger.menu.packets.displaydetails.message.name=Nimi
ext.logger.menu.packets.displaydetails.message.hash=Tiiviste
ext.logger.menu.packets.displaydetails.message.id=Id
ext.logger.menu.packets.displaydetails.structure=Rakenne
ext.logger.menu.packets.displaydetails.timestamp=Aika
ext.logger.menu.packets.antispam=Spämmifiltteri
ext.logger.menu.packets.antispam.none=Ei käytössä
ext.logger.menu.packets.antispam.low=Alhainen
ext.logger.menu.packets.antispam.med=Keskitaso
ext.logger.menu.packets.antispam.high=Korkea
ext.logger.menu.packets.antispam.ultra=Ultra
ext.logger.menu.packets.skipbig=Ohita suuret paketit
ext.logger.menu.packets.exportall=Vie kaikki
ext.logger.menu.packets.exportall.windowtitle=Tallenna paketit
ext.logger.menu.packets.exportall.filetype=Tekstitiedostot
ext.logger.state.packetinfo=Paketin tiedot
ext.logger.state.filtered=Suodatettu
ext.logger.element.timestamp=aika
ext.logger.element.blocked=Estetty
ext.logger.element.replaced=Korvattu
ext.logger.element.direction.outgoing=Uloslähtevät
ext.logger.element.direction.incoming=Sisääntulevat
ext.logger.element.skipped=paketti ohitettu
ext.logger.state.true=Tosi
ext.logger.state.false=Epätosi

View File

@ -0,0 +1,328 @@
# French (Translated by Lande)
# Note by Lande : sorry if some translations are wrong, incorrect, missing or otherwise
# thank you for taking the time to modify them
## Tabs
### Tab - Connection
tab.connection=Connexion
tab.connection.client=Type de client:
tab.connection.client.flash=Flash / Air
tab.connection.client.unity=Unity
tab.connection.client.nitro=Nitro
tab.connection.version=Hôtel version:
tab.connection.state=État de connexion:
tab.connection.state.notconnected=Pas connecté
tab.connection.state.connected=Connecté
tab.connection.state.waiting=En attente de connexion
tab.connection.port=Port:
tab.connection.host=Host:
tab.connection.button.connect=Connecter
tab.connection.button.abort=Annuler
tab.connection.autodetect=Détection auto
### Tab - Injection
tab.injection=Injecter
tab.injection.corrupted=isCorrupted
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description.header=header
tab.injection.description.packets=packets
tab.injection.description.id=id
tab.injection.description.length=taille
tab.injection.send.toserver=Envoyer au serveur
tab.injection.send.toclient=Envoyer au client
tab.injection.history=Historique:
tab.injection.history.clear=Effacer
tab.injection.history.tooltip=Double clique un packet pour le restaurer
tab.injection.log.packetwithid=Packet avec id
### Tab - Tools
tab.tools=Outils
tab.tools.button.encode=Encode
tab.tools.button.decode=Decode
tab.tools.type.integer=Integer
tab.tools.type.ushort=Ushort
tab.tools.encoding=Encoder
tab.tools.decoding=Decoder
tab.tools.packet=Packet
tab.tools.expression=Expression
### Tab - Scheduler
tab.scheduler=Planificateur
tab.scheduler.table.index=Index
tab.scheduler.table.packet=Packet
tab.scheduler.table.interval=Interval
tab.scheduler.table.destination=Destination
tab.scheduler.table.edit=Modifier
tab.scheduler.setup.packet=Packet
tab.scheduler.setup.interval=Interval
tab.scheduler.button.clear=Effacer
tab.scheduler.button.clear.tooltip=Effacer tous
tab.scheduler.button.save=S
tab.scheduler.button.save.tooltip=Sauvegarder dans un fichier
tab.scheduler.button.save.windowtitle=Sauvegarder le planificateur dans un fichier
tab.scheduler.button.load=L
tab.scheduler.button.load.tooltip=Charger depuis un fichier
tab.scheduler.button.load.windowtitle=Charger le planificateur depuis un fichier
tab.scheduler.button.add=Ajouter
tab.scheduler.button.edit=Modifier
tab.scheduler.direction.in=In
tab.scheduler.direction.out=Out
tab.scheduler.hotkeys=Activer raccourcis (Ctrl+Shift+Index)
tab.scheduler.filetype=Fichier planificateur (*.sched)
### Tab - Extensions
tab.extensions=Extensions
tab.extensions.table.title=Titre
tab.extensions.table.description=Description
tab.extensions.table.author=Auteur
tab.extensions.table.version=Version
tab.extensions.table.edit=Modifier
tab.extensions.table.edit.delete.tooltip=Arreter la connexion avec l'extension
tab.extensions.table.edit.restart.tooltip=Recharger l'extension
tab.extensions.table.edit.uninstall.tooltip=Désinstaller l'extension
tab.extensions.table.edit.uninstall.confirmation=Es-tu sûr de vouloir désinstaller l'extension?
tab.extensions.port=Port
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Installer
tab.extensions.button.install.windowtitle=Installer l'extension
tab.extensions.button.install.filetype=G-Earth extensions
tab.extensions.button.logs=Logs
tab.extensions.button.logs.windowtitle=Extension Console
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Notepad
tab.extra.troubleshooting=Dépannage
tab.extra.options.alwaysontop=Toujours au top
tab.extra.options.staffpermissions=Permission staff client
tab.extra.options.pythonscripting=G-Python scripting
tab.extra.options.pythonscripting.alert.title=G-Python installation
tab.extra.options.pythonscripting.alert.content=Avant d'utiliser G-Python, installer les packages avec pip!
tab.extra.options.pythonscripting.alert.moreinformation=Plus d'informations ici:
tab.extra.options.advanced=Avancer
tab.extra.options.advanced.socks=Utiliser SOCKS proxy
tab.extra.options.advanced.proxy.ip=Proxy IP
tab.extra.options.advanced.proxy.port=Proxy port
tab.extra.options.advanced.disabledecryption=Désactiver le décryptage
tab.extra.options.advanced.debugstdout=Debug to stdout
### Tab - Info
tab.info=Info
tab.info.description=Habbo packet manipulateur pour Linux, Windows & Mac
tab.info.donate=Donner BTC
tab.info.donate.alert.title=Donner Bitcoins
tab.info.donate.alert.content=Bitcoin adresse publique:
tab.info.createdby=Crée par
tab.info.links=Liens
tab.info.contributors=Contributeurs
## Alert
### Alert - Confirmation
alert.confirmation.windowtitle=Dialogue de Confirmation
alert.confirmation.button.donotaskagain=Ne pas demander à nouveau
alert.confirmation.button.remember=Se souvenir de mon choix
### Alert - AdminValidator
alert.adminvalidator.content=G-Earth a besoin des privilèges d'administrateur pour pouvoir fonctionner sur Flash,\n\
merci de redémarrer G-Earth avec les privilèges d''administrateur sauf si tu utilises Unity
### Alert - Outdated
alert.outdated.title=G-Earth est obsolète!
alert.outdated.content.newversion=Une nouvelle version de G-Earth a été trouvée
alert.outdated.content.update=Mettre à jour la dernière version.
### Alert - Invalid connection
alert.invalidconnection.content=Tu as entré des informations invalides, G-Earth ne peut pas se connecter
### Alert - Nitro root certificate
alert.rootcertificate.title=Installation du certificat root
alert.rootcertificate.remember=Se souvenir de mon choix
alert.rootcertificate.content=G-Earth a détecté que tu n'avais pas le certificat root d'installer.\n\
Il est nécessaire pour que Nitro fonctionne, veux-tu continuer?\n\
G-Earth va te demander les permissions administrateurs si tu le souhaites.
### Alert - Already connected
alert.alreadyconnected.content=G-Earth est déjà connecté à cet hôtel.\n\
à la restriction actuelle tu peux connecter seulement une session par hôtel à G-Earth\n\
en mode "Raw IP" (127.0.0.1) sur Windows.\n\
\n\
Tu peux passer outre en utilisant un SOCKS proxy [Extra -> Avancer -> SOCKS]
### Alert - Something went wrong
alert.somethingwentwrong.title=Quelque chose s'est mal passé!
alert.somethingwentwrong.content=Quelque chose s'est mal passé!\n\
\n\
Rendez-vous sur notre page de dépannage pour résoudre le problème:
### Alert - Allow extension connection
alert.extconnection.content=Extension "%s" essaie de se connecter mais n'est pas connu de G-Earth,\n\
Accepter la connection?
### Alert - G-Python error
alert.gpythonerror.title=G-Python erreur
alert.gpythonerror.content=Quelque chose s'est mal passé lors du lancement de G-Python shell,\n\
es-tu sûr d'avoir suivi le guide d'installation correctement?\n\
\n\
Plus d'information ici:
## Internal extension
### Internal extension - G-ExtensionStore
ext.store.elapsedtime.second.single=seconde
ext.store.elapsedtime.second.multiple=secondes
ext.store.elapsedtime.minute.single=minute
ext.store.elapsedtime.minute.multiple=minutes
ext.store.elapsedtime.hour.single=heure
ext.store.elapsedtime.hour.multiple=heures
ext.store.elapsedtime.day.single=jour
ext.store.elapsedtime.day.multiple=jours
ext.store.elapsedtime.week.single=semaine
ext.store.elapsedtime.week.multiple=semaines
ext.store.elapsedtime.month.single=mois
ext.store.elapsedtime.month.multiple=mois
ext.store.elapsedtime.year.single=année
ext.store.elapsedtime.year.multiple=années
ext.store.extension.version=Version
ext.store.extension.rating=Évaluation
ext.store.extension.madeby=De %s
ext.store.extension.lastupdated=dernière mise à jour depuis %s
ext.store.extension.notinstore=Pas trouvé dans G-ExtensionStore
ext.store.extension.details.description=Description
ext.store.extension.details.authors=Auteur(s)
ext.store.extension.details.categories=Catégories
ext.store.extension.details.technical_information=Information technique
ext.store.extension.details.click_here=Clique ici
ext.store.extension.details.releases=Versions
ext.store.extension.details.language=Language
ext.store.extension.details.source=Source
ext.store.extension.details.framework=Framework
ext.store.extension.details.systems=Systemes
ext.store.extension.details.clients=Clients compatibles
ext.store.extension.details.screenshot=Screenshot
ext.store.extension.author.reputation=réputation
ext.store.extension.author.releases=Versions
ext.store.extension.warning.requirement=Attention: ce framework a besoin --url:des installations supplémentaires-
! IMPORTANT: the previous line has to end with the --url component like the english version
ext.store.extension.warning.unstable=Warning: this extension has been marked unstable!
ext.store.extension.status.await.install=Installer l'extension
ext.store.extension.status.await.install.message=Appuie sur "OK" et attend que l'extension soit installer
ext.store.extension.status.await.update=Mettre à jour l'extension
ext.store.extension.status.await.update.message=Appuie sur "OK" et attend que l'extension soit mise à jour
ext.store.extension.status.success.install=Installation complétée
ext.store.extension.status.success.install.message=L'installation de l'extension s'est terminée
ext.store.extension.status.success.update=Mise à jour complétée
ext.store.extension.status.success.update.message=La mise à jour de l'extension s'est terminée
ext.store.extension.status.error.install=Installation échoué
ext.store.extension.status.error.install.message=L'installation a échoué avec le message suivant
ext.store.extension.status.error.update=Mise à jour échoué
ext.store.extension.status.error.update.message=La mise à jour a échoué avec le message suivant
ext.store.button.search=Chercher
ext.store.button.install=Installer
ext.store.button.installed=Déjà installé
ext.store.button.update=Mettre à jour
ext.store.search.title=Chercher
ext.store.search.description=Chercher l'extension dont t'as besoin
ext.store.search.contenttitle=Chercher extensions
ext.store.search.bykeyword=Chercher par mot clé
ext.store.search.results=Résultats de recherche
ext.store.search.ordering=Extensions par ordre
ext.store.search.ordering.bydate.title=Nouvelles extensions
ext.store.search.ordering.bydate.description=Extensions récemment ajouté à G-ExtensionStore
ext.store.search.ordering.bydate.contenttitle=Nouvelles extensions
ext.store.search.ordering.byrating.title=Extensions populaires
ext.store.search.ordering.byrating.description=Extensions par ordre d'évaluation
ext.store.search.ordering.byrating.contenttitle=Extensions populaires
ext.store.search.ordering.byupdate.title=Récemment mis à jour
ext.store.search.ordering.byupdate.description=Extensions qui ont été récemment mis à jour
ext.store.search.ordering.byupdate.contenttitle=Récemment mis à jour
ext.store.search.filter.clients=Clients
ext.store.search.filter.categories=Catégories
ext.store.search.filter.frameworks=Frameworks
ext.store.search.info.automaticosfiltering=Info: automatiquement filtré en fonction de l'OS que tu utilises
ext.store.category=Catégories
ext.store.overview.title=Extensions installés
ext.store.overview.description=Extensions qui sont déjà installés dans G-Earth
ext.store.overview.contenttitle=Extensions installés
ext.store.overview.folder=Ouvrir le dossier
ext.store.categories.title=Catégories
ext.store.categories.description=Explorer les différentes extensions que G-Earth a à te proposer
ext.store.categories.contenttitle=Catégories
ext.store.fail.unzip=Error while unzipping
ext.store.fail.invalidurl=Invalid extension URL
ext.store.fail.notavailable=Extension not available in repository
ext.store.fail.alreadyexists=Something went wrong creating the extension directory, does the extension already exist?
ext.store.fail.notfound=Extension wasn't found
ext.store.fail.uninstall=Something went wrong with uninstalling the extension, make sure to disconnect the extension if it was still running.
ext.store.ordering.rating=Rating
ext.store.ordering.alphabetical=Alphabetical
ext.store.ordering.lastupdated=Last updated
ext.store.ordering.newreleases=New releases
### Internal extension - Logger
ext.logger.menu.window=Fenêtre
ext.logger.menu.window.alwaysontop=Toujours au top
ext.logger.menu.window.onconnect=À la connection
ext.logger.menu.window.onconnect.openwindow=Ouvrir la Fenêtre
ext.logger.menu.window.onconnect.reset=Réinitialiser le packetlogger
ext.logger.menu.window.ondisconnect=À la déconnexion
ext.logger.menu.window.ondisconnect.hidewindow=Masquer la fenêtre
ext.logger.menu.window.ondisconnect.reset=Réinitialiser le packetlogger
ext.logger.menu.view=Voir
ext.logger.menu.view.incoming=Voir les incoming
ext.logger.menu.view.outgoing=Voir les outgoing
ext.logger.menu.view.autoscroll=Autoscroll
ext.logger.menu.view.cleartext=Effacer le texte
ext.logger.menu.packets=Packets
ext.logger.menu.packets.displaydetails=Afficher les details
ext.logger.menu.packets.displaydetails.byterep=Byte représentation
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
ext.logger.menu.packets.displaydetails.byterep.none=None
ext.logger.menu.packets.displaydetails.message=Message
ext.logger.menu.packets.displaydetails.message.name=Nom
ext.logger.menu.packets.displaydetails.message.hash=Hash
ext.logger.menu.packets.displaydetails.message.id=Id
ext.logger.menu.packets.displaydetails.structure=Structure
ext.logger.menu.packets.displaydetails.timestamp=Heure
ext.logger.menu.packets.antispam=Anti-spam filtre
ext.logger.menu.packets.antispam.none=None
ext.logger.menu.packets.antispam.low=Bas
ext.logger.menu.packets.antispam.med=Moyen
ext.logger.menu.packets.antispam.high=Élevé
ext.logger.menu.packets.antispam.ultra=Ultra
ext.logger.menu.packets.skipbig=Skip big packets
ext.logger.menu.packets.exportall=Exporter tout
ext.logger.menu.packets.exportall.windowtitle=Sauvegarder les Packets
ext.logger.menu.packets.exportall.filetype=TXT files
ext.logger.state.packetinfo=Packet info
ext.logger.state.filtered=Filtré
ext.logger.element.timestamp=heure
ext.logger.element.blocked=Blocké
ext.logger.element.replaced=Remplacé
ext.logger.element.direction.outgoing=Outgoing
ext.logger.element.direction.incoming=Incoming
ext.logger.element.skipped=packet skipped
ext.logger.state.true=True
ext.logger.state.false=False

View File

@ -0,0 +1,326 @@
# Italian (Translated by Kilt)
## Tabs
### Tab - Connection
tab.connection=Connessione
tab.connection.client=Tipo di client:
tab.connection.client.flash=Flash / Air
tab.connection.client.unity=Unity
tab.connection.client.nitro=Nitro
tab.connection.version=Versione Hotel:
tab.connection.state=Stato connessione:
tab.connection.state.notconnected=Non connesso
tab.connection.state.connected=Connesso
tab.connection.state.waiting=In attesa di connessione
tab.connection.port=Porta:
tab.connection.host=Host:
tab.connection.button.connect=Connetti
tab.connection.button.abort=Interrompi
tab.connection.autodetect=Auto-detect
### Tab - Injection
tab.injection=Iniezione
tab.injection.corrupted=isCorrupted
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description.header=header
tab.injection.description.packets=packets
tab.injection.description.id=id
tab.injection.description.length=lunghezza
tab.injection.send.toserver=Manda al server
tab.injection.send.toclient=Manda al client
tab.injection.history=Cronologia:
tab.injection.history.clear=Cancella
tab.injection.history.tooltip=Doppioclicca il packet per ripristinarlo
tab.injection.log.packetwithid=Packet con id
### Tab - Tools
tab.tools=Strumenti
tab.tools.button.encode=Codifica
tab.tools.button.decode=Decodifica
tab.tools.type.integer=Integer
tab.tools.type.ushort=Ushort
tab.tools.encoding=Encoding
tab.tools.decoding=Decoding
tab.tools.packet=Packet
tab.tools.expression=Expression
### Tab - Scheduler
tab.scheduler=Pianificazione
tab.scheduler.table.index=Index
tab.scheduler.table.packet=Packet
tab.scheduler.table.interval=Interval
tab.scheduler.table.destination=Destinazione
tab.scheduler.table.edit=Modifica
tab.scheduler.setup.packet=Packet
tab.scheduler.setup.interval=Intervallo
tab.scheduler.button.clear=Cancella
tab.scheduler.button.clear.tooltip=Cancella tutti gli items
tab.scheduler.button.save=S
tab.scheduler.button.save.tooltip=Salva su file
tab.scheduler.button.save.windowtitle=Salva File Pianificato
tab.scheduler.button.load=C
tab.scheduler.button.load.tooltip=Carica da file
tab.scheduler.button.load.windowtitle=Carica File Pianificato
tab.scheduler.button.add=Aggiungi
tab.scheduler.button.edit=Modifica
tab.scheduler.direction.in=In
tab.scheduler.direction.out=Out
tab.scheduler.hotkeys=Attiva hotkeys (Ctrl+Shift+Index)
tab.scheduler.filetype=File Pianificati (*.sched)
### Tab - Extensions
tab.extensions=Estensioni
tab.extensions.table.title=Titolo
tab.extensions.table.description=Descrizione
tab.extensions.table.author=Autore
tab.extensions.table.version=Versione
tab.extensions.table.edit=Modifica
tab.extensions.table.edit.delete.tooltip=Chiudi la connessione con questa estensione
tab.extensions.table.edit.restart.tooltip=Riavvia questa estensione
tab.extensions.table.edit.uninstall.tooltip=Disinstalla questa estensione
tab.extensions.table.edit.uninstall.confirmation=Sei sicuro di voler disinstallare questa estensione?
tab.extensions.port=Porta
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Installa
tab.extensions.button.install.windowtitle=Installa estensione
tab.extensions.button.install.filetype=Estensioni di G-Earth
tab.extensions.button.logs=Guarda logs
tab.extensions.button.logs.windowtitle=Console Estensione
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Notepad
tab.extra.troubleshooting=Risoluzione dei problemi
tab.extra.options.alwaysontop=Sempre in primo piano
tab.extra.options.staffpermissions=Permessi staff client-side
tab.extra.options.pythonscripting=G-Python scripting
tab.extra.options.pythonscripting.alert.title=Installazione di G-Python
tab.extra.options.pythonscripting.alert.content=Prima di usare G-Python, installare i pacchetti giusti usando pip!
tab.extra.options.pythonscripting.alert.moreinformation=Maggiori informazion qui:
tab.extra.options.advanced=Avanzato
tab.extra.options.advanced.socks=Usa Proxy SOCKS
tab.extra.options.advanced.proxy.ip=Proxy IP
tab.extra.options.advanced.proxy.port=Proxy port
tab.extra.options.advanced.disabledecryption=Disattiva decrittazione
tab.extra.options.advanced.debugstdout=Debug to stdout
### Tab - Info
tab.info=Info
tab.info.description=Manipolatore di Habbo packet per Linux, Windows & Mac
tab.info.donate=Dona BTC
tab.info.donate.alert.title=Dona Bitcoins
tab.info.donate.alert.content=Indirizzo pubblico Bitcoin:
tab.info.createdby=Creato da
tab.info.links=Links
tab.info.contributors=Contributori
## Alert
### Alert - Confirmation
alert.confirmation.windowtitle=Dialogo di conferma
alert.confirmation.button.donotaskagain=Non lo chiedere di nuovo
alert.confirmation.button.remember=Ricorda la mia scelta
### Alert - AdminValidator
alert.adminvalidator.content=G-Earth ha bisogno dei permessi di amministratore per poter funzionare su Flash,\n\
riavvia G-Earth con i permessi di amministratore a meno che\n\
tu non stia usando Unity
### Alert - Outdated
alert.outdated.title=G-Earth non è aggiornato!
alert.outdated.content.newversion=Una nuova versione di G-Earth è stata trovata
alert.outdated.content.update=Aggiorna all'ultima versione
### Alert - Invalid connection
alert.invalidconnection.content=Hai inserito informazioni di connessione non valide, G-Earth non è stato in grado di connettersi
### Alert - Nitro root certificate
alert.rootcertificate.title=Installazione del Certificato Root
alert.rootcertificate.remember=Ricorda la mia scelta
alert.rootcertificate.content=G-Earth ha rilevato che non hai un certificato di autorizzazione root installato.\n\
Questo è richiesto per far funzionare Nitro, vuoi continuare?\n\
G-Earth ti chiederà i permessi di Amministratore se lo farai.
### Alert - Already connected
alert.alreadyconnected.content=G-Earth è già connesso a questo hotel.\n\
A causa delle attuali limitazioni, puoi connettere solo una sessione per hotel su G-Earth in Modalità Raw IP su Windows.\n\
\n\
Puoi bypassare questo usando un proxy SOCKS [Extra -> Avanzato -> SOCKS]
### Alert - Something went wrong
alert.somethingwentwrong.title=Qualcosa è andato storto!
alert.somethingwentwrong.content=Qualcosa è andato storto!\n\
\n\
Vai sulla nostra pagina Risoluzione dei problemi per risolvere il problema:
### Alert - Allow extension connection
alert.extconnection.content=L'estensione "%s" sta provando a connettersi ma non è riconosciuto da G-Earth,\n\
accetti questa connessione?
### Alert - G-Python error
alert.gpythonerror.title=Errore G-Python
alert.gpythonerror.content=Qualcosa è andato storto avviando il G-Python shell,\n\
sei sicuro di aver seguito la guida di installazione correttamente?\n\
\n\
Più informazioni qui:
## Internal extension
### Internal extension - G-ExtensionStore
ext.store.elapsedtime.second.single=secondo
ext.store.elapsedtime.second.multiple=secondi
ext.store.elapsedtime.minute.single=minuto
ext.store.elapsedtime.minute.multiple=minuti
ext.store.elapsedtime.hour.single=ora
ext.store.elapsedtime.hour.multiple=ore
ext.store.elapsedtime.day.single=giorno
ext.store.elapsedtime.day.multiple=giorni
ext.store.elapsedtime.week.single=settimana
ext.store.elapsedtime.week.multiple=settimane
ext.store.elapsedtime.month.single=mese
ext.store.elapsedtime.month.multiple=mesi
ext.store.elapsedtime.year.single=anno
ext.store.elapsedtime.year.multiple=anni
ext.store.extension.version=Versione
ext.store.extension.rating=Valutazione
ext.store.extension.madeby=Di %s
ext.store.extension.lastupdated=ultimo aggiornamento %s fa
ext.store.extension.notinstore=Non trovato nel G-ExtensionStore
ext.store.extension.details.description=Descrizione
ext.store.extension.details.authors=Autore/i
ext.store.extension.details.categories=Categorie
ext.store.extension.details.technical_information=Informazioni tecniche
ext.store.extension.details.click_here=Clicca qui
ext.store.extension.details.releases=Rilasci
ext.store.extension.details.language=Lingua
ext.store.extension.details.source=Sorgente
ext.store.extension.details.framework=Framework
ext.store.extension.details.systems=Sistemi
ext.store.extension.details.clients=Client compatibili
ext.store.extension.details.screenshot=Screenshot
ext.store.extension.author.reputation=reputazione
ext.store.extension.author.releases=rilasci
ext.store.extension.warning.requirement=Attenzione: è richiesto il framework --url:additional installations-
! IMPORTANT: the previous line has to end with the --url component like the english version
ext.store.extension.warning.unstable=Attenzione: questa estensione è stata marchiata instabile!
ext.store.extension.status.await.install=Installa estensione
ext.store.extension.status.await.install.message=Premi "OK" e aspetta mentre l'estensione viene installata
ext.store.extension.status.await.update=Update extension
ext.store.extension.status.await.update.message=Press "OK" e aspetta mentre l'estensione viene aggiornata
ext.store.extension.status.success.install=Installazione completata
ext.store.extension.status.success.install.message=L'installazione dell'estensione è stata completata con successo
ext.store.extension.status.success.update=Aggiornamento completato
ext.store.extension.status.success.update.message=L'aggiornamento dell'estensione è stato completato con successo
ext.store.extension.status.error.install=Installazione fallita
ext.store.extension.status.error.install.message=Installazione fallita con il seguente messaggio
ext.store.extension.status.error.update=Aggiornamento fallito
ext.store.extension.status.error.update.message=Aggiornamento fallito con il seguente messaggio
ext.store.button.search=Cerca
ext.store.button.install=Installa
ext.store.button.installed=Installato
ext.store.button.update=Aggiorna
ext.store.search.title=Cerca
ext.store.search.description=Trova l'estensione adatta alle tue esigenze
ext.store.search.contenttitle=Cerca estensioni
ext.store.search.bykeyword=Cerca per parola chiave
ext.store.search.results=Cerca risultati
ext.store.search.ordering=Ordinazione delle estensioni
ext.store.search.ordering.bydate.title=Nuovi Rilasci
ext.store.search.ordering.bydate.description=Estensioni aggiunti di recente sul G-ExtensionStore
ext.store.search.ordering.bydate.contenttitle=Nuovi Rilasci
ext.store.search.ordering.byrating.title=Estensioni Popolari
ext.store.search.ordering.byrating.description=Estensioni ordinate per valutazione
ext.store.search.ordering.byrating.contenttitle=Estensioni Popolari
ext.store.search.ordering.byupdate.title=Aggiornate di Recente
ext.store.search.ordering.byupdate.description=Estensioni aggiornate di recente
ext.store.search.ordering.byupdate.contenttitle=Aggiornate di Recente
ext.store.search.filter.clients=Clients
ext.store.search.filter.categories=Categorie
ext.store.search.filter.frameworks=Frameworks
ext.store.search.info.automaticosfiltering=Info: stai filtrando automaticamente sul SO in uso
ext.store.category=Categoria
ext.store.overview.title=Estensioni Installate
ext.store.overview.description=Estensioni che sono già installate in G-Earth
ext.store.overview.contenttitle=Estensioni installate
ext.store.overview.folder=Apri cartella
ext.store.categories.title=Categorie
ext.store.categories.description=Esplora i diversi tipi di estensioni che G-Earth ha da offrire
ext.store.categories.contenttitle=Categorie
ext.store.fail.unzip=Error while unzipping
ext.store.fail.invalidurl=Invalid extension URL
ext.store.fail.notavailable=Extension not available in repository
ext.store.fail.alreadyexists=Something went wrong creating the extension directory, does the extension already exist?
ext.store.fail.notfound=Extension wasn't found
ext.store.fail.uninstall=Something went wrong with uninstalling the extension, make sure to disconnect the extension if it was still running.
ext.store.ordering.rating=Rating
ext.store.ordering.alphabetical=Alphabetical
ext.store.ordering.lastupdated=Last updated
ext.store.ordering.newreleases=New releases
### Internal extension - Logger
ext.logger.menu.window=Finestra
ext.logger.menu.window.alwaysontop=Sempre in primo piano
ext.logger.menu.window.onconnect=Alla connessione
ext.logger.menu.window.onconnect.openwindow=Apri finestra
ext.logger.menu.window.onconnect.reset=Resetta packetlogger
ext.logger.menu.window.ondisconnect=Alla disconnessione
ext.logger.menu.window.ondisconnect.hidewindow=Nascondi finestra
ext.logger.menu.window.ondisconnect.reset=Resetta packetlogger
ext.logger.menu.view=View
ext.logger.menu.view.incoming=Mostra in arrivo
ext.logger.menu.view.outgoing=Mostra in uscita
ext.logger.menu.view.autoscroll=Autoscroll
ext.logger.menu.view.cleartext=Cancella testo
ext.logger.menu.packets=Packets
ext.logger.menu.packets.displaydetails=Mostra dettagli
ext.logger.menu.packets.displaydetails.byterep=Rappresentazione Byte
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
ext.logger.menu.packets.displaydetails.byterep.none=Nulla
ext.logger.menu.packets.displaydetails.message=Messaggio
ext.logger.menu.packets.displaydetails.message.name=Nome
ext.logger.menu.packets.displaydetails.message.hash=Hash
ext.logger.menu.packets.displaydetails.message.id=Id
ext.logger.menu.packets.displaydetails.structure=Struttura
ext.logger.menu.packets.displaydetails.timestamp=Ora
ext.logger.menu.packets.antispam=Filtro Anti-spam
ext.logger.menu.packets.antispam.none=Nulla
ext.logger.menu.packets.antispam.low=Basso
ext.logger.menu.packets.antispam.med=Medio
ext.logger.menu.packets.antispam.high=Alto
ext.logger.menu.packets.antispam.ultra=Ultra
ext.logger.menu.packets.skipbig=Salta grandi packets
ext.logger.menu.packets.exportall=Esporta tutto
ext.logger.menu.packets.exportall.windowtitle=Salva Packets
ext.logger.menu.packets.exportall.filetype=File TXT
ext.logger.state.packetinfo=Packet info
ext.logger.state.filtered=Filtrato
ext.logger.element.timestamp=ora
ext.logger.element.blocked=Bloccato
ext.logger.element.replaced=Rimpiazzato
ext.logger.element.direction.outgoing=In uscita
ext.logger.element.direction.incoming=In arrivo
ext.logger.element.skipped=packet skipped
ext.logger.state.true=True
ext.logger.state.false=False

View File

@ -0,0 +1,324 @@
# Dutch (Translated by WiredSpast)
## Tabs
### Tab - Connection
tab.connection=Verbinding
tab.connection.client=Client type:
tab.connection.client.flash=Flash / Air
tab.connection.client.unity=Unity
tab.connection.client.nitro=Nitro
tab.connection.version=Hotel versie:
tab.connection.state=Verbindings status:
tab.connection.state.notconnected=Niet verbonden
tab.connection.state.connected=Verbonden
tab.connection.state.waiting=Wachten op verbinding
tab.connection.port=Port:
tab.connection.host=Host:
tab.connection.button.connect=Verbind
tab.connection.button.abort=Stop
tab.connection.autodetect=Auto-detectie
### Tab - Injection
tab.injection=Injectie
tab.injection.corrupted=isCorrupt
tab.injection.corrupted.true=True
tab.injection.corrupted.false=False
tab.injection.description.header=header
tab.injection.description.packets=packets
tab.injection.description.id=id
tab.injection.description.length=lengte
tab.injection.send.toserver=Stuur naar server
tab.injection.send.toclient=Stuur naar client
tab.injection.history=Geschiedenis:
tab.injection.history.clear=Wis
tab.injection.history.tooltip=Dubbelklik op een packet om deze op te vragen
tab.injection.log.packetwithid=Packet met id
### Tab - Tools
tab.tools=Tools
tab.tools.button.encode=Codeer
tab.tools.button.decode=Decodeer
tab.tools.type.integer=Integer
tab.tools.type.ushort=Ushort
tab.tools.encoding=Codering
tab.tools.decoding=Decodering
tab.tools.packet=Packet
tab.tools.expression=Expressie
### Tab - Scheduler
tab.scheduler=Planner
tab.scheduler.table.index=Index
tab.scheduler.table.packet=Packet
tab.scheduler.table.interval=Interval
tab.scheduler.table.destination=Bestemming
tab.scheduler.table.edit=Bewerk
tab.scheduler.setup.packet=Packet
tab.scheduler.setup.interval=Interval
tab.scheduler.button.clear=Wis
tab.scheduler.button.clear.tooltip=Wis alle items
tab.scheduler.button.save=S
tab.scheduler.button.save.tooltip=Bewaar naar een bestand
tab.scheduler.button.save.windowtitle=Bewaar Schedule Bestand
tab.scheduler.button.load=L
tab.scheduler.button.load.tooltip=Laad vanuit een bestand
tab.scheduler.button.load.windowtitle=Laad Schedule Bestand
tab.scheduler.button.add=Voeg toe
tab.scheduler.button.edit=Bewerk
tab.scheduler.direction.in=In
tab.scheduler.direction.out=Uit
tab.scheduler.hotkeys=Sneltoetsen (Ctrl+Shift+Index)
tab.scheduler.filetype=Schedule Bestanden (*.sched)
### Tab - Extensions
tab.extensions=Extensies
tab.extensions.table.title=Titel
tab.extensions.table.description=Beschrijving
tab.extensions.table.author=Auteur
tab.extensions.table.version=Versie
tab.extensions.table.edit=Bewerk
tab.extensions.table.edit.delete.tooltip=Verbreek verbinding met deze extensie
tab.extensions.table.edit.restart.tooltip=Herstart deze extensie
tab.extensions.table.edit.uninstall.tooltip=Verwijder deze extensie
tab.extensions.table.edit.uninstall.confirmation=Ben je zeker dat je deze extensie wil verwijderen?
tab.extensions.port=Port
tab.extensions.button.pythonshell=G-Python shell
tab.extensions.button.pythonshell.windowtitle=Scripting shell
tab.extensions.button.install=Installeer
tab.extensions.button.install.windowtitle=Installeer extensie
tab.extensions.button.install.filetype=G-Earth extensies
tab.extensions.button.logs=Bekijk logs
tab.extensions.button.logs.windowtitle=Extensie Console
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Kladblok
tab.extra.troubleshooting=Troubleshooting
tab.extra.options.alwaysontop=Altijd bovenop
tab.extra.options.staffpermissions=Client-side staff machtigingen
tab.extra.options.pythonscripting=G-Python scripting
tab.extra.options.pythonscripting.alert.title=G-Python installatie
tab.extra.options.pythonscripting.alert.content=Voordat je G-Python kan gebruiken moet je de juiste packages installeren!
tab.extra.options.pythonscripting.alert.moreinformation=Meer informatie hier:
tab.extra.options.advanced=Geavanceerd
tab.extra.options.advanced.socks=Gebruik SOCKS proxy
tab.extra.options.advanced.proxy.ip=Proxy IP
tab.extra.options.advanced.proxy.port=Proxy port
tab.extra.options.advanced.disabledecryption=Schakel decryptie uit
tab.extra.options.advanced.debugstdout=Debug naar stdout
### Tab - Info
tab.info=Info
tab.info.description=Habbo packet manipulator voor Linux, Windows & Mac
tab.info.donate=Doneer BTC
tab.info.donate.alert.title=Doneer Bitcoins
tab.info.donate.alert.content=Bitcoin publiek address:
tab.info.createdby=Gemaakt door
tab.info.links=Links
tab.info.contributors=Bijdragers
## Alert
### Alert - Confirmation
alert.confirmation.windowtitle=Bevestigings Dialog
alert.confirmation.button.donotaskagain=Vraag het me niet nog eens
alert.confirmation.button.remember=Onthoud mijn keuze
### Alert - AdminValidator
alert.adminvalidator.content=G-Earth heeft beheerdersrechten nodig om op Flash te kunnen werken,\n\
herstart G-Earth met beheerdersrechten tenzij je Unity gebruikt.
### Alert - Outdated
alert.outdated.title=G-Earth is verouderd!
alert.outdated.content.newversion=Er is een nieuwe versie van G-Earth gevonden
alert.outdated.content.update=Update naar de nieuwste versie
### Alert - Invalid connection
alert.invalidconnection.content=Je hebt ongeldige connectie informatie opgegeven, G-Earth kon niet verbinden
### Alert - Nitro root certificate
alert.rootcertificate.title=Basiscertificaat installatie
alert.rootcertificate.remember=Onthoud mijn keuze
alert.rootcertificate.content=G-Earth kan geen geïnstalleerd basiscertificaat vinden.\n\
Dit is nodig om met Nitro te verbinden, wil je verder gaan?\n\
G-Earth zal je voor beheerdersrechten vragen indien je verder gaat.
### Alert - Already connected
alert.alreadyconnected.content=G-Earth is reeds verbonden met dit hotel.\n\
Vanwege de huidige limieten kan je maar met één sessie per hotel verbinden in Ruwe IP-modus op Windows.\n\
\n\
Je kan dit omzeilen door een SOCKS proxy te gebruiken [Extra -> Geavanceerd -> SOCKS]
### Alert - Something went wrong
alert.somethingwentwrong.title=Er ging iets mis!
alert.somethingwentwrong.content=Er ging iets mis!\n\
\n\
Ga naar de Troubleshooting pagina om het probleem op te lossen:
### Alert - Allow extension connection
alert.extconnection.content=De extension "%s" probeert te verbinden, maar is onbekend voor G-Earth,\n\
accepteer je deze verbinding?
### Alert - G-Python error
alert.gpythonerror.title=G-Python error
alert.gpythonerror.content=Er ging iets mis bij het openen van de G-Python shell,\n\
ben je zeker dat je de installatie gids correct gevolgd hebt?\n\
\n\
Meer informatie hier:
## Internal extension
### Internal extension - G-ExtensionStore
ext.store.elapsedtime.second.single=seconde
ext.store.elapsedtime.second.multiple=seconden
ext.store.elapsedtime.minute.single=minuut
ext.store.elapsedtime.minute.multiple=minuten
ext.store.elapsedtime.hour.single=uur
ext.store.elapsedtime.hour.multiple=uren
ext.store.elapsedtime.day.single=dag
ext.store.elapsedtime.day.multiple=dagen
ext.store.elapsedtime.week.single=week
ext.store.elapsedtime.week.multiple=weken
ext.store.elapsedtime.month.single=maand
ext.store.elapsedtime.month.multiple=maanden
ext.store.elapsedtime.year.single=jaar
ext.store.elapsedtime.year.multiple=jaaren
ext.store.extension.version=Versie
ext.store.extension.rating=Rating
ext.store.extension.madeby=Door %s
ext.store.extension.lastupdated=laatst geupdate %s geleden
ext.store.extension.notinstore=Niet gevonden in de G-ExtensionStore
ext.store.extension.details.description=Beschrijving
ext.store.extension.details.authors=Auteur(s)
ext.store.extension.details.categories=Categorieën
ext.store.extension.details.technical_information=Technische informatie
ext.store.extension.details.click_here=Klik hier
ext.store.extension.details.releases=Releases
ext.store.extension.details.language=Taal
ext.store.extension.details.source=Bron
ext.store.extension.details.framework=Framework
ext.store.extension.details.systems=Systemen
ext.store.extension.details.clients=Compatibele clients
ext.store.extension.details.screenshot=Screenshot
ext.store.extension.author.reputation=reputatie
ext.store.extension.author.releases=releases
ext.store.extension.warning.requirement=Waarschuwing: het framework heeft --url:aanvullende installaties nodig-
! IMPORTANT: the previous line has to end with the --url component like the english version
ext.store.extension.warning.unstable=Waarschuwing: Deze extensie is als onstabiel aangegeven!
ext.store.extension.status.await.install=Installeer extensie
ext.store.extension.status.await.install.message=Klik op "OK" en wacht terwijl de extensie geïnstalleerd wordt
ext.store.extension.status.await.update=Update extensie
ext.store.extension.status.await.update.message=Klik op "OK" en wacht terwijl de extensie geupdate wordt
ext.store.extension.status.success.install=Installatie klaar
ext.store.extension.status.success.install.message=Extensie installatie succesvol afgerond
ext.store.extension.status.success.update=Update klaar
ext.store.extension.status.success.update.message=Extensie update succesvol afgerond
ext.store.extension.status.error.install=Installatie misgelopen
ext.store.extension.status.error.install.message=Installatie is misgelopen met de volgende melding:
ext.store.extension.status.error.update=Update misgelopen
ext.store.extension.status.error.update.message=Update is misgelopen met de volgende melding:
ext.store.button.search=Zoek
ext.store.button.install=Installeer
ext.store.button.installed=Geïnstalleerd
ext.store.button.update=Update
ext.store.search.title=Zoek
ext.store.search.description=Vind de extensie die je nodig hebt
ext.store.search.contenttitle=Zoek extensies
ext.store.search.bykeyword=Zoek met sleutelwoord
ext.store.search.results=Zoekresultaten
ext.store.search.ordering=Extensie ordening
ext.store.search.ordering.bydate.title=Nieuwe releases
ext.store.search.ordering.bydate.description=Extensies die recent aan de G-ExtensionStore zijn toegevoegd
ext.store.search.ordering.bydate.contenttitle=Nieuwe Releases
ext.store.search.ordering.byrating.title=Populaire Extensies
ext.store.search.ordering.byrating.description=Extensies gesorteerd op rating
ext.store.search.ordering.byrating.contenttitle=Populaire Extensies
ext.store.search.ordering.byupdate.title=Recent Geupdate
ext.store.search.ordering.byupdate.description=Extensies die recent geupdate zijn
ext.store.search.ordering.byupdate.contenttitle=Recent Geupdate
ext.store.search.filter.clients=Clients
ext.store.search.filter.categories=Categorieën
ext.store.search.filter.frameworks=Frameworks
ext.store.search.info.automaticosfiltering=Info: er wordt automatisch gefilterd op je besturingssysteem
ext.store.category=Categorie
ext.store.overview.title=Geïnstalleerde Extensies
ext.store.overview.description=Extensies die reeds in G-Earth geïnstalleerd zijn
ext.store.overview.contenttitle=Geïnstalleerde extensies
ext.store.overview.folder=Open map
ext.store.categories.title=Categorieën
ext.store.categories.description=Doorzoek de verschillende soorten extensies die G-Earth aan te bieden heeft
ext.store.categories.contenttitle=Categorieën
ext.store.fail.unzip=Error bij het unzippen
ext.store.fail.invalidurl=Ongeldige extensie URL
ext.store.fail.notavailable=Extensie is niet beschikbaar in de repository
ext.store.fail.alreadyexists=Er ging iets mis bij het aanmaken van de map, bestaat de extensie al?
ext.store.fail.notfound=Extension kon niet worden gevonden
ext.store.fail.uninstall=Er ging iets mis met het deinstalleren van de extensie, zorg dat de je eerst de extensie's verbinding verbreekt indien deze nog aan stond.
ext.store.ordering.rating=Rating
ext.store.ordering.alphabetical=Alfabetisch
ext.store.ordering.lastupdated=Laatst geüpdatet
ext.store.ordering.newreleases=Nieuwe releases
### Internal extension - Logger
ext.logger.menu.window=Venster
ext.logger.menu.window.alwaysontop=Altijd bovenop
ext.logger.menu.window.onconnect=Bij verbinding
ext.logger.menu.window.onconnect.openwindow=Open venster
ext.logger.menu.window.onconnect.reset=Reset packetlogger
ext.logger.menu.window.ondisconnect=Bij verbinding verbroken
ext.logger.menu.window.ondisconnect.hidewindow=Verberg venster
ext.logger.menu.window.ondisconnect.reset=Reset packetlogger
ext.logger.menu.view=Weergave
ext.logger.menu.view.incoming=Geef binnenkomend weer
ext.logger.menu.view.outgoing=Geef uitgaand weer
ext.logger.menu.view.autoscroll=Autoscroll
ext.logger.menu.view.cleartext=Wis tekst
ext.logger.menu.packets=Packets
ext.logger.menu.packets.displaydetails=Geef details weer
ext.logger.menu.packets.displaydetails.byterep=Byte voorstelling
ext.logger.menu.packets.displaydetails.byterep.legacy=Legacy
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
ext.logger.menu.packets.displaydetails.byterep.rawhex=Raw hex
ext.logger.menu.packets.displaydetails.byterep.none=Geen
ext.logger.menu.packets.displaydetails.message=Message
ext.logger.menu.packets.displaydetails.message.name=Naam
ext.logger.menu.packets.displaydetails.message.hash=Hash
ext.logger.menu.packets.displaydetails.message.id=Id
ext.logger.menu.packets.displaydetails.structure=Structuur
ext.logger.menu.packets.displaydetails.timestamp=Tijdstempel
ext.logger.menu.packets.antispam=Anti-spam filter
ext.logger.menu.packets.antispam.none=Geen
ext.logger.menu.packets.antispam.low=Laag
ext.logger.menu.packets.antispam.med=Medium
ext.logger.menu.packets.antispam.high=Hoog
ext.logger.menu.packets.antispam.ultra=Ultra
ext.logger.menu.packets.skipbig=Grote packets overslaan
ext.logger.menu.packets.exportall=Exporteer alles
ext.logger.menu.packets.exportall.windowtitle=Bewaar Packets
ext.logger.menu.packets.exportall.filetype=TXT bestanden
ext.logger.state.packetinfo=Packet info
ext.logger.state.filtered=Gefilterd
ext.logger.element.timestamp=tijdstempel
ext.logger.element.blocked=Geblokkeerd
ext.logger.element.replaced=Vervangen
ext.logger.element.direction.outgoing=Binnenkomend
ext.logger.element.direction.incoming=Uitgaand
ext.logger.element.skipped=packet overgeslagen
ext.logger.state.true=True
ext.logger.state.false=False

View File

@ -0,0 +1,325 @@
# Portuguese (Translated by Alynva)
## Tabs
### Tab - Connection
tab.connection=Conexão
tab.connection.client=Tipo do cliente:
tab.connection.client.flash=Flash / Air
tab.connection.client.unity=Unity
tab.connection.client.nitro=Nitro
tab.connection.version=Versão do Hotel:
tab.connection.state=Estado da conexão:
tab.connection.state.notconnected=Não conectado
tab.connection.state.connected=Conectado
tab.connection.state.waiting=Esperando conexão
tab.connection.port=Porta:
tab.connection.host=Host:
tab.connection.button.connect=Conectar
tab.connection.button.abort=Abortar
tab.connection.autodetect=Autodetectar
### Tab - Injection
tab.injection=Injeção
tab.injection.corrupted=estaCorrompido
tab.injection.corrupted.true=Verdadeiro
tab.injection.corrupted.false=Falso
tab.injection.description.header=cabeçalho
tab.injection.description.packets=pacotes
tab.injection.description.id=id
tab.injection.description.length=comprimento
tab.injection.send.toserver=Enviar para o servidor
tab.injection.send.toclient=Enviar para o cliente
tab.injection.history=Histórico:
tab.injection.history.clear=Limpar
tab.injection.history.tooltip=Clique duas vezes em um pacote para restaurá-lo
tab.injection.log.packetwithid=Pacote com id
### Tab - Tools
tab.tools=Ferramentas
tab.tools.button.encode=Codificar
tab.tools.button.decode=Decodificar
tab.tools.type.integer=Inteiro
tab.tools.type.ushort=Ushort
tab.tools.encoding=Codificando
tab.tools.decoding=Decodificando
tab.tools.packet=Pacote
tab.tools.expression=Expressão
### Tab - Scheduler
tab.scheduler=Agendador
tab.scheduler.table.index=Índice
tab.scheduler.table.packet=Pacote
tab.scheduler.table.interval=Intervalo
tab.scheduler.table.destination=Destino
tab.scheduler.table.edit=Editar
tab.scheduler.setup.packet=Pacote
tab.scheduler.setup.interval=Intervalo
tab.scheduler.button.clear=Limpar
tab.scheduler.button.clear.tooltip=Limpar todos os itens
tab.scheduler.button.save=S
tab.scheduler.button.save.tooltip=Salvar para arquivo
tab.scheduler.button.save.windowtitle=Salvar arquivo do Agendador
tab.scheduler.button.load=C
tab.scheduler.button.load.tooltip=Carregar de um arquivo
tab.scheduler.button.load.windowtitle=Carregar arquivo do Agendador
tab.scheduler.button.add=Adc
tab.scheduler.button.edit=Editar
tab.scheduler.direction.in=Chegando
tab.scheduler.direction.out=Saindo
tab.scheduler.hotkeys=Habilitar atalhos (Ctrl+Shift+Index)
tab.scheduler.filetype=Arquivos do Agendador (*.sched)
### Tab - Extensions
tab.extensions=Extensões
tab.extensions.table.title=Título
tab.extensions.table.description=Descrição
tab.extensions.table.author=Autor
tab.extensions.table.version=Versão
tab.extensions.table.edit=Editar
tab.extensions.table.edit.delete.tooltip=Fechar conexão com esta extensão
tab.extensions.table.edit.restart.tooltip=Reiniciar esta extensão
tab.extensions.table.edit.uninstall.tooltip=Desinstalar esta extensão
tab.extensions.table.edit.uninstall.confirmation=Você tem certeza que deseja desinstalar esta extensão?
tab.extensions.port=Porta
tab.extensions.button.pythonshell=Terminal G-Python
tab.extensions.button.pythonshell.windowtitle=Terminal Scripting
tab.extensions.button.install=Instalar
tab.extensions.button.install.windowtitle=Instalar extensão
tab.extensions.button.install.filetype=Extensões G-Earth
tab.extensions.button.logs=Ver registros
tab.extensions.button.logs.windowtitle=Console de Extensões
### Tab - Extra
tab.extra=Extra
tab.extra.notepad=Anotações
tab.extra.troubleshooting=Resolução de problemas
tab.extra.options.alwaysontop=Manter no topo
tab.extra.options.staffpermissions=Permissões de staff no Cliente
tab.extra.options.pythonscripting=G-Python scripting
tab.extra.options.pythonscripting.alert.title=Instalação do G-Python
tab.extra.options.pythonscripting.alert.content=Antes de usar G-Python, instale os pacotes corretos usando pip!
tab.extra.options.pythonscripting.alert.moreinformation=Mais informações aqui:
tab.extra.options.advanced=Avançado
tab.extra.options.advanced.socks=Usar proxy SOCKS
tab.extra.options.advanced.proxy.ip=IP do proxy
tab.extra.options.advanced.proxy.port=Porta do proxy
tab.extra.options.advanced.disabledecryption=Desabilitar descriptografia
tab.extra.options.advanced.debugstdout=Debugar para stdout
### Tab - Info
tab.info=Info
tab.info.description=Manipulador de pacotes do Habbo para Linux, Windows e Mac
tab.info.donate=Doar BTC
tab.info.donate.alert.title=Doar Bitcoins
tab.info.donate.alert.content=Endereço público Bitcoin:
tab.info.createdby=Criado por
tab.info.links=Links
tab.info.contributors=Contribuidores
## Alert
### Alert - Confirmation
alert.confirmation.windowtitle=Aviso de confirmação
alert.confirmation.button.donotaskagain=Não pergunte novamente
alert.confirmation.button.remember=Lembrar minha escolha
### Alert - AdminValidator
alert.adminvalidator.content=G-Earth requer privilégios de administrador para funcionar no Flash,\n\
por favor reinicie o G-Earth com permissões de administrador a não ser que\n\
você esteja usando Unity
### Alert - Outdated
alert.outdated.title=G-Earth está desatualizado!
alert.outdated.content.newversion=Uma nova versão do G-Earth foi encontrada
alert.outdated.content.update=Atualizar para a versão mais recente
### Alert - Invalid connection
alert.invalidconnection.content=Você entrou com inforções de conexão inválidas, o G-Earth não conseguiu se conectar
### Alert - Nitro root certificate
alert.rootcertificate.title=Instalação de certificado do root
alert.rootcertificate.remember=Lembrar minha escolha
alert.rootcertificate.content=G-Earth detectou que você não possui o certificado de autoridade do root instalado.\n\
Isso é necessário para o Nitro funcionar, você deseja continuar?\n\
G-Earth vai te pedir pela permissão de Administrador se você fizer isso.
### Alert - Already connected
alert.alreadyconnected.content=G-Earth já está conectado com este hotel.\n\
Devido a limitações atuais você só consegue se conectar a uma sessão por hotel no G-Earth em modo IP Bruto no Windows.\n\
\n\
Você pode contornar isso utilizando um proxy SOCKS [Extra -> Avançado -> SOCKS]
### Alert - Something went wrong
alert.somethingwentwrong.title=Algo inesperado aconteceu!
alert.somethingwentwrong.content=Algo inesperado aconteceu!\n\
\n\
para nossa página de Solução de problemas para resolver o ocorrido:
### Alert - Allow extension connection
alert.extconnection.content=Exntesão "%s" tentou se conectar mas é desconcida pelo G-Earth,\n\
aceitar essa conexão?
### Alert - G-Python error
alert.gpythonerror.title=Erro G-Python
alert.gpythonerror.content=Algo inesperado aconteceu executando o terminal G-Python,\n\
você tem certeza que seguiu o guia de instalação corretamente?\n\
\n\
Mais informações aqui:
## Internal extension
### Internal extension - G-ExtensionStore
ext.store.elapsedtime.second.single=secondo
ext.store.elapsedtime.second.multiple=secondos
ext.store.elapsedtime.minute.single=minuto
ext.store.elapsedtime.minute.multiple=minutos
ext.store.elapsedtime.hour.single=hora
ext.store.elapsedtime.hour.multiple=horas
ext.store.elapsedtime.day.single=dia
ext.store.elapsedtime.day.multiple=dias
ext.store.elapsedtime.week.single=semana
ext.store.elapsedtime.week.multiple=semanas
ext.store.elapsedtime.month.single=mês
ext.store.elapsedtime.month.multiple=meses
ext.store.elapsedtime.year.single=ano
ext.store.elapsedtime.year.multiple=anos
ext.store.extension.version=Versão
ext.store.extension.rating=Avaliação
ext.store.extension.madeby=Por %s
ext.store.extension.lastupdated=última atualização %s atrás
ext.store.extension.notinstore=Não encontrado na G-ExtensionStore
ext.store.extension.details.description=Descrição
ext.store.extension.details.authors=Autor(es)
ext.store.extension.details.categories=Categorias
ext.store.extension.details.technical_information=Informação técnica
ext.store.extension.details.click_here=Clique aqui
ext.store.extension.details.releases=Lançamentos
ext.store.extension.details.language=Linguagem
ext.store.extension.details.source=Origem
ext.store.extension.details.framework=Framework
ext.store.extension.details.systems=Sistemas
ext.store.extension.details.clients=Clientes compatíveis
ext.store.extension.details.screenshot=Captura de tela
ext.store.extension.author.reputation=reputação
ext.store.extension.author.releases=lançamentos
ext.store.extension.warning.requirement=Aviso: o framework requer --url:instalações adicionais-
! IMPORTANT: the previous line has to end with the --url component like the english version
ext.store.extension.warning.unstable=Aviso: esta extensão foi marcada como instável!
ext.store.extension.status.await.install=Instalar extensão
ext.store.extension.status.await.install.message=Pressione "OK" e espere enquanto a extensão é instalada
ext.store.extension.status.await.update=Atualizar extensão
ext.store.extension.status.await.update.message=Pressione "OK" e espere enquanto a extensão é atualizada
ext.store.extension.status.success.install=Instalação completa
ext.store.extension.status.success.install.message=Instalação da extensão completa com sussesso
ext.store.extension.status.success.update=Atualização completa
ext.store.extension.status.success.update.message=Instalação da extensão completa com sucesso
ext.store.extension.status.error.install=Instalação falhou
ext.store.extension.status.error.install.message=Instalação falhou com a seguinte mensagem
ext.store.extension.status.error.update=Atualização falhou
ext.store.extension.status.error.update.message=Atualização falhou com a seguinte mensagem
ext.store.button.search=Buscar
ext.store.button.install=Instalar
ext.store.button.installed=Instalado
ext.store.button.update=Atualizar
ext.store.search.title=Buscar
ext.store.search.description=Encontre a extensão que se adequa às suas necessidades
ext.store.search.contenttitle=Buscar extensões
ext.store.search.bykeyword=Buscar por palavra-chave
ext.store.search.results=Resultados da busca
ext.store.search.ordering=Ordenação das extensões
ext.store.search.ordering.bydate.title=Novos lançamentos
ext.store.search.ordering.bydate.description=Extensões que foram recentemente adicionadas à G-ExtensionStore
ext.store.search.ordering.bydate.contenttitle=Novos lançamentos
ext.store.search.ordering.byrating.title=Extensões populares
ext.store.search.ordering.byrating.description=Extensões ordenadas pela avaliação
ext.store.search.ordering.byrating.contenttitle=Extensões populares
ext.store.search.ordering.byupdate.title=Recentemente atualizadas
ext.store.search.ordering.byupdate.description=Extensões que foram atualizadas recentemente
ext.store.search.ordering.byupdate.contenttitle=Recentemente atualizadas
ext.store.search.filter.clients=Clientes
ext.store.search.filter.categories=Categorias
ext.store.search.filter.frameworks=Frameworks
ext.store.search.info.automaticosfiltering=Info: você é automaticamente filtrado pelo SO que você usa
ext.store.category=Categoria
ext.store.overview.title=Extensões instaladas
ext.store.overview.description=Extensões que já estão instaladas no G-Earth
ext.store.overview.contenttitle=Extensões instaladas
ext.store.overview.folder=Abrir pasta
ext.store.categories.title=Categorias
ext.store.categories.description=Explore os diferentes tipos de extensões que o G-Earth tem a oferecer
ext.store.categories.contenttitle=Categorias
ext.store.fail.unzip=Error while unzipping
ext.store.fail.invalidurl=Invalid extension URL
ext.store.fail.notavailable=Extension not available in repository
ext.store.fail.alreadyexists=Something went wrong creating the extension directory, does the extension already exist?
ext.store.fail.notfound=Extension wasn't found
ext.store.fail.uninstall=Something went wrong with uninstalling the extension, make sure to disconnect the extension if it was still running.
ext.store.ordering.rating=Rating
ext.store.ordering.alphabetical=Alphabetical
ext.store.ordering.lastupdated=Last updated
ext.store.ordering.newreleases=New releases
### Internal extension - Logger
ext.logger.menu.window=Janela
ext.logger.menu.window.alwaysontop=Sempre no topo
ext.logger.menu.window.onconnect=Quando conectar
ext.logger.menu.window.onconnect.openwindow=Abrir janela
ext.logger.menu.window.onconnect.reset=Redefinir registro de pacotes
ext.logger.menu.window.ondisconnect=Quando desconectar
ext.logger.menu.window.ondisconnect.hidewindow=Ocultar janela
ext.logger.menu.window.ondisconnect.reset=Redefinir registro de pacotes
ext.logger.menu.view=Ver
ext.logger.menu.view.incoming=Ver chegando
ext.logger.menu.view.outgoing=Ver saindo
ext.logger.menu.view.autoscroll=Rolagem automática
ext.logger.menu.view.cleartext=Limpar texto
ext.logger.menu.packets=Pacotes
ext.logger.menu.packets.displaydetails=Detalhes de exibição
ext.logger.menu.packets.displaydetails.byterep=Representação em byte
ext.logger.menu.packets.displaydetails.byterep.legacy=Legado
ext.logger.menu.packets.displaydetails.byterep.hexdump=Hexdump
ext.logger.menu.packets.displaydetails.byterep.rawhex=Hex cru
ext.logger.menu.packets.displaydetails.byterep.none=Nenhum
ext.logger.menu.packets.displaydetails.message=Menssagem
ext.logger.menu.packets.displaydetails.message.name=Nome
ext.logger.menu.packets.displaydetails.message.hash=Hash
ext.logger.menu.packets.displaydetails.message.id=Id
ext.logger.menu.packets.displaydetails.structure=Estrutura
ext.logger.menu.packets.displaydetails.timestamp=Momento
ext.logger.menu.packets.antispam=Filtro anti-spam
ext.logger.menu.packets.antispam.none=Nenhum
ext.logger.menu.packets.antispam.low=Baixo
ext.logger.menu.packets.antispam.med=Médio
ext.logger.menu.packets.antispam.high=Alto
ext.logger.menu.packets.antispam.ultra=Ultra
ext.logger.menu.packets.skipbig=Pular pacotes grandes
ext.logger.menu.packets.exportall=Exportar todos
ext.logger.menu.packets.exportall.windowtitle=Salvar Pacotes
ext.logger.menu.packets.exportall.filetype=Arquivos TXT
ext.logger.state.packetinfo=Informação do pacote
ext.logger.state.filtered=Filtrado
ext.logger.element.timestamp=momento
ext.logger.element.blocked=Bloqueado
ext.logger.element.replaced=Substituído
ext.logger.element.direction.outgoing=Saindo
ext.logger.element.direction.incoming=Chegando
ext.logger.element.skipped=pacote pulado
ext.logger.state.true=True
ext.logger.state.false=False

View File

@ -0,0 +1,326 @@
# Turkish (Translated by Curly!.)
## Tabs
### Tab - Connection
tab.connection =Bağlantı
tab.connection.client =Sunucu Türü:
tab.connection.client.flash =Flash / Air
tab.connection.client.unity =Unity
tab.connection.client.nitro =Nitro
tab.connection.version =Hotel Türü:
tab.connection.state =Bağlantı Durumu:
tab.connection.state.notconnected =Bağlı değil
tab.connection.state.connected=Bağlandı
tab.connection.state.waiting=Bağlantı bekleniyor
tab.connection.port=Port:
tab.connection.host=Host:
tab.connection.button.connect=Bağlan
tab.connection.button.abort=İptal
tab.connection.autodetect=Otomatik Tespit Et
### Tab - Injection
tab.injection=Enjeksiyon
tab.injection.corrupted=Bozulmuş
tab.injection.corrupted.true=Doğru
tab.injection.corrupted.false=Yanlış
tab.injection.description.header=header
tab.injection.description.packets=paketler
tab.injection.description.id=id
tab.injection.description.length=uzunluk
tab.injection.send.toserver=Server a yolla
tab.injection.send.toclient=Client a yolla
tab.injection.history=Geçmiş:
tab.injection.history.clear=Temizle
tab.injection.history.tooltip=Bir paketi geri yüklemek için çift tıklayın
tab.injection.log.packetwithid=ID'li paket
### Tab - Tools
tab.tools=Araçlar
tab.tools.button.encode=Kodlamak
tab.tools.button.decode=Kodu çözmek
tab.tools.type.integer=Tamsayı
tab.tools.type.ushort=Kısa
tab.tools.encoding=Kodlamak
tab.tools.decoding=Kodu çözmek
tab.tools.packet=Paket
tab.tools.expression=Anlatım
### Tab - Scheduler
tab.scheduler=Zamanlayıcı
tab.scheduler.table.index=Indeks
tab.scheduler.table.packet=Paket
tab.scheduler.table.interval=Aralık
tab.scheduler.table.destination=Mesafe
tab.scheduler.table.edit=Edit
tab.scheduler.setup.packet=Paket
tab.scheduler.setup.interval=Aralık
tab.scheduler.button.clear=Temizle
tab.scheduler.button.clear.tooltip=Tüm itemleri temizle
tab.scheduler.button.save=S
tab.scheduler.button.save.tooltip=Dosyayı kaydetmek için
tab.scheduler.button.save.windowtitle=Programlı dosyayı kaydet
tab.scheduler.button.load=L
tab.scheduler.button.load.tooltip=Dosya dan yükle
tab.scheduler.button.load.windowtitle=Program Dosyasını Yükle
tab.scheduler.button.add=Ekle
tab.scheduler.button.edit=Editle
tab.scheduler.direction.in=İçeri
tab.scheduler.direction.out=Dışarı
tab.scheduler.hotkeys=Kısayol tuşlarını etkinleştir (Ctrl+Shift+Index)
tab.scheduler.filetype =Dosyaları planla(*.sched)
### Tab - Extensions
tab.extensions =Uzantılar
tab.extensions.table.title =Başlık
tab.extensions.table.description =ıklama
tab.extensions.table.author =Yazar
tab.extensions.table.version =Versiyon
tab.extensions.table.edit =Editle
tab.extensions.table.edit.delete.tooltip =Bu uzantı ile olan bağlantıyı kes
tab.extensions.table.edit.restart.tooltip=Bu uzantıyı yeniden başlat
tab.extensions.table.edit.uninstall.tooltip=Bu uzantıyı kaldır
tab.extensions.table.edit.uninstall.confirmation=Bu uzantıyı kaldırmak istediğinizden emin misiniz?
tab.extensions.port=Port
tab.extensions.button.pythonshell=G-Python kabuğu
tab.extensions.button.pythonshell.windowtitle=Komut dosyası kabuğu
tab.extensions.button.install=İndir
tab.extensions.button.install.windowtitle=Uzantıyı indir
tab.extensions.button.install.filetype=G-Earth Uzantıları
tab.extensions.button.logs=Logları görüntüle
tab.extensions.button.logs.windowtitle=Uzantı konsolu
### Tab - Extra
tab.extra=Ekstra
tab.extra.notepad=Not dosyası
tab.extra.troubleshooting=Sorun giderme
tab.extra.options.alwaysontop=Her zaman üstte
tab.extra.options.staffpermissions=İstemci tarafı personel izinleri
tab.extra.options.pythonscripting=G-Python scripting
tab.extra.options.pythonscripting.alert.title=G-Python Kurulum
tab.extra.options.pythonscripting.alert.content=G-Python'u kullanmadan önce pip kullanarak doğru paketleri kurun!
tab.extra.options.pythonscripting.alert.moreinformation =Daha fazla bilgi için:
tab.extra.options.advanced =İleri
tab.extra.options.advanced.socks =SOCKS proxy kullanın
tab.extra.options.advanced.proxy.ip=Proxy IP
tab.extra.options.advanced.proxy.port=Proxy port
tab.extra.options.advanced.disabledecryption=Şifre çözmeyi devre dışı bırak
tab.extra.options.advanced.debugstdout=stdout'ta hata ayıklama
### Tab - Info
tab.info=Bilgi
tab.info.description=Linux, Windows ve Mac için Habbo paket manipülatörü
tab.info.donate=BTC ile bağış yapın
tab.info.donate.alert.title=Bitcoin bağışlayın
tab.info.donate.alert.content=Bitcoin bağış adresi:
tab.info.createdby=Kurucu
tab.info.links=Linkler
tab.info.contributors=Katkıda bulunanlar
## Alert
### Alert - Onayla
alert.confirmation.windowtitle=Diyaloğu onayla
alert.confirmation.button.donotaskagain=Tekrar sorma
alert.confirmation.button.remember=Tercihimi hatırla
### Alert - AdminValidator
alert.adminvalidator.content=G-Earth'ün Flash üzerinde çalışabilmesi için yönetici ayrıcalıklarına ihtiyacı var,\n\
lütfen G-Earth'i yönetici izinleriyle yeniden başlatın, aksi takdirde\n\
Unity'yi kullanıyorsun
### Alert - Eski versiyon
alert.outdated.title=G-Earth Eski versiyon!
alert.outdated.content.newversion=G-Earth için yeni bir versiyon bulundu
alert.outdated.content.update=Son versiyona güncelle
### Alert - Geçersiz bağlantı
alert.invalidconnection.content=Geçersiz bağlantı bilgisi girdiniz, G-Earth bağlanamadı
### Alert - Nitro root certificate
alert.rootcertificate.title=Kök sertifika kurulumu
alert.rootcertificate.remember=Tercihimi hatırla
alert.rootcertificate.content=G-Earth, kök sertifika yetkilinizin kurulu olmadığını tespit etti.\n\
Nitro'nun çalışması için bu gerekli, devam etmek istiyor musunuz?\n\
Bunu yaparsanız G-Earth sizden Yönetici izni isteyecektir.
### Alert - Zaten bağlı
alert.alreadyconnected.content=G-Earth bu otele zaten bağlı.\n\
Mevcut sınırlamalar nedeniyle, Windows'ta Ham IP modunda G-Earth'e otel başına yalnızca bir oturum bağlayabilirsiniz.\n\
\n\
Bunu bir SOCKS proxy'si kullanarak atlayabilirsiniz.[Extra->Advanced->SOCKS]
### Alert - Something went wrong
alert.somethingwentwrong.title =Bir şeyler yanlış gitti!
alert.somethingwentwrong.content=Bir şeyler yanlış!\n\
\n\
Sorunu çözmek için Sorun Giderme sayfamıza gidin:
### Alert - Uzantı bağlantısına izin ver
alert.extconnection.content =%s" uzantısı bağlanmaya çalışıyor ancak G-Earth tarafından bilinmiyor,\n\
Bu bağlantıyı kabul ediyor musunuz?
### Alert - G-Python error
alert.gpythonerror.title=G-Python hata
alert.gpythonerror.content=Python kabuğu başlatılırken bir şeyler ters gitti,\n\
kurulum kılavuzunu doğru izlediğinizden emin misiniz?\n\
\n\
Daha fazla bilgi burada:
## Internal extension
### Internal extension - G-ExtensionStore
ext.store.elapsedtime.second.single =saniye
ext.store.elapsedtime.second.multiple =saniyeler
ext.store.elapsedtime.minute.single =dakika
ext.store.elapsedtime.minute.multiple =dakikalar
ext.store.elapsedtime.hour.single =saat
ext.store.elapsedtime.hour.multiple =saatler
ext.store.elapsedtime.day.single =gün
ext.store.elapsedtime.day.multiple =günler
ext.store.elapsedtime.week.single =hafta
ext.store.elapsedtime.week.multiple =haftalar
ext.store.elapsedtime.month.single =ay
ext.store.elapsedtime.month.multiple =aylar
ext.store.elapsedtime.year.single =yıl
ext.store.elapsedtime.year.multiple =yıllar
ext.store.extension.version =Versiyon
ext.store.extension.rating =Değerlendirme
ext.store.extension.madeby =%s ile
ext.store.extension.lastupdated =en son %s önce güncellendi
ext.store.extension.notinstore=G-ExtensionStore da bulunamadı
ext.store.extension.details.description=ıklama
ext.store.extension.details.authors=Yazar(lar)
ext.store.extension.details.categories=Kategoriler
ext.store.extension.details.technical_information=Teknik Bilgiler
ext.store.extension.details.click_here=Buraya tıkla
ext.store.extension.details.releases=Çıkanlar
ext.store.extension.details.language=Dil
ext.store.extension.details.source=Kaynak
ext.store.extension.details.framework=Çerçeve
ext.store.extension.details.systems=Sistemler
ext.store.extension.details.clients=Uyumlu istemciler
ext.store.extension.details.screenshot=Ekran Görüntüsü
ext.store.extension.author.reputation=itibar
ext.store.extension.author.releases=çıkanlar
ext.store.extension.warning.requirement=Uyarı: çerçeve --url:ek kurulumlar gerektirir-
! ÖNEMLİ: Bir önceki satırın ingilizce versiyonunda olduğu gibi --url bileşeni ile bitmesi gerekir.
ext.store.extension.warning.unstable=Uyarı: bu uzantı kararsız olarak işaretlendi!
ext.store.extension.status.await.install=Uzantıyı indir
ext.store.extension.status.await.install.message="Tamam" a basın ve uzantı kurulurken bekleyin
ext.store.extension.status.await.update=Uzantıyı güncelle
ext.store.extension.status.await.update.message="Tamam" a basın ve uzantı güncellenmeye başlarken bekleyin
ext.store.extension.status.success.install=İndirme tamamlandı
ext.store.extension.status.success.install.message=Uzantı yüklemesi başarıyla tamamlandı
ext.store.extension.status.success.update=Güncelleme tamamlandı
ext.store.extension.status.success.update.message=Uzantı güncellemesi başarıyla tamamlandı
ext.store.extension.status.error.install=Yükleme başarısız
ext.store.extension.status.error.install.message=Yükleme aşağıdaki mesajla başarısız oldu
ext.store.extension.status.error.update=Güncelleme başarısız
ext.store.extension.status.error.update.message=Güncelleme aşağıdaki mesajla başarısız oldu
ext.store.button.search=Ara
ext.store.button.install=Yükle
ext.store.button.installed=Yüklendi
ext.store.button.update=Güncelle
ext.store.search.title=Ara
ext.store.search.description=İhtiyaçlarınıza uyan uzantıyı bulun
ext.store.search.contenttitle=Uzantı Ara
ext.store.search.bykeyword=Anahtar kelime ile ara
ext.store.search.results=Sonuçları görüntüle
ext.store.search.ordering=Uzantı alma
ext.store.search.ordering.bydate.title=Yeni çıkanlar
ext.store.search.ordering.bydate.description=G-ExtensionStore'a yakın zamanda eklenen uzantılar
ext.store.search.ordering.bydate.contenttitle=Yeni çıkanlar
ext.store.search.ordering.byrating.title=Popüler uzantılar
ext.store.search.ordering.byrating.description=Derecelendirmeye göre sıralanmış uzantılar
ext.store.search.ordering.byrating.contenttitle=Popüler Uzantılar
ext.store.search.ordering.byupdate.title=Yeni Güncellenmiş
ext.store.search.ordering.byupdate.description=Yakın zamanda güncellenen uzantılar
ext.store.search.ordering.byupdate.contenttitle=Yeni Güncellenmiş
ext.store.search.filter.clients=Client\\'ler
ext.store.search.filter.categories=Kategoriler
ext.store.search.filter.frameworks=Çerçeveler
ext.store.search.info.automaticosfiltering=Bilgi: kullandığınız işletim sistemine otomatik olarak filtre uyguluyorsunuz
ext.store.category=Category
ext.store.overview.title=Yüklenmiş Uzantılar
ext.store.overview.description=G-Earth'te zaten yüklü olan uzantılar
ext.store.overview.contenttitle=Yüklenmiş Uzantılar
ext.store.overview.folder=Dosyayı
ext.store.categories.title=Kategoriler
ext.store.categories.description=G-Earth'ün sunduğu farklı uzantı türlerini keşfedin
ext.store.categories.contenttitle=Kategoriler
ext.store.fail.unzip=ılırken hata oluştu
ext.store.fail.invalidurl=Geçersiz uzantı URL'si
ext.store.fail.notavailable=Uzantı depoda mevcut değil
ext.store.fail.alreadyexists=Uzantı dizini oluşturulurken bir şeyler ters gitti, uzantı zaten mevcut mu?
ext.store.fail.notfound=Uzantı bulunamadı
ext.store.fail.uninstall=Uzantıyı kaldırırken bir şeyler ters gitti, hala çalışıyorsa uzantının bağlantısını kestiğinizden emin olun.
ext.store.ordering.rating=Değerlendirme
ext.store.ordering.alphabetical=Alfabetik
ext.store.ordering.lastupdated=Son güncellenmiş
ext.store.ordering.newreleases=Yeni çıkanlar
### Internal extension - Logger
ext.logger.menu.window=Pencere
ext.logger.menu.window.alwaysontop=Her zaman yukarıda
ext.logger.menu.window.onconnect=Bağlantıda
ext.logger.menu.window.onconnect.openwindow=Pencereyi aç
ext.logger.menu.window.onconnect.reset=Paket kaydediciyi sıfırla
ext.logger.menu.window.ondisconnect=Bağlantı kesildiğinde
ext.logger.menu.window.ondisconnect.hidewindow=Pencereyi gizle
ext.logger.menu.window.ondisconnect.reset=Paket kaydediciyi sıfırla
ext.logger.menu.view=Göster
ext.logger.menu.view.incoming=Gelenleri görüntüle
ext.logger.menu.view.outgoing=Gidenleri görüntüle
ext.logger.menu.view.autoscroll=Otomatik kaydırma
ext.logger.menu.view.cleartext=Metni temizle
ext.logger.menu.packets=Paketler
ext.logger.menu.packets.displaydetails=Ayrıntıları görüntüle
ext.logger.menu.packets.displaydetails.byterep=bayt temsili
ext.logger.menu.packets.displaydetails.byterep.legacy=Kalıt
ext.logger.menu.packets.displaydetails.byterep.hexdump=altılı döküm
ext.logger.menu.packets.displaydetails.byterep.rawhex=ham altıgen
ext.logger.menu.packets.displaydetails.byterep.none=Hiçbiri
ext.logger.menu.packets.displaydetails.message=Mesaj
ext.logger.menu.packets.displaydetails.message.name=İsim
ext.logger.menu.packets.displaydetails.message.hash=Doğramak
ext.logger.menu.packets.displaydetails.message.id=Id
ext.logger.menu.packets.displaydetails.structure=Yapı
ext.logger.menu.packets.displaydetails.timestamp=Zaman damgası
ext.logger.menu.packets.antispam=Anti-spam filtresi
ext.logger.menu.packets.antispam.none=Hiçbiri
ext.logger.menu.packets.antispam.low=Düşük
ext.logger.menu.packets.antispam.med=Orta
ext.logger.menu.packets.antispam.high=Yüksek
ext.logger.menu.packets.antispam.ultra=Ultra Yüksek
ext.logger.menu.packets.skipbig=Büyük paketleri es geç
ext.logger.menu.packets.exportall=Tümünü dışa aktar
ext.logger.menu.packets.exportall.windowtitle=Paketleri Kaydet
ext.logger.menu.packets.exportall.filetype=TXT dosyaları
ext.logger.state.packetinfo=Paket bilgisi
ext.logger.state.filtered=Filtrelendi
ext.logger.element.timestamp=zaman damgası
ext.logger.element.blocked=Engellendi
ext.logger.element.replaced=Yeniden yerleştirildi
ext.logger.element.direction.outgoing=Dışarı çıkan
ext.logger.element.direction.incoming=İçeri giren
ext.logger.element.skipped=Paket es geçildi
ext.logger.state.true=Doğru
ext.logger.state.false=Yanlış