diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStoreProvider.java index a4dcd895a..19d6829ba 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStoreProvider.java @@ -96,7 +96,7 @@ public abstract class AbstractServiceStoreProvider implements SingletonSessionSt () -> { var desc = formatService(s); var type = s.getServiceProtocolType() != null - && !(s.getServiceProtocolType() instanceof ServiceProtocolType.None) + && !(s.getServiceProtocolType() instanceof ServiceProtocolType.Undefined) ? AppI18n.get(s.getServiceProtocolType().getTranslationKey()) : null; var state = !s.requiresTunnel() diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceCopyUrlAction.java b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceCopyAddressAction.java similarity index 93% rename from ext/base/src/main/java/io/xpipe/ext/base/service/ServiceCopyUrlAction.java rename to ext/base/src/main/java/io/xpipe/ext/base/service/ServiceCopyAddressAction.java index e7deccd61..4d8205bde 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceCopyUrlAction.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceCopyAddressAction.java @@ -9,7 +9,7 @@ import javafx.beans.value.ObservableValue; import lombok.Value; -public class ServiceCopyUrlAction implements ActionProvider { +public class ServiceCopyAddressAction implements ActionProvider { @Override public LeafDataStoreCallSite getLeafDataStoreCallSite() { @@ -37,7 +37,7 @@ public class ServiceCopyUrlAction implements ActionProvider { @Override public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("copyUrl"); + return AppI18n.observable("copyAddress"); } @Override @@ -59,7 +59,7 @@ public class ServiceCopyUrlAction implements ActionProvider { ? serviceStore.getSession().getLocalPort() : serviceStore.getRemotePort(); var base = "localhost:" + l; - var full = serviceStore.getServiceProtocolType().formatUrl(base); + var full = serviceStore.getServiceProtocolType().formatAddress(base); ClipboardHelper.copyUrl(full); } } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceOpenAction.java b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceOpenAction.java index 325a7c9d9..072180da5 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceOpenAction.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceOpenAction.java @@ -34,7 +34,7 @@ public class ServiceOpenAction implements ActionProvider { ? serviceStore.getSession().getLocalPort() : serviceStore.getRemotePort(); var base = "localhost:" + l; - var full = serviceStore.getServiceProtocolType().formatUrl(base); + var full = serviceStore.getServiceProtocolType().formatAddress(base); serviceStore.getServiceProtocolType().open(full); } } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceProtocolType.java b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceProtocolType.java index 3f6032cc2..b145c9b90 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceProtocolType.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceProtocolType.java @@ -1,25 +1,35 @@ package io.xpipe.ext.base.service; +import io.xpipe.app.issue.ErrorEvent; +import io.xpipe.app.prefs.AppPrefs; +import io.xpipe.app.prefs.ExternalApplicationHelper; +import io.xpipe.app.util.CommandSupport; import io.xpipe.app.util.Hyperlinks; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import io.xpipe.app.util.LocalShell; +import io.xpipe.core.process.CommandBuilder; +import io.xpipe.core.process.OsType; import lombok.Builder; import lombok.Value; import lombok.extern.jackson.Jacksonized; +import java.util.Locale; + @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") @JsonSubTypes({ - @JsonSubTypes.Type(value = ServiceProtocolType.None.class), + @JsonSubTypes.Type(value = ServiceProtocolType.Undefined.class), @JsonSubTypes.Type(value = ServiceProtocolType.Http.class), - @JsonSubTypes.Type(value = ServiceProtocolType.Https.class) + @JsonSubTypes.Type(value = ServiceProtocolType.Https.class), + @JsonSubTypes.Type(value = ServiceProtocolType.Custom.class) }) public interface ServiceProtocolType { - String formatUrl(String base); + String formatAddress(String base); - void open(String url); + void open(String url) throws Exception; String getTranslationKey(); @@ -27,10 +37,10 @@ public interface ServiceProtocolType { @Value @Jacksonized @Builder - class None implements ServiceProtocolType { + class Undefined implements ServiceProtocolType { @Override - public String formatUrl(String base) { + public String formatAddress(String base) { return base; } @@ -39,7 +49,7 @@ public interface ServiceProtocolType { @Override public String getTranslationKey() { - return "none"; + return "undefined"; } } @@ -52,7 +62,7 @@ public interface ServiceProtocolType { String path; @Override - public String formatUrl(String base) { + public String formatAddress(String base) { var url = "http://" + base; if (path != null && !path.isEmpty()) { url += (!path.startsWith("/") ? "/" : "") + path; @@ -80,7 +90,7 @@ public interface ServiceProtocolType { String path; @Override - public String formatUrl(String base) { + public String formatAddress(String base) { var url = "https://" + base; if (path != null && !path.isEmpty()) { url += (!path.startsWith("/") ? "/" : "") + path; @@ -98,4 +108,40 @@ public interface ServiceProtocolType { return "https"; } } + + + @JsonTypeName("custom") + @Value + @Jacksonized + @Builder + class Custom implements ServiceProtocolType { + + String commandTemplate; + + @Override + public String formatAddress(String base) { + return base; + } + + @Override + public void open(String url) throws Exception { + if (commandTemplate == null || commandTemplate.isBlank()) { + return; + } + + var format = commandTemplate.toLowerCase(Locale.ROOT).contains("$address") ? commandTemplate : commandTemplate + " $ADDRESS"; + try (var pc = LocalShell.getShell().start()) { + var toExecute = ExternalApplicationHelper.replaceFileArgument(format, "ADDRESS", url); + var command = CommandBuilder.of().add(toExecute); + // We can't be sure whether the command is blocking or not, so always make it not blocking + command = pc.getShellDialect().launchAsnyc(command); + pc.command(command).execute(); + } + } + + @Override + public String getTranslationKey() { + return "custom"; + } + } } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceProtocolTypeHelper.java b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceProtocolTypeHelper.java index 326ec6688..fd8bf14a1 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceProtocolTypeHelper.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceProtocolTypeHelper.java @@ -1,18 +1,41 @@ package io.xpipe.ext.base.service; +import io.xpipe.app.comp.Comp; +import io.xpipe.app.comp.CompStructure; +import io.xpipe.app.comp.base.TextFieldComp; import io.xpipe.app.core.AppI18n; import io.xpipe.app.util.OptionsBuilder; -import javafx.beans.property.Property; -import javafx.beans.property.SimpleIntegerProperty; -import javafx.beans.property.SimpleObjectProperty; -import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.*; import javafx.beans.value.ObservableValue; +import javafx.scene.control.TextField; import java.util.LinkedHashMap; public class ServiceProtocolTypeHelper { + private static OptionsBuilder custom(Property p) { + var firstFocus = new SimpleBooleanProperty(false); + var path = new SimpleStringProperty(p.getValue() != null ? p.getValue().getCommandTemplate() : null); + var comp = new TextFieldComp(path).apply(struc -> { + struc.get().focusedProperty().addListener((observable, oldValue, newValue) -> { + if (!firstFocus.get()) { + struc.get().getParent().requestFocus(); + firstFocus.set(true); + } + }); + struc.get().setPromptText("mycommand open $ADDRESS"); + }); + return new OptionsBuilder() + .nameAndDescription("serviceCommand") + .addComp(comp, path) + .bind( + () -> { + return new ServiceProtocolType.Custom(path.get()); + }, + p); + } + private static OptionsBuilder http(Property p) { var path = new SimpleStringProperty(p.getValue() != null ? p.getValue().getPath() : null); return new OptionsBuilder() @@ -41,25 +64,29 @@ public class ServiceProtocolTypeHelper { var ex = serviceProtocolType.getValue(); var http = new SimpleObjectProperty<>(ex instanceof ServiceProtocolType.Http h ? h : null); var https = new SimpleObjectProperty<>(ex instanceof ServiceProtocolType.Https h ? h : null); + var custom = new SimpleObjectProperty<>(ex instanceof ServiceProtocolType.Custom c ? c : null); var selected = new SimpleIntegerProperty( - ex instanceof ServiceProtocolType.None + ex instanceof ServiceProtocolType.Undefined ? 0 : ex instanceof ServiceProtocolType.Http ? 1 - : ex instanceof ServiceProtocolType.Https ? 2 : -1); + : ex instanceof ServiceProtocolType.Https ? 2 : + ex instanceof ServiceProtocolType.Custom ? 3 : -1); var available = new LinkedHashMap, OptionsBuilder>(); - available.put(AppI18n.observable("none"), new OptionsBuilder()); + available.put(AppI18n.observable("undefined"), new OptionsBuilder()); available.put(AppI18n.observable("http"), http(http)); available.put(AppI18n.observable("https"), https(https)); + available.put(AppI18n.observable("custom"), custom(custom)); return new OptionsBuilder() .nameAndDescription("serviceProtocolType") .choice(selected, available) .bindChoice( () -> { return switch (selected.get()) { - case 0 -> new SimpleObjectProperty<>(new ServiceProtocolType.None()); + case 0 -> new SimpleObjectProperty<>(new ServiceProtocolType.Undefined()); case 1 -> http; case 2 -> https; + case 3 -> custom; default -> new SimpleObjectProperty<>(); }; }, diff --git a/ext/base/src/main/java/module-info.java b/ext/base/src/main/java/module-info.java index 9d86dc347..6b6d06123 100644 --- a/ext/base/src/main/java/module-info.java +++ b/ext/base/src/main/java/module-info.java @@ -81,7 +81,7 @@ open module io.xpipe.ext.base { StorePauseAction, StoreRestartAction, ServiceOpenAction, - ServiceCopyUrlAction, + ServiceCopyAddressAction, CloneStoreAction, RefreshChildrenStoreAction, RunScriptActionMenu, diff --git a/lang/strings/translations_da.properties b/lang/strings/translations_da.properties index a6d9cfa58..184e7befd 100644 --- a/lang/strings/translations_da.properties +++ b/lang/strings/translations_da.properties @@ -1263,7 +1263,9 @@ updateNagTitle=Påmindelse om opdatering updateNagButton=Se udgivelser refreshServices=Opdater tjenester serviceProtocolType=Type serviceprotokol -serviceProtocolTypeDescription=Den protokol, der skal bruges til at åbne tjenesten +serviceProtocolTypeDescription=Kontrollerer, hvordan man åbner tjenesten +serviceCommand=Den kommando, der skal køres, når tjenesten er aktiv +serviceCommandDescription=Pladsholderen $ADDRESS vil blive erstattet med den faktiske tunnelerede adresse value=Værdi showAdvancedOptions=Vis avancerede indstillinger sshAdditionalConfigOptions=Yderligere konfigurationsmuligheder @@ -1272,3 +1274,5 @@ clearUserData=Sletning af brugerdata clearUserDataDescription=Slet alle brugerkonfigurationsdata, herunder forbindelser clearUserDataTitle=Sletning af brugerdata clearUserDataContent=Dette vil slette alle lokale brugerdata for xpipe og genstarte. Hvis du er interesseret i dine forbindelser, skal du sørge for at synkronisere dem først med et git-repository. +undefined=Udefineret +copyAddress=Kopier adresse diff --git a/lang/strings/translations_de.properties b/lang/strings/translations_de.properties index 2d161d398..b1f2a5600 100644 --- a/lang/strings/translations_de.properties +++ b/lang/strings/translations_de.properties @@ -1245,7 +1245,9 @@ updateNagTitle=Update-Erinnerung updateNagButton=Siehe Veröffentlichungen refreshServices=Dienste aktualisieren serviceProtocolType=Dienstprotokolltyp -serviceProtocolTypeDescription=Das Protokoll, das zum Öffnen des Dienstes verwendet wird +serviceProtocolTypeDescription=Steuern, wie der Dienst geöffnet werden soll +serviceCommand=Der Befehl, der ausgeführt wird, sobald der Dienst aktiv ist +serviceCommandDescription=Der Platzhalter $ADDRESS wird durch die tatsächliche getunnelte Adresse ersetzt value=Wert showAdvancedOptions=Erweiterte Optionen anzeigen sshAdditionalConfigOptions=Zusätzliche Konfigurationsoptionen @@ -1254,3 +1256,5 @@ clearUserData=Benutzerdaten löschen clearUserDataDescription=Löschen aller Benutzerkonfigurationsdaten, einschließlich der Verbindungen clearUserDataTitle=Löschung von Benutzerdaten clearUserDataContent=Dadurch werden alle lokalen Benutzerdaten für xpipe gelöscht und neu gestartet. Wenn du dich um deine Verbindungen sorgst, solltest du sie vorher mit einem Git-Repository synchronisieren. +undefined=Undefiniert +copyAddress=Adresse kopieren diff --git a/lang/strings/translations_en.properties b/lang/strings/translations_en.properties index c36113201..4e4af9b13 100644 --- a/lang/strings/translations_en.properties +++ b/lang/strings/translations_en.properties @@ -1266,7 +1266,9 @@ updateNagTitle=Update reminder updateNagButton=See releases refreshServices=Refresh services serviceProtocolType=Service protocol type -serviceProtocolTypeDescription=The protocol to use to open the service +serviceProtocolTypeDescription=Control how to open the service +serviceCommand=The command to run once the service is active +serviceCommandDescription=The placeholder $ADDRESS will be replaced with the actual tunneled address value=Value showAdvancedOptions=Show advanced options sshAdditionalConfigOptions=Additional config options @@ -1275,3 +1277,5 @@ clearUserData=Delete user data clearUserDataDescription=Delete all user configuration data, including connections clearUserDataTitle=User data deletion clearUserDataContent=This will delete all local user data for xpipe and restart. If you care about your connections, make sure to synchronize them first with a git repository. +undefined=Undefined +copyAddress=Copy address diff --git a/lang/strings/translations_es.properties b/lang/strings/translations_es.properties index 5ebfd727e..5608b0bda 100644 --- a/lang/strings/translations_es.properties +++ b/lang/strings/translations_es.properties @@ -1216,7 +1216,9 @@ updateNagTitle=Recordatorio de actualización updateNagButton=Ver liberaciones refreshServices=Actualizar servicios serviceProtocolType=Tipo de protocolo de servicio -serviceProtocolTypeDescription=El protocolo a utilizar para abrir el servicio +serviceProtocolTypeDescription=Controla cómo abrir el servicio +serviceCommand=El comando a ejecutar una vez que el servicio esté activo +serviceCommandDescription=El marcador de posición $ADDRESS se sustituirá por la dirección real del túnel value=Valor showAdvancedOptions=Mostrar opciones avanzadas sshAdditionalConfigOptions=Opciones de configuración adicionales @@ -1225,3 +1227,5 @@ clearUserData=Borrar datos de usuario clearUserDataDescription=Borrar todos los datos de configuración del usuario, incluidas las conexiones clearUserDataTitle=Eliminación de datos de usuario clearUserDataContent=Esto borrará todos los datos de usuario locales de xpipe y se reiniciará. Si te preocupan tus conexiones, asegúrate de sincronizarlas primero con un repositorio git. +undefined=Sin definir +copyAddress=Copiar dirección diff --git a/lang/strings/translations_fr.properties b/lang/strings/translations_fr.properties index e441abcce..998b524ce 100644 --- a/lang/strings/translations_fr.properties +++ b/lang/strings/translations_fr.properties @@ -1251,7 +1251,9 @@ updateNagTitle=Rappel de mise à jour updateNagButton=Voir les communiqués refreshServices=Services de rafraîchissement serviceProtocolType=Type de protocole de service -serviceProtocolTypeDescription=Le protocole à utiliser pour ouvrir le service +serviceProtocolTypeDescription=Contrôle la façon d'ouvrir le service +serviceCommand=La commande à exécuter une fois que le service est actif +serviceCommandDescription=L'espace réservé $ADDRESS sera remplacé par l'adresse réelle du tunnel value=Valeur showAdvancedOptions=Afficher les options avancées sshAdditionalConfigOptions=Options de configuration supplémentaires @@ -1260,3 +1262,5 @@ clearUserData=Effacer les données de l'utilisateur clearUserDataDescription=Supprimer toutes les données de configuration de l'utilisateur, y compris les connexions clearUserDataTitle=Suppression des données de l'utilisateur clearUserDataContent=Cela supprimera toutes les données utilisateur locales pour xpipe et redémarrera. Si tu tiens à tes connexions, assure-toi de les synchroniser d'abord avec un dépôt git. +undefined=Non défini +copyAddress=Adresse de copie diff --git a/lang/strings/translations_id.properties b/lang/strings/translations_id.properties index 98060a070..97332fc6c 100644 --- a/lang/strings/translations_id.properties +++ b/lang/strings/translations_id.properties @@ -1216,7 +1216,9 @@ updateNagTitle=Pengingat pembaruan updateNagButton=Lihat rilis refreshServices=Menyegarkan layanan serviceProtocolType=Jenis protokol layanan -serviceProtocolTypeDescription=Protokol yang digunakan untuk membuka layanan +serviceProtocolTypeDescription=Mengontrol cara membuka layanan +serviceCommand=Perintah untuk dijalankan setelah layanan aktif +serviceCommandDescription=Penampung $ADDRESS akan diganti dengan alamat yang sebenarnya value=Nilai showAdvancedOptions=Menampilkan opsi lanjutan sshAdditionalConfigOptions=Opsi konfigurasi tambahan @@ -1225,3 +1227,5 @@ clearUserData=Menghapus data pengguna clearUserDataDescription=Menghapus semua data konfigurasi pengguna, termasuk koneksi clearUserDataTitle=Penghapusan data pengguna clearUserDataContent=Ini akan menghapus semua data pengguna lokal untuk xpipe dan memulai ulang. Jika Anda peduli dengan koneksi Anda, pastikan untuk menyinkronkannya terlebih dahulu dengan repositori git. +undefined=Tidak terdefinisi +copyAddress=Alamat salinan diff --git a/lang/strings/translations_it.properties b/lang/strings/translations_it.properties index 1abd6878a..9ef280184 100644 --- a/lang/strings/translations_it.properties +++ b/lang/strings/translations_it.properties @@ -1216,7 +1216,9 @@ updateNagTitle=Promemoria di aggiornamento updateNagButton=Vedere i comunicati refreshServices=Aggiorna i servizi serviceProtocolType=Tipo di protocollo di servizio -serviceProtocolTypeDescription=Il protocollo da utilizzare per aprire il servizio +serviceProtocolTypeDescription=Controlla come aprire il servizio +serviceCommand=Il comando da eseguire una volta che il servizio è attivo +serviceCommandDescription=Il segnaposto $ADDRESS sarà sostituito dall'indirizzo effettivo del tunnel value=Valore showAdvancedOptions=Mostra opzioni avanzate sshAdditionalConfigOptions=Opzioni di configurazione aggiuntive @@ -1225,3 +1227,5 @@ clearUserData=Cancellare i dati dell'utente clearUserDataDescription=Elimina tutti i dati di configurazione dell'utente, comprese le connessioni clearUserDataTitle=Cancellazione dei dati dell'utente clearUserDataContent=In questo modo verranno cancellati tutti i dati degli utenti locali di xpipe e verrà riavviato. Se tieni alle tue connessioni, assicurati di sincronizzarle prima con un repository git. +undefined=Non definito +copyAddress=Indirizzo di copia diff --git a/lang/strings/translations_ja.properties b/lang/strings/translations_ja.properties index b6fe7169d..4c6604031 100644 --- a/lang/strings/translations_ja.properties +++ b/lang/strings/translations_ja.properties @@ -1216,7 +1216,9 @@ updateNagTitle=更新リマインダー updateNagButton=リリースを見る refreshServices=リフレッシュ・サービス serviceProtocolType=サービスプロトコルタイプ -serviceProtocolTypeDescription=サービスを開くために使用するプロトコル +serviceProtocolTypeDescription=サービスを開く方法を制御する +serviceCommand=サービスがアクティブになったら実行するコマンド +serviceCommandDescription=プレースホルダー$ADDRESSは実際のトンネルアドレスに置き換えられる value=価値 showAdvancedOptions=詳細オプションを表示する sshAdditionalConfigOptions=追加設定オプション @@ -1225,3 +1227,5 @@ clearUserData=ユーザーデータを削除する clearUserDataDescription=接続を含むすべてのユーザー設定データを削除する clearUserDataTitle=ユーザーデータの削除 clearUserDataContent=これでxpipeのローカルユーザーデータがすべて削除され、再起動する。接続が気になるなら、まずgitリポジトリと同期させること。 +undefined=未定義 +copyAddress=コピーアドレス diff --git a/lang/strings/translations_nl.properties b/lang/strings/translations_nl.properties index fc7b54d02..18e08a6ec 100644 --- a/lang/strings/translations_nl.properties +++ b/lang/strings/translations_nl.properties @@ -1216,7 +1216,9 @@ updateNagTitle=Herinnering bijwerken updateNagButton=Bekijk uitgaven refreshServices=Diensten verversen serviceProtocolType=Type serviceprotocol -serviceProtocolTypeDescription=Het te gebruiken protocol om de service te openen +serviceProtocolTypeDescription=Bepalen hoe de service moet worden geopend +serviceCommand=Het commando dat wordt uitgevoerd zodra de service actief is +serviceCommandDescription=De placeholder $ADDRESS wordt vervangen door het werkelijke getunnelde adres value=Waarde showAdvancedOptions=Geavanceerde opties weergeven sshAdditionalConfigOptions=Extra configuratie-opties @@ -1225,3 +1227,5 @@ clearUserData=Gebruikersgegevens verwijderen clearUserDataDescription=Alle configuratiegegevens van gebruikers verwijderen, inclusief verbindingen clearUserDataTitle=Verwijderen van gebruikersgegevens clearUserDataContent=Hierdoor worden alle lokale gebruikersgegevens voor xpipe verwijderd en opnieuw opgestart. Als je om je verbindingen geeft, zorg er dan voor dat je ze eerst synchroniseert met een git repository. +undefined=Ongedefinieerd +copyAddress=Adres kopiëren diff --git a/lang/strings/translations_pl.properties b/lang/strings/translations_pl.properties index ad09312b7..b7456df62 100644 --- a/lang/strings/translations_pl.properties +++ b/lang/strings/translations_pl.properties @@ -1216,7 +1216,9 @@ updateNagTitle=Przypomnienie o aktualizacji updateNagButton=Zobacz wydania refreshServices=Usługi odświeżania serviceProtocolType=Typ protokołu usługi -serviceProtocolTypeDescription=Protokół używany do otwarcia usługi +serviceProtocolTypeDescription=Kontroluj sposób otwierania usługi +serviceCommand=Polecenie do uruchomienia, gdy usługa jest aktywna +serviceCommandDescription=Symbol zastępczy $ADDRESS zostanie zastąpiony rzeczywistym adresem tunelowanym value=Wartość showAdvancedOptions=Pokaż opcje zaawansowane sshAdditionalConfigOptions=Dodatkowe opcje konfiguracji @@ -1225,3 +1227,5 @@ clearUserData=Usuń dane użytkownika clearUserDataDescription=Usuń wszystkie dane konfiguracyjne użytkownika, w tym połączenia clearUserDataTitle=Usuwanie danych użytkownika clearUserDataContent=Spowoduje to usunięcie wszystkich lokalnych danych użytkownika dla xpipe i ponowne uruchomienie. Jeśli zależy ci na połączeniach, zsynchronizuj je najpierw z repozytorium git. +undefined=Niezdefiniowany +copyAddress=Kopiuj adres diff --git a/lang/strings/translations_pt.properties b/lang/strings/translations_pt.properties index 5a4d2bfc3..3a63cf52b 100644 --- a/lang/strings/translations_pt.properties +++ b/lang/strings/translations_pt.properties @@ -1216,7 +1216,9 @@ updateNagTitle=Lembrete de atualização updateNagButton=Ver lançamentos refreshServices=Atualizar serviços serviceProtocolType=Tipo de protocolo de serviço -serviceProtocolTypeDescription=O protocolo a utilizar para abrir o serviço +serviceProtocolTypeDescription=Controla a forma de abrir o serviço +serviceCommand=O comando a executar quando o serviço estiver ativo +serviceCommandDescription=O espaço reservado $ADDRESS será substituído pelo endereço real do túnel value=Valoriza showAdvancedOptions=Mostra opções avançadas sshAdditionalConfigOptions=Opções de configuração adicionais @@ -1225,3 +1227,5 @@ clearUserData=Eliminar dados do utilizador clearUserDataDescription=Elimina todos os dados de configuração do utilizador, incluindo as ligações clearUserDataTitle=Eliminação de dados do utilizador clearUserDataContent=Isto irá apagar todos os dados do utilizador local para o xpipe e reiniciar. Se te preocupas com as tuas ligações, certifica-te que as sincronizas primeiro com um repositório git. +undefined=Não definido +copyAddress=Copia o endereço diff --git a/lang/strings/translations_ru.properties b/lang/strings/translations_ru.properties index bdfcaa359..3f2a9c8e7 100644 --- a/lang/strings/translations_ru.properties +++ b/lang/strings/translations_ru.properties @@ -1216,7 +1216,9 @@ updateNagTitle=Напоминание об обновлении updateNagButton=Смотри релизы refreshServices=Обновление сервисов serviceProtocolType=Тип протокола обслуживания -serviceProtocolTypeDescription=Протокол, который нужно использовать для открытия сервиса +serviceProtocolTypeDescription=Управление тем, как открыть сервис +serviceCommand=Команда, которую нужно выполнить, как только служба станет активной +serviceCommandDescription=Заполнитель $ADDRESS будет заменен на реальный туннелируемый адрес value=Значение showAdvancedOptions=Показать дополнительные опции sshAdditionalConfigOptions=Дополнительные параметры конфигурации @@ -1225,3 +1227,5 @@ clearUserData=Удаление пользовательских данных clearUserDataDescription=Удалить все данные о конфигурации пользователя, включая соединения clearUserDataTitle=Удаление пользовательских данных clearUserDataContent=Это приведет к удалению всех локальных пользовательских данных для xpipe и перезапуску. Если ты заботишься о своих подключениях, не забудь сначала синхронизировать их с git-репозиторием. +undefined=Неопределенный +copyAddress=Адрес копирования diff --git a/lang/strings/translations_sv.properties b/lang/strings/translations_sv.properties index 8828ffb11..232482685 100644 --- a/lang/strings/translations_sv.properties +++ b/lang/strings/translations_sv.properties @@ -1216,7 +1216,9 @@ updateNagTitle=Påminnelse om uppdatering updateNagButton=Se releaser refreshServices=Uppdatera tjänster serviceProtocolType=Typ av serviceprotokoll -serviceProtocolTypeDescription=Protokollet som ska användas för att öppna tjänsten +serviceProtocolTypeDescription=Styr hur tjänsten ska öppnas +serviceCommand=Kommandot som ska köras när tjänsten är aktiv +serviceCommandDescription=Platshållaren $ADDRESS kommer att ersättas med den faktiska tunnlade adressen value=Värde showAdvancedOptions=Visa avancerade alternativ sshAdditionalConfigOptions=Ytterligare konfigurationsalternativ @@ -1225,3 +1227,5 @@ clearUserData=Ta bort användardata clearUserDataDescription=Ta bort alla användarkonfigurationsdata, inklusive anslutningar clearUserDataTitle=Radering av användardata clearUserDataContent=Detta kommer att radera alla lokala användardata för xpipe och starta om. Om du bryr dig om dina anslutningar, se till att synkronisera dem först med ett git-arkiv. +undefined=Odefinierad +copyAddress=Kopiera adress diff --git a/lang/strings/translations_tr.properties b/lang/strings/translations_tr.properties index 934432dd8..05679bc4b 100644 --- a/lang/strings/translations_tr.properties +++ b/lang/strings/translations_tr.properties @@ -1216,7 +1216,9 @@ updateNagTitle=Güncelleme hatırlatması updateNagButton=Yayınlara bakın refreshServices=Yenileme hizmetleri serviceProtocolType=Hizmet protokolü türü -serviceProtocolTypeDescription=Hizmeti açmak için kullanılacak protokol +serviceProtocolTypeDescription=Hizmetin nasıl açılacağını kontrol edin +serviceCommand=Hizmet etkin olduğunda çalıştırılacak komut +serviceCommandDescription=ADDRESS yer tutucusu gerçek tünellenmiş adres ile değiştirilecektir value=Değer showAdvancedOptions=Gelişmiş seçenekleri göster sshAdditionalConfigOptions=Ek yapılandırma seçenekleri @@ -1225,3 +1227,5 @@ clearUserData=Kullanıcı verilerini silme clearUserDataDescription=Bağlantılar da dahil olmak üzere tüm kullanıcı yapılandırma verilerini silme clearUserDataTitle=Kullanıcı verilerinin silinmesi clearUserDataContent=Bu, xpipe için tüm yerel kullanıcı verilerini silecek ve yeniden başlatacaktır. Bağlantılarınızı önemsiyorsanız, önce bir git deposu ile senkronize ettiğinizden emin olun. +undefined=Tanımsız +copyAddress=Adres kopyalayın diff --git a/lang/strings/translations_zh.properties b/lang/strings/translations_zh.properties index 5d80ac7fe..0fe036889 100644 --- a/lang/strings/translations_zh.properties +++ b/lang/strings/translations_zh.properties @@ -1216,7 +1216,9 @@ updateNagTitle=更新提醒 updateNagButton=参见发布 refreshServices=刷新服务 serviceProtocolType=服务协议类型 -serviceProtocolTypeDescription=用于打开服务的协议 +serviceProtocolTypeDescription=控制如何打开服务 +serviceCommand=服务激活后运行的命令 +serviceCommandDescription=占位符 $ADDRESS 将被替换为实际的隧道地址 value=价值 showAdvancedOptions=显示高级选项 sshAdditionalConfigOptions=附加配置选项 @@ -1225,3 +1227,5 @@ clearUserData=删除用户数据 clearUserDataDescription=删除所有用户配置数据,包括连接 clearUserDataTitle=用户数据删除 clearUserDataContent=这将删除 xpipe 的所有本地用户数据并重新启动。如果你关心你的连接,请确保先用 git 仓库同步它们。 +undefined=未定义 +copyAddress=复制地址