mirror of https://github.com/jetkvm/kvm.git
Compare commits
5 Commits
00fec781e2
...
b8112995fc
| Author | SHA1 | Date |
|---|---|---|
|
|
b8112995fc | |
|
|
423bf1a53f | |
|
|
9e822850e0 | |
|
|
c6a12588f5 | |
|
|
75716405d5 |
|
|
@ -0,0 +1,82 @@
|
|||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
def flatten_strings(obj, prefix=""):
|
||||
if isinstance(obj, dict):
|
||||
for k, v in obj.items():
|
||||
key = f"{prefix}.{k}" if prefix else k
|
||||
yield from flatten_strings(v, key)
|
||||
else:
|
||||
# only consider scalar strings for translation targets
|
||||
if isinstance(obj, str):
|
||||
yield prefix, obj
|
||||
|
||||
def normalize(s, ignore_case=False, trim=False, collapse_ws=False):
|
||||
if collapse_ws:
|
||||
s = re.sub(r"\s+", " ", s)
|
||||
if trim:
|
||||
s = s.strip()
|
||||
if ignore_case:
|
||||
s = s.lower()
|
||||
return s
|
||||
|
||||
def main():
|
||||
p = argparse.ArgumentParser(description="Find identical translation targets with different keys in en.json")
|
||||
p.add_argument("--en", default="../ui/localization/messages/en.json", help="path to en.json")
|
||||
p.add_argument("--out", default="../reports/duplicate_translations.json", help="output report path (JSON)")
|
||||
p.add_argument("--ignore-case", action="store_true", help="ignore case when comparing values")
|
||||
p.add_argument("--trim", action="store_true", help="trim surrounding whitespace before comparing")
|
||||
p.add_argument("--collapse-ws", action="store_true", help="collapse internal whitespace before comparing")
|
||||
args = p.parse_args()
|
||||
|
||||
en_path = Path(args.en)
|
||||
if not en_path.is_file():
|
||||
print(f"en.json not found: {en_path}")
|
||||
raise SystemExit(2)
|
||||
|
||||
with en_path.open(encoding="utf-8") as f:
|
||||
payload = json.load(f)
|
||||
|
||||
entries = list(flatten_strings(payload))
|
||||
total_keys = len(entries)
|
||||
|
||||
groups = {}
|
||||
original_values = {}
|
||||
for key, val in entries:
|
||||
norm = normalize(val, ignore_case=args.ignore_case, trim=args.trim, collapse_ws=args.collapse_ws)
|
||||
groups.setdefault(norm, []).append(key)
|
||||
# keep the first seen original for reporting
|
||||
original_values.setdefault(norm, val)
|
||||
|
||||
duplicates = []
|
||||
for norm, keys in groups.items():
|
||||
if len(keys) > 1:
|
||||
duplicates.append({
|
||||
"normalized_value": norm,
|
||||
"original_value": original_values.get(norm),
|
||||
"keys": sorted(keys),
|
||||
"count": len(keys)
|
||||
})
|
||||
|
||||
report = {
|
||||
"generated_at": datetime.utcnow().isoformat() + "Z",
|
||||
"en_json": str(en_path),
|
||||
"total_string_keys": total_keys,
|
||||
"duplicate_groups": sorted(duplicates, key=lambda d: (-d["count"], d["normalized_value"])),
|
||||
"duplicate_count": len(duplicates)
|
||||
}
|
||||
|
||||
out_path = Path(args.out)
|
||||
out_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
with out_path.open("w", encoding="utf-8") as f:
|
||||
json.dump(report, f, indent=2, ensure_ascii=False)
|
||||
|
||||
print(f"Wrote {out_path} — total keys: {total_keys}, duplicate groups: {len(duplicates)}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
def flatten(d, prefix=""):
|
||||
for k, v in d.items():
|
||||
key = f"{prefix}.{k}" if prefix else k
|
||||
if isinstance(v, dict):
|
||||
yield from flatten(v, key)
|
||||
else:
|
||||
yield key
|
||||
|
||||
def gather_files(src_dir, exts=(".ts", ".tsx", ".js", ".jsx", ".html", ".vue", ".json")):
|
||||
for root, _, files in os.walk(src_dir):
|
||||
parts = root.split(os.sep)
|
||||
if "node_modules" in parts or ".git" in parts:
|
||||
continue
|
||||
for fn in files:
|
||||
if fn.endswith(exts):
|
||||
yield Path(root) / fn
|
||||
|
||||
def find_usages(keys, files):
|
||||
usages = {k: [] for k in keys}
|
||||
# Precompile patterns for speed
|
||||
patterns = {k: re.compile(r"\bm\." + re.escape(k) + r"\s*\(") for k in keys}
|
||||
for file in files:
|
||||
try:
|
||||
text = file.read_text(encoding="utf-8")
|
||||
except Exception:
|
||||
continue
|
||||
lines = text.splitlines()
|
||||
for i, line in enumerate(lines, start=1):
|
||||
for k, pat in patterns.items():
|
||||
if pat.search(line):
|
||||
usages[k].append({
|
||||
"file": str(file),
|
||||
"line": i,
|
||||
"text": line.strip()
|
||||
})
|
||||
return usages
|
||||
|
||||
def main():
|
||||
p = argparse.ArgumentParser(description="Generate JSON report of localization key usage (m.key_name_here()).")
|
||||
p.add_argument("--en", default="../ui/localization/messages/en.json", help="path to en.json")
|
||||
p.add_argument("--src", default="../ui", help="root source directory to scan")
|
||||
p.add_argument("--out", default="../reports/localization_report.json", help="output report file")
|
||||
args = p.parse_args()
|
||||
|
||||
en_path = Path(args.en)
|
||||
if not en_path.is_file():
|
||||
print(f"en.json not found: {en_path}", flush=True)
|
||||
raise SystemExit(2)
|
||||
|
||||
with en_path.open(encoding="utf-8") as f:
|
||||
payload = json.load(f)
|
||||
|
||||
keys = sorted(list(flatten(payload)))
|
||||
files = list(gather_files(args.src))
|
||||
usages = find_usages(keys, files)
|
||||
|
||||
report = {
|
||||
"generated_at": datetime.utcnow().isoformat() + "Z",
|
||||
"en_json": str(en_path),
|
||||
"src_root": args.src,
|
||||
"total_keys": len(keys),
|
||||
"keys": {}
|
||||
}
|
||||
|
||||
unused_count = 0
|
||||
for k in keys:
|
||||
occ = usages.get(k, [])
|
||||
used = bool(occ)
|
||||
if not used:
|
||||
unused_count += 1
|
||||
report["keys"][k] = {
|
||||
"used": used,
|
||||
"occurrences": occ
|
||||
}
|
||||
|
||||
report["unused_count"] = unused_count
|
||||
report["unused_keys"] = [k for k, v in report["keys"].items() if not v["used"]]
|
||||
|
||||
out_path = Path(args.out)
|
||||
out_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
with out_path.open("w", encoding="utf-8") as f:
|
||||
json.dump(report, f, indent=2, ensure_ascii=False)
|
||||
|
||||
print(f"Report written to {out_path}")
|
||||
print(f"Total keys: {report['total_keys']}, Unused: {report['unused_count']}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
@ -48,7 +48,6 @@
|
|||
"access_tls_updated": "TLS-indstillingerne er blevet opdateret",
|
||||
"access_update_tls_settings": "Opdater TLS-indstillinger",
|
||||
"action_bar_connection_stats": "Forbindelsesstatistik",
|
||||
"action_bar_exit_fullscreen": "Afslut fuldskærm",
|
||||
"action_bar_extension": "Udvidelse",
|
||||
"action_bar_fullscreen": "Fuldskærm",
|
||||
"action_bar_paste_text": "Indsæt tekst",
|
||||
|
|
@ -201,13 +200,11 @@
|
|||
"dc_power_control_set_restore_state_error": "Kunne ikke sende DC-strømgendannelsesstatus til {state} : {error}",
|
||||
"dc_power_control_voltage_unit": "V",
|
||||
"dc_power_control_voltage": "Spænding",
|
||||
"default": "Misligholdelse",
|
||||
"delete": "Slet",
|
||||
"deregister_button": "Afregistrering fra Cloud",
|
||||
"deregister_cloud_devices": "Cloud-enheder",
|
||||
"deregister_description": "Dette vil fjerne enheden fra din cloud-konto og tilbagekalde fjernadgang til den. Bemærk venligst, at lokal adgang stadig vil være mulig.",
|
||||
"deregister_error": "Der opstod en fejl {status} under afregistreringen af din enhed. Prøv igen.",
|
||||
"deregister_from_cloud": "Afregistrering fra skyen",
|
||||
"deregister_headline": "Afregistrér {device} fra din cloud-konto",
|
||||
"detach": "Løsrive",
|
||||
"dhcp_lease_boot_file": "Boot-fil",
|
||||
|
|
@ -330,7 +327,6 @@
|
|||
"invalid_password": "Ugyldig adgangskode",
|
||||
"ip_address": "IP-adresse",
|
||||
"ipv6_address_label": "Adresse",
|
||||
"ipv6_addresses": "IPv6-adresser",
|
||||
"ipv6_information": "IPv6-oplysninger",
|
||||
"ipv6_link_local": "Link-lokal",
|
||||
"ipv6_preferred_lifetime": "Foretrukken levetid",
|
||||
|
|
@ -339,7 +335,6 @@
|
|||
"jetkvm_device": "JetKVM-enhed",
|
||||
"jetkvm_logo": "JetKVM-logo",
|
||||
"jetkvm_setup": "Opsæt din JetKVM",
|
||||
"jetkvm": "JetKVM",
|
||||
"jiggler_cron_schedule_description": "Cron-udtryk til planlægning",
|
||||
"jiggler_cron_schedule_label": "Cron-skema",
|
||||
"jiggler_example_business_hours_early": "Åbningstider 8-17",
|
||||
|
|
@ -370,7 +365,6 @@
|
|||
"local_auth_change_local_device_password_description": "Indtast din nuværende adgangskode og en ny adgangskode for at opdatere din lokale enhedsbeskyttelse.",
|
||||
"local_auth_change_local_device_password_title": "Skift adgangskode til den lokale enhed",
|
||||
"local_auth_confirm_new_password_label": "Bekræft ny adgangskode",
|
||||
"local_auth_create_confirm_password_label": "Bekræft ny adgangskode",
|
||||
"local_auth_create_confirm_password_placeholder": "Indtast din adgangskode igen",
|
||||
"local_auth_create_description": "Opret en adgangskode for at beskytte din enhed mod uautoriseret lokal adgang.",
|
||||
"local_auth_create_new_password_label": "Ny adgangskode",
|
||||
|
|
@ -400,12 +394,7 @@
|
|||
"local_auth_success_password_set_title": "Adgangskode indstillet",
|
||||
"local_auth_success_password_updated_description": "Du har ændret din adgangskode til beskyttelse af din lokale enhed. Husk din nye adgangskode til senere brug.",
|
||||
"local_auth_success_password_updated_title": "Adgangskode opdateret",
|
||||
"local_auth_update_confirm_password_label": "Bekræft ny adgangskode",
|
||||
"local_auth_update_current_password_label": "Nuværende adgangskode",
|
||||
"local_auth_update_description": "Indtast din nuværende adgangskode og en ny adgangskode for at opdatere din lokale enhedsbeskyttelse.",
|
||||
"local_auth_update_new_password_label": "Ny adgangskode",
|
||||
"local_auth_update_password_button": "Opdater adgangskode",
|
||||
"local_auth_update_title": "Skift adgangskode til den lokale enhed",
|
||||
"log_in": "Log ind",
|
||||
"log_out": "Log ud",
|
||||
"logged_in_as": "Logget ind som",
|
||||
|
|
@ -452,19 +441,16 @@
|
|||
"macros_confirm_deleting": "Sletter…",
|
||||
"macros_create_first_description": "Kombinér tastetryk i én handling",
|
||||
"macros_create_first_headline": "Opret din første makro",
|
||||
"macros_create_first": "Opret din første makro for at komme i gang",
|
||||
"macros_created_success": "Makro \" {name} \" blev oprettet",
|
||||
"macros_delay_only": "Kun forsinkelse",
|
||||
"macros_delete_confirm": "Er du sikker på, at du vil slette denne makro? Denne handling kan ikke fortrydes.",
|
||||
"macros_delete_macro": "Slet makro",
|
||||
"macros_deleted_success": "Makro \" {name} \" slettet",
|
||||
"macros_deleting": "Sletning",
|
||||
"macros_duplicate": "Duplikere",
|
||||
"macros_duplicated_success": "Makro \" {name} \" duplikeret",
|
||||
"macros_edit_button": "Redigere",
|
||||
"macros_edit_description": "Rediger din tastaturmakro",
|
||||
"macros_edit_title": "Rediger makro",
|
||||
"macros_edit": "Redigere",
|
||||
"macros_failed_create_error": "Kunne ikke oprette makro: {error}",
|
||||
"macros_failed_create": "Kunne ikke oprette makro",
|
||||
"macros_failed_delete_error": "Kunne ikke slette makroen: {error}",
|
||||
|
|
@ -473,16 +459,13 @@
|
|||
"macros_failed_duplicate": "Makroen kunne ikke duplikeres",
|
||||
"macros_failed_reorder_error": "Kunne ikke omarrangere makroer: {error}",
|
||||
"macros_failed_reorder": "Kunne ikke omarrangere makroer",
|
||||
"macros_failed_update_error": "Kunne ikke opdatere makroen: {error}",
|
||||
"macros_failed_update": "Makroen kunne ikke opdateres",
|
||||
"macros_failed_update_error": "Kunne ikke opdatere makroen: {error}",
|
||||
"macros_invalid_data": "Ugyldige makrodata",
|
||||
"macros_loading": "Indlæser makroer…",
|
||||
"macros_max_reached": "Maksimum nået",
|
||||
"macros_maximum_macros_reached": "Du har nået det maksimale antal {maximum} makroer.",
|
||||
"macros_move_down": "Flyt ned",
|
||||
"macros_move_up": "Flyt op",
|
||||
"macros_no_macros_available": "Ingen makroer tilgængelige",
|
||||
"macros_no_macros_found": "Ingen makroer fundet",
|
||||
"macros_order_updated": "Makroordren er blevet opdateret",
|
||||
"macros_title": "Tastaturmakroer",
|
||||
"macros_updated_success": "Makro \" {name} \" opdateret",
|
||||
|
|
@ -496,8 +479,6 @@
|
|||
"mount_button_continue_upload": "Fortsæt upload",
|
||||
"mount_button_mount_file": "Monter fil",
|
||||
"mount_button_mount_url": "Monterings-URL",
|
||||
"mount_button_next": "Næste",
|
||||
"mount_button_previous": "Tidligere",
|
||||
"mount_button_select": "Vælge",
|
||||
"mount_button_showing_results": "Viser resultater fra {from} til {to} af resultaterne fra {total}",
|
||||
"mount_button_upload_new_image": "Upload et nyt billede",
|
||||
|
|
@ -508,7 +489,6 @@
|
|||
"mount_click_to_select_incomplete": "Klik for at vælge \" {name} \"",
|
||||
"mount_confirm_delete": "Er du sikker på, at du vil slette {name} ?",
|
||||
"mount_continue_uploading_with_name": "Fortsæt med at uploade \" {name} \"",
|
||||
"mount_description_mode": "Vælg hvordan du vil montere dine virtuelle medier",
|
||||
"mount_error_delete_file": "Fejl ved sletning af fil: {error}",
|
||||
"mount_error_description": "Der opstod en fejl under forsøget på at montere mediet. Prøv igen.",
|
||||
"mount_error_get_storage_space": "Fejl ved hentning af lagerplads: {error}",
|
||||
|
|
@ -517,9 +497,6 @@
|
|||
"mount_get_state_error": "Kunne ikke hente virtuel medietilstand: {error}",
|
||||
"mount_jetkvm_storage_description": "Monter tidligere uploadede filer fra JetKVM-lageret",
|
||||
"mount_jetkvm_storage": "JetKVM-lagerbeslag",
|
||||
"mount_label_mount_as": "Monter som",
|
||||
"mount_label_url_description": "Monter filer fra enhver offentlig webadresse",
|
||||
"mount_label_url": "URL-montering",
|
||||
"mount_mode_cdrom": "CD/DVD",
|
||||
"mount_mode_disk": "Disk",
|
||||
"mount_mounted_as": "Monteret som",
|
||||
|
|
@ -528,13 +505,10 @@
|
|||
"mount_no_images_title": "Ingen billeder tilgængelige",
|
||||
"mount_no_mounted_media": "Ingen monterede medier",
|
||||
"mount_percentage_used": "{percentageUsed} % brugt",
|
||||
"mount_please_select_file_to_upload": "Vælg venligst den fil, der skal uploades.",
|
||||
"mount_please_select_file": "Vælg venligst filen \" {name} \" for at fortsætte uploaden.",
|
||||
"mount_popular_images": "Populære billeder",
|
||||
"mount_streaming_from_url": "Streaming fra URL",
|
||||
"mount_supported_formats": "Understøttede formater: ISO, IMG",
|
||||
"mount_tag_experimental": "Eksperimentel",
|
||||
"mount_title_mode": "Virtuel mediekilde",
|
||||
"mount_unmount_error": "Kunne ikke afmontere billede: {error}",
|
||||
"mount_unmount": "Afmonter",
|
||||
"mount_upload_description": "Vælg en billedfil, der skal uploades til JetKVM-lageret",
|
||||
|
|
@ -567,7 +541,6 @@
|
|||
"mouse_jiggler_description": "Simuler bevægelsen af en computermus",
|
||||
"mouse_jiggler_disabled": "Handicappet",
|
||||
"mouse_jiggler_error_config": "Der opstod en fejl under indstilling af jiggler-konfigurationen",
|
||||
"mouse_jiggler_failed_config": "Kunne ikke indstille jiggler-konfiguration: {error}",
|
||||
"mouse_jiggler_failed_state": "Kunne ikke indstille jiggler-tilstand: {error}",
|
||||
"mouse_jiggler_frequent": "Hyppig - 30'erne",
|
||||
"mouse_jiggler_invalid_cron": "Ugyldigt cron-udtryk. Kontroller venligst dit tidsplanformat (f.eks. '0 * * * * *' for hvert minut).",
|
||||
|
|
@ -591,10 +564,7 @@
|
|||
"network_custom_domain": "Brugerdefineret domæne",
|
||||
"network_description": "Konfigurer dine netværksindstillinger",
|
||||
"network_dhcp_information": "DHCP-oplysninger",
|
||||
"network_dhcp_lease_information": "DHCP-leaseoplysninger",
|
||||
"network_dhcp_lease_lifetime_not_applicable": "Ikke tilgængelig",
|
||||
"network_dhcp_lease_renew_confirm_description": "Dette vil anmode om en ny IP-adresse fra din DHCP-server. Din enhed kan midlertidigt miste netværksforbindelsen under denne proces.",
|
||||
"network_dhcp_lease_renew_confirm_title": "Forny DHCP-lease",
|
||||
"network_dhcp_lease_renew_confirm": "Forny lejekontrakt",
|
||||
"network_dhcp_lease_renew_failed": "Kunne ikke forny leasing: {error}",
|
||||
"network_dhcp_lease_renew_success": "DHCP-lease fornyet",
|
||||
|
|
@ -611,7 +581,6 @@
|
|||
"network_ipv4_mode_description": "Konfigurer IPv4-tilstanden",
|
||||
"network_ipv4_mode_dhcp": "DHCP",
|
||||
"network_ipv4_mode_title": "IPv4-tilstand",
|
||||
"network_ipv6_addresses": "IPv6-adresser",
|
||||
"network_ipv6_information": "IPv6-oplysninger",
|
||||
"network_ipv6_mode_description": "Konfigurer IPv6-tilstanden",
|
||||
"network_ipv6_mode_disabled": "Handicappet",
|
||||
|
|
@ -644,6 +613,7 @@
|
|||
"never_seen_online": "Aldrig set online",
|
||||
"next": "Næste",
|
||||
"no_results_found": "Ingen resultater fundet",
|
||||
"not_applicable": "Ikke tilgængelig",
|
||||
"not_available": "Ikke tilgængelig",
|
||||
"not_found": "Ikke fundet",
|
||||
"ntp_servers": "NTP-servere",
|
||||
|
|
@ -684,7 +654,6 @@
|
|||
"rename_device_new_name_label": "Nyt enhedsnavn",
|
||||
"rename_device_new_name_placeholder": "Plex-medieserver",
|
||||
"rename_device_no_name": "Angiv venligst et navn",
|
||||
"rename": "Omdøb",
|
||||
"retry": "Prøv igen",
|
||||
"saving": "Gemmer…",
|
||||
"search_placeholder": "Søge…",
|
||||
|
|
@ -719,6 +688,13 @@
|
|||
"something_went_wrong": "Noget gik galt. Prøv igen senere, eller kontakt support.",
|
||||
"step_counter_step": "Trin {step}",
|
||||
"subnet_mask": "Undernetmaske",
|
||||
"time_division_days": "dage",
|
||||
"time_division_hours": "timer",
|
||||
"time_division_minutes": "minutter",
|
||||
"time_division_months": "måneder",
|
||||
"time_division_seconds": "sekunder",
|
||||
"time_division_weeks": "uger",
|
||||
"time_division_years": "år",
|
||||
"troubleshoot_connection": "Fejlfinding af forbindelse",
|
||||
"unknown_error": "Ukendt fejl",
|
||||
"update_in_progress": "Opdatering i gang",
|
||||
|
|
@ -835,9 +811,7 @@
|
|||
"video_stream_quality_title": "Streamkvalitet",
|
||||
"video_title": "Video",
|
||||
"view_details": "Se detaljer",
|
||||
"virtual_keyboard_description": "Brug det virtuelle tastatur til at sende specielle taster eller tastekombinationer til den eksterne computer.",
|
||||
"virtual_keyboard_header": "Virtuelt tastatur",
|
||||
"wake_on_lan_add_device_back": "Tilbage",
|
||||
"wake_on_lan_add_device_device_name": "Enhedsnavn",
|
||||
"wake_on_lan_add_device_example_device_name": "Plex-medieserver",
|
||||
"wake_on_lan_add_device_mac_address": "MAC-adresse",
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@
|
|||
"access_tls_updated": "TLS-Einstellungen erfolgreich aktualisiert",
|
||||
"access_update_tls_settings": "TLS-Einstellungen aktualisieren",
|
||||
"action_bar_connection_stats": "Verbindungsstatistiken",
|
||||
"action_bar_exit_fullscreen": "Vollbildmodus beenden",
|
||||
"action_bar_extension": "Verlängerung",
|
||||
"action_bar_fullscreen": "Vollbild",
|
||||
"action_bar_paste_text": "Text einfügen",
|
||||
|
|
@ -201,13 +200,11 @@
|
|||
"dc_power_control_set_restore_state_error": "Der Status zur Wiederherstellung der Gleichstromversorgung konnte nicht an {state} gesendet werden: {error}",
|
||||
"dc_power_control_voltage_unit": "V",
|
||||
"dc_power_control_voltage": "Stromspannung",
|
||||
"default": "Standard",
|
||||
"delete": "Löschen",
|
||||
"deregister_button": "Abmelden von der Cloud",
|
||||
"deregister_cloud_devices": "Cloud-Geräte",
|
||||
"deregister_description": "Dadurch wird das Gerät aus Ihrem Cloud-Konto entfernt und der Fernzugriff darauf widerrufen. Bitte beachten Sie, dass der lokale Zugriff weiterhin möglich ist.",
|
||||
"deregister_error": "Beim Abmelden Ihres Geräts ist ein Fehler aufgetreten {status} . Bitte versuchen Sie es erneut.",
|
||||
"deregister_from_cloud": "Abmelden von der Cloud",
|
||||
"deregister_headline": "Melden Sie {device}",
|
||||
"detach": "Abtrennen",
|
||||
"dhcp_lease_boot_file": "Boot-Datei",
|
||||
|
|
@ -330,7 +327,6 @@
|
|||
"invalid_password": "Ungültiges Passwort",
|
||||
"ip_address": "IP-Adresse",
|
||||
"ipv6_address_label": "Adresse",
|
||||
"ipv6_addresses": "IPv6-Adressen",
|
||||
"ipv6_information": "IPv6-Informationen",
|
||||
"ipv6_link_local": "Link-lokal",
|
||||
"ipv6_preferred_lifetime": "Bevorzugte Lebensdauer",
|
||||
|
|
@ -339,7 +335,6 @@
|
|||
"jetkvm_device": "JetKVM-Gerät",
|
||||
"jetkvm_logo": "JetKVM Logo",
|
||||
"jetkvm_setup": "Richten Sie Ihr JetKVM ein",
|
||||
"jetkvm": "JetKVM",
|
||||
"jiggler_cron_schedule_description": "Cron-Ausdruck für die Planung",
|
||||
"jiggler_cron_schedule_label": "Cron-Zeitplan",
|
||||
"jiggler_example_business_hours_early": "Öffnungszeiten 8-17",
|
||||
|
|
@ -370,7 +365,6 @@
|
|||
"local_auth_change_local_device_password_description": "Geben Sie Ihr aktuelles Passwort und ein neues Passwort ein, um den Schutz Ihres lokalen Geräts zu aktualisieren.",
|
||||
"local_auth_change_local_device_password_title": "Ändern des lokalen Gerätekennworts",
|
||||
"local_auth_confirm_new_password_label": "Neues Passwort bestätigen",
|
||||
"local_auth_create_confirm_password_label": "Neues Passwort bestätigen",
|
||||
"local_auth_create_confirm_password_placeholder": "Geben Sie Ihr Passwort erneut ein",
|
||||
"local_auth_create_description": "Erstellen Sie ein Passwort, um Ihr Gerät vor unbefugtem lokalem Zugriff zu schützen.",
|
||||
"local_auth_create_new_password_label": "Neues Passwort",
|
||||
|
|
@ -400,12 +394,7 @@
|
|||
"local_auth_success_password_set_title": "Passwort erfolgreich festgelegt",
|
||||
"local_auth_success_password_updated_description": "Sie haben Ihr lokales Geräteschutzkennwort erfolgreich geändert. Merken Sie sich das neue Kennwort für zukünftige Zugriffe.",
|
||||
"local_auth_success_password_updated_title": "Passwort erfolgreich aktualisiert",
|
||||
"local_auth_update_confirm_password_label": "Neues Passwort bestätigen",
|
||||
"local_auth_update_current_password_label": "Aktuelles Passwort",
|
||||
"local_auth_update_description": "Geben Sie Ihr aktuelles Passwort und ein neues Passwort ein, um den Schutz Ihres lokalen Geräts zu aktualisieren.",
|
||||
"local_auth_update_new_password_label": "Neues Passwort",
|
||||
"local_auth_update_password_button": "Kennwort aktualisieren",
|
||||
"local_auth_update_title": "Ändern des lokalen Gerätekennworts",
|
||||
"log_in": "Einloggen",
|
||||
"log_out": "Ausloggen",
|
||||
"logged_in_as": "Angemeldet als",
|
||||
|
|
@ -452,19 +441,16 @@
|
|||
"macros_confirm_deleting": "Löschen…",
|
||||
"macros_create_first_description": "Kombinieren Sie Tastenanschläge zu einer einzigen Aktion",
|
||||
"macros_create_first_headline": "Erstellen Sie Ihr erstes Makro",
|
||||
"macros_create_first": "Erstellen Sie Ihr erstes Makro, um loszulegen",
|
||||
"macros_created_success": "Makro \" {name} \" erfolgreich erstellt",
|
||||
"macros_delay_only": "Nur Verzögerung",
|
||||
"macros_delete_confirm": "Möchten Sie dieses Makro wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",
|
||||
"macros_delete_macro": "Makro löschen",
|
||||
"macros_deleted_success": "Makro \" {name} \" erfolgreich gelöscht",
|
||||
"macros_deleting": "Löschen",
|
||||
"macros_duplicate": "Duplikat",
|
||||
"macros_duplicated_success": "Makro \" {name} \" erfolgreich dupliziert",
|
||||
"macros_edit_button": "Bearbeiten",
|
||||
"macros_edit_description": "Ändern Sie Ihr Tastaturmakro",
|
||||
"macros_edit_title": "Makro bearbeiten",
|
||||
"macros_edit": "Bearbeiten",
|
||||
"macros_failed_create_error": "Makro konnte nicht erstellt werden: {error}",
|
||||
"macros_failed_create": "Makro konnte nicht erstellt werden",
|
||||
"macros_failed_delete_error": "Makro konnte nicht gelöscht werden: {error}",
|
||||
|
|
@ -479,10 +465,7 @@
|
|||
"macros_loading": "Makros werden geladen …",
|
||||
"macros_max_reached": "Max. erreicht",
|
||||
"macros_maximum_macros_reached": "Sie haben die maximal zulässige Anzahl von {maximum} Makros erreicht.",
|
||||
"macros_move_down": "Nach unten",
|
||||
"macros_move_up": "Nach oben",
|
||||
"macros_no_macros_available": "Keine Makros verfügbar",
|
||||
"macros_no_macros_found": "Keine Makros gefunden",
|
||||
"macros_order_updated": "Makroreihenfolge erfolgreich aktualisiert",
|
||||
"macros_title": "Tastaturmakros",
|
||||
"macros_updated_success": "Makro \" {name} \" erfolgreich aktualisiert",
|
||||
|
|
@ -496,8 +479,6 @@
|
|||
"mount_button_continue_upload": "Weiter hochladen",
|
||||
"mount_button_mount_file": "Datei einbinden",
|
||||
"mount_button_mount_url": "Mount-URL",
|
||||
"mount_button_next": "Nächste",
|
||||
"mount_button_previous": "Vorherige",
|
||||
"mount_button_select": "Wählen",
|
||||
"mount_button_showing_results": "Anzeige von {from} bis {to} von {total} Ergebnissen",
|
||||
"mount_button_upload_new_image": "Laden Sie ein neues Bild hoch",
|
||||
|
|
@ -508,7 +489,6 @@
|
|||
"mount_click_to_select_incomplete": "Klicken Sie, um \" {name} \" auszuwählen.",
|
||||
"mount_confirm_delete": "Möchten Sie {name} wirklich löschen?",
|
||||
"mount_continue_uploading_with_name": "Weiter hochladen \" {name} \"",
|
||||
"mount_description_mode": "Wählen Sie, wie Sie Ihr virtuelles Medium mounten möchten",
|
||||
"mount_error_delete_file": "Fehler beim Löschen der Datei: {error}",
|
||||
"mount_error_description": "Beim Einbinden des Mediums ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.",
|
||||
"mount_error_get_storage_space": "Fehler beim Abrufen des Speicherplatzes: {error}",
|
||||
|
|
@ -517,9 +497,6 @@
|
|||
"mount_get_state_error": "Der Status des virtuellen Mediums konnte nicht abgerufen werden: {error}",
|
||||
"mount_jetkvm_storage_description": "Mounten Sie zuvor hochgeladene Dateien aus dem JetKVM-Speicher",
|
||||
"mount_jetkvm_storage": "JetKVM-Speicherhalterung",
|
||||
"mount_label_mount_as": "Montieren als",
|
||||
"mount_label_url_description": "Mounten Sie Dateien von jeder öffentlichen Webadresse",
|
||||
"mount_label_url": "URL-Mount",
|
||||
"mount_mode_cdrom": "CD/DVD",
|
||||
"mount_mode_disk": "Scheibe",
|
||||
"mount_mounted_as": "Montiert als",
|
||||
|
|
@ -528,13 +505,10 @@
|
|||
"mount_no_images_title": "Keine Bilder verfügbar",
|
||||
"mount_no_mounted_media": "Keine gemounteten Medien",
|
||||
"mount_percentage_used": "{percentageUsed} % verwendet",
|
||||
"mount_please_select_file_to_upload": "Bitte wählen Sie die hochzuladende Datei aus.",
|
||||
"mount_please_select_file": "Bitte wählen Sie die Datei \" {name} \" aus, um den Upload fortzusetzen.",
|
||||
"mount_popular_images": "Beliebte Bilder",
|
||||
"mount_streaming_from_url": "Streaming von URL",
|
||||
"mount_supported_formats": "Unterstützte Formate: ISO, IMG",
|
||||
"mount_tag_experimental": "Experimental",
|
||||
"mount_title_mode": "Virtuelle Medienquelle",
|
||||
"mount_unmount_error": "Abbild konnte nicht ausgehängt werden: {error}",
|
||||
"mount_unmount": "Aushängen",
|
||||
"mount_upload_description": "Wählen Sie eine Bilddatei zum Hochladen in den JetKVM-Speicher aus",
|
||||
|
|
@ -567,7 +541,6 @@
|
|||
"mouse_jiggler_description": "Simulieren Sie die Bewegung einer Computermaus",
|
||||
"mouse_jiggler_disabled": "Deaktiviert",
|
||||
"mouse_jiggler_error_config": "Beim Festlegen der Jiggler-Konfiguration ist ein Fehler aufgetreten",
|
||||
"mouse_jiggler_failed_config": "Jiggler-Konfiguration konnte nicht festgelegt werden: {error}",
|
||||
"mouse_jiggler_failed_state": "Jiggler-Status konnte nicht festgelegt werden: {error}",
|
||||
"mouse_jiggler_frequent": "Häufig - 30er",
|
||||
"mouse_jiggler_invalid_cron": "Ungültiger Cron-Ausdruck. Bitte überprüfen Sie Ihr Zeitplanformat (z. B. „0 * * * * *“ für jede Minute).",
|
||||
|
|
@ -591,10 +564,7 @@
|
|||
"network_custom_domain": "Benutzerdefinierte Domäne",
|
||||
"network_description": "Konfigurieren Sie Ihre Netzwerkeinstellungen",
|
||||
"network_dhcp_information": "DHCP-Informationen",
|
||||
"network_dhcp_lease_information": "DHCP-Lease-Informationen",
|
||||
"network_dhcp_lease_lifetime_not_applicable": "N / A",
|
||||
"network_dhcp_lease_renew_confirm_description": "Dadurch wird eine neue IP-Adresse von Ihrem DHCP-Server angefordert. Während dieses Vorgangs kann die Netzwerkverbindung Ihres Geräts vorübergehend unterbrochen werden.",
|
||||
"network_dhcp_lease_renew_confirm_title": "DHCP-Lease erneuern",
|
||||
"network_dhcp_lease_renew_confirm": "Mietvertrag verlängern",
|
||||
"network_dhcp_lease_renew_failed": "Leasing konnte nicht erneuert werden: {error}",
|
||||
"network_dhcp_lease_renew_success": "DHCP-Lease erneuert",
|
||||
|
|
@ -611,7 +581,6 @@
|
|||
"network_ipv4_mode_description": "Konfigurieren des IPv4-Modus",
|
||||
"network_ipv4_mode_dhcp": "DHCP",
|
||||
"network_ipv4_mode_title": "IPv4-Modus",
|
||||
"network_ipv6_addresses": "IPv6-Adressen",
|
||||
"network_ipv6_information": "IPv6-Informationen",
|
||||
"network_ipv6_mode_description": "Konfigurieren des IPv6-Modus",
|
||||
"network_ipv6_mode_disabled": "Deaktiviert",
|
||||
|
|
@ -644,6 +613,7 @@
|
|||
"never_seen_online": "Noch nie online gesehen",
|
||||
"next": "Nächste",
|
||||
"no_results_found": "Keine Ergebnisse gefunden",
|
||||
"not_applicable": "N / A",
|
||||
"not_available": "N / A",
|
||||
"not_found": "Nicht gefunden",
|
||||
"ntp_servers": "NTP-Server",
|
||||
|
|
@ -684,7 +654,6 @@
|
|||
"rename_device_new_name_label": "Neuer Gerätename",
|
||||
"rename_device_new_name_placeholder": "Plex Media Server",
|
||||
"rename_device_no_name": "Bitte geben Sie einen Namen an",
|
||||
"rename": "Umbenennen",
|
||||
"retry": "Wiederholen",
|
||||
"saving": "Speichern…",
|
||||
"search_placeholder": "Suchen…",
|
||||
|
|
@ -719,6 +688,13 @@
|
|||
"something_went_wrong": "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal oder wenden Sie sich an den Support.",
|
||||
"step_counter_step": "Schritt {step}",
|
||||
"subnet_mask": "Subnetzmaske",
|
||||
"time_division_days": "Tage",
|
||||
"time_division_hours": "Std.",
|
||||
"time_division_minutes": "Minuten",
|
||||
"time_division_months": "Monate",
|
||||
"time_division_seconds": "Sekunden",
|
||||
"time_division_weeks": "Wochen",
|
||||
"time_division_years": "Jahre",
|
||||
"troubleshoot_connection": "Verbindungsprobleme beheben",
|
||||
"unknown_error": "Unbekannter Fehler",
|
||||
"update_in_progress": "Aktualisierung läuft",
|
||||
|
|
@ -835,9 +811,7 @@
|
|||
"video_stream_quality_title": "Stream-Qualität",
|
||||
"video_title": "Video",
|
||||
"view_details": "Details anzeigen",
|
||||
"virtual_keyboard_description": "Verwenden Sie die virtuelle Tastatur, um spezielle Tasten oder Tastenkombinationen an den Remotecomputer zu senden.",
|
||||
"virtual_keyboard_header": "Virtuelle Tastatur",
|
||||
"wake_on_lan_add_device_back": "Zurück",
|
||||
"wake_on_lan_add_device_device_name": "Gerätename",
|
||||
"wake_on_lan_add_device_example_device_name": "Plex Media Server",
|
||||
"wake_on_lan_add_device_mac_address": "MAC-Adresse",
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -48,7 +48,6 @@
|
|||
"access_tls_updated": "La configuración de TLS se actualizó correctamente",
|
||||
"access_update_tls_settings": "Actualizar la configuración de TLS",
|
||||
"action_bar_connection_stats": "Estadísticas de conexión",
|
||||
"action_bar_exit_fullscreen": "Salir de pantalla completa",
|
||||
"action_bar_extension": "Extensión",
|
||||
"action_bar_fullscreen": "Pantalla completa",
|
||||
"action_bar_paste_text": "Pegar texto",
|
||||
|
|
@ -201,13 +200,11 @@
|
|||
"dc_power_control_set_restore_state_error": "No se pudo enviar el estado de restauración de energía de CC a {state} : {error}",
|
||||
"dc_power_control_voltage_unit": "V",
|
||||
"dc_power_control_voltage": "Voltaje",
|
||||
"default": "Por defecto",
|
||||
"delete": "Borrar",
|
||||
"deregister_button": "Darse de baja de la nube",
|
||||
"deregister_cloud_devices": "Dispositivos en la nube",
|
||||
"deregister_description": "Esto eliminará el dispositivo de su cuenta en la nube y revocará el acceso remoto. Tenga en cuenta que el acceso local seguirá siendo posible.",
|
||||
"deregister_error": "Se produjo un error {status} al cancelar el registro de su dispositivo. Inténtelo de nuevo.",
|
||||
"deregister_from_cloud": "Darse de baja de la nube",
|
||||
"deregister_headline": "Anular el registro de {device} en su cuenta en la nube",
|
||||
"detach": "Despegar",
|
||||
"dhcp_lease_boot_file": "Archivo de arranque",
|
||||
|
|
@ -330,7 +327,6 @@
|
|||
"invalid_password": "Contraseña inválida",
|
||||
"ip_address": "Dirección IP",
|
||||
"ipv6_address_label": "DIRECCIÓN",
|
||||
"ipv6_addresses": "Direcciones IPv6",
|
||||
"ipv6_information": "Información de IPv6",
|
||||
"ipv6_link_local": "Enlace local",
|
||||
"ipv6_preferred_lifetime": "Vida útil preferida",
|
||||
|
|
@ -339,7 +335,6 @@
|
|||
"jetkvm_device": "Dispositivo JetKVM",
|
||||
"jetkvm_logo": "Logotipo de JetKVM",
|
||||
"jetkvm_setup": "Configura tu JetKVM",
|
||||
"jetkvm": "JetKVM",
|
||||
"jiggler_cron_schedule_description": "Expresión cron para la programación",
|
||||
"jiggler_cron_schedule_label": "Programación cron",
|
||||
"jiggler_example_business_hours_early": "Horario comercial 8-17",
|
||||
|
|
@ -370,7 +365,6 @@
|
|||
"local_auth_change_local_device_password_description": "Ingrese su contraseña actual y una nueva contraseña para actualizar la protección de su dispositivo local.",
|
||||
"local_auth_change_local_device_password_title": "Cambiar la contraseña del dispositivo local",
|
||||
"local_auth_confirm_new_password_label": "Confirmar nueva contraseña",
|
||||
"local_auth_create_confirm_password_label": "Confirmar nueva contraseña",
|
||||
"local_auth_create_confirm_password_placeholder": "Vuelva a introducir su contraseña",
|
||||
"local_auth_create_description": "Cree una contraseña para proteger su dispositivo contra acceso local no autorizado.",
|
||||
"local_auth_create_new_password_label": "Nueva contraseña",
|
||||
|
|
@ -400,12 +394,7 @@
|
|||
"local_auth_success_password_set_title": "Contraseña establecida exitosamente",
|
||||
"local_auth_success_password_updated_description": "Has cambiado correctamente la contraseña de protección de tu dispositivo local. Recuerda la nueva contraseña para acceder en el futuro.",
|
||||
"local_auth_success_password_updated_title": "Contraseña actualizada exitosamente",
|
||||
"local_auth_update_confirm_password_label": "Confirmar nueva contraseña",
|
||||
"local_auth_update_current_password_label": "Contraseña actual",
|
||||
"local_auth_update_description": "Ingrese su contraseña actual y una nueva contraseña para actualizar la protección de su dispositivo local.",
|
||||
"local_auth_update_new_password_label": "Nueva contraseña",
|
||||
"local_auth_update_password_button": "Actualizar contraseña",
|
||||
"local_auth_update_title": "Cambiar la contraseña del dispositivo local",
|
||||
"log_in": "Acceso",
|
||||
"log_out": "Finalizar la sesión",
|
||||
"logged_in_as": "Inició sesión como",
|
||||
|
|
@ -452,19 +441,16 @@
|
|||
"macros_confirm_deleting": "Borrando…",
|
||||
"macros_create_first_description": "Combine pulsaciones de teclas en una sola acción",
|
||||
"macros_create_first_headline": "Crea tu primera macro",
|
||||
"macros_create_first": "Crea tu primera macro para comenzar",
|
||||
"macros_created_success": "Macro \" {name} \" creada correctamente",
|
||||
"macros_delay_only": "Solo retraso",
|
||||
"macros_delete_confirm": "¿Seguro que desea eliminar esta macro? Esta acción no se puede deshacer.",
|
||||
"macros_delete_macro": "Eliminar macro",
|
||||
"macros_deleted_success": "Macro \" {name} \" eliminada correctamente",
|
||||
"macros_deleting": "Eliminando",
|
||||
"macros_duplicate": "Duplicado",
|
||||
"macros_duplicated_success": "Macro \" {name} \" duplicada correctamente",
|
||||
"macros_edit_button": "Editar",
|
||||
"macros_edit_description": "Modificar la macro del teclado",
|
||||
"macros_edit_title": "Editar macro",
|
||||
"macros_edit": "Editar",
|
||||
"macros_failed_create_error": "No se pudo crear la macro: {error}",
|
||||
"macros_failed_create": "No se pudo crear la macro",
|
||||
"macros_failed_delete_error": "No se pudo eliminar la macro: {error}",
|
||||
|
|
@ -479,10 +465,7 @@
|
|||
"macros_loading": "Cargando macros…",
|
||||
"macros_max_reached": "Máximo alcanzado",
|
||||
"macros_maximum_macros_reached": "Ha alcanzado el número máximo de macros {maximum} permitidas.",
|
||||
"macros_move_down": "Bajar",
|
||||
"macros_move_up": "Subir",
|
||||
"macros_no_macros_available": "No hay macros disponibles",
|
||||
"macros_no_macros_found": "No se encontraron macros",
|
||||
"macros_order_updated": "La orden macro se actualizó correctamente",
|
||||
"macros_title": "Macros del teclado",
|
||||
"macros_updated_success": "Macro \" {name} \" actualizada correctamente",
|
||||
|
|
@ -496,8 +479,6 @@
|
|||
"mount_button_continue_upload": "Continuar subiendo",
|
||||
"mount_button_mount_file": "Montar archivo",
|
||||
"mount_button_mount_url": "URL de montaje",
|
||||
"mount_button_next": "Próximo",
|
||||
"mount_button_previous": "Anterior",
|
||||
"mount_button_select": "Seleccionar",
|
||||
"mount_button_showing_results": "Mostrando {from} a {to} de {total} resultados",
|
||||
"mount_button_upload_new_image": "Subir una nueva imagen",
|
||||
|
|
@ -508,7 +489,6 @@
|
|||
"mount_click_to_select_incomplete": "Haga clic para seleccionar \" {name} \"",
|
||||
"mount_confirm_delete": "¿Estás seguro de que deseas eliminar {name} ?",
|
||||
"mount_continue_uploading_with_name": "Continuar cargando \" {name} \"",
|
||||
"mount_description_mode": "Elige cómo quieres montar tus medios virtuales",
|
||||
"mount_error_delete_file": "Error al eliminar el archivo: {error}",
|
||||
"mount_error_description": "Se produjo un error al intentar montar el medio. Inténtelo de nuevo.",
|
||||
"mount_error_get_storage_space": "Error al obtener espacio de almacenamiento: {error}",
|
||||
|
|
@ -517,9 +497,6 @@
|
|||
"mount_get_state_error": "No se pudo obtener el estado del medio virtual: {error}",
|
||||
"mount_jetkvm_storage_description": "Montar archivos cargados previamente desde el almacenamiento JetKVM",
|
||||
"mount_jetkvm_storage": "Soporte de almacenamiento JetKVM",
|
||||
"mount_label_mount_as": "Monte como",
|
||||
"mount_label_url_description": "Montar archivos desde cualquier dirección web pública",
|
||||
"mount_label_url": "Montaje de URL",
|
||||
"mount_mode_cdrom": "CD/DVD",
|
||||
"mount_mode_disk": "Disco",
|
||||
"mount_mounted_as": "Montado como",
|
||||
|
|
@ -528,13 +505,10 @@
|
|||
"mount_no_images_title": "No hay imágenes disponibles",
|
||||
"mount_no_mounted_media": "No hay medios montados",
|
||||
"mount_percentage_used": "{percentageUsed} % usado",
|
||||
"mount_please_select_file_to_upload": "Seleccione el archivo que desea cargar.",
|
||||
"mount_please_select_file": "Seleccione el archivo \" {name} \" para continuar con la carga.",
|
||||
"mount_popular_images": "Imágenes populares",
|
||||
"mount_streaming_from_url": "Transmisión desde URL",
|
||||
"mount_supported_formats": "Formatos compatibles: ISO, IMG",
|
||||
"mount_tag_experimental": "Experimental",
|
||||
"mount_title_mode": "Fuente de medios virtuales",
|
||||
"mount_unmount_error": "Error al desmontar la imagen: {error}",
|
||||
"mount_unmount": "Desmontar",
|
||||
"mount_upload_description": "Seleccione un archivo de imagen para cargar al almacenamiento de JetKVM",
|
||||
|
|
@ -567,7 +541,6 @@
|
|||
"mouse_jiggler_description": "Simular el movimiento de un ratón de ordenador",
|
||||
"mouse_jiggler_disabled": "Desactivado",
|
||||
"mouse_jiggler_error_config": "Se produjo un error al configurar el jiggler.",
|
||||
"mouse_jiggler_failed_config": "No se pudo establecer la configuración de Jiggler: {error}",
|
||||
"mouse_jiggler_failed_state": "No se pudo establecer el estado del jiggler: {error}",
|
||||
"mouse_jiggler_frequent": "Frecuente - 30s",
|
||||
"mouse_jiggler_invalid_cron": "Expresión cron no válida. Verifique el formato de su programación (p. ej., '0 * * * * *' para cada minuto).",
|
||||
|
|
@ -591,10 +564,7 @@
|
|||
"network_custom_domain": "Dominio personalizado",
|
||||
"network_description": "Configurar sus ajustes de red",
|
||||
"network_dhcp_information": "Información de DHCP",
|
||||
"network_dhcp_lease_information": "Información de arrendamiento de DHCP",
|
||||
"network_dhcp_lease_lifetime_not_applicable": "N / A",
|
||||
"network_dhcp_lease_renew_confirm_description": "Esto solicitará una nueva dirección IP a su servidor DHCP. Es posible que su dispositivo pierda temporalmente la conexión a la red durante este proceso.",
|
||||
"network_dhcp_lease_renew_confirm_title": "Renovar la concesión de DHCP",
|
||||
"network_dhcp_lease_renew_confirm": "Renovar el contrato de arrendamiento",
|
||||
"network_dhcp_lease_renew_failed": "No se pudo renovar el contrato de arrendamiento: {error}",
|
||||
"network_dhcp_lease_renew_success": "Se renovó la concesión de DHCP",
|
||||
|
|
@ -611,7 +581,6 @@
|
|||
"network_ipv4_mode_description": "Configurar el modo IPv4",
|
||||
"network_ipv4_mode_dhcp": "DHCP",
|
||||
"network_ipv4_mode_title": "Modo IPv4",
|
||||
"network_ipv6_addresses": "Direcciones IPv6",
|
||||
"network_ipv6_information": "Información de IPv6",
|
||||
"network_ipv6_mode_description": "Configurar el modo IPv6",
|
||||
"network_ipv6_mode_disabled": "Desactivado",
|
||||
|
|
@ -644,6 +613,7 @@
|
|||
"never_seen_online": "Nunca visto en línea",
|
||||
"next": "Próximo",
|
||||
"no_results_found": "No se encontraron resultados",
|
||||
"not_applicable": "N / A",
|
||||
"not_available": "N / A",
|
||||
"not_found": "Extraviado",
|
||||
"ntp_servers": "Servidores NTP",
|
||||
|
|
@ -684,7 +654,6 @@
|
|||
"rename_device_new_name_label": "Nuevo nombre del dispositivo",
|
||||
"rename_device_new_name_placeholder": "Servidor multimedia Plex",
|
||||
"rename_device_no_name": "Por favor especifique un nombre",
|
||||
"rename": "Rebautizar",
|
||||
"retry": "Rever",
|
||||
"saving": "Ahorro…",
|
||||
"search_placeholder": "Buscar…",
|
||||
|
|
@ -719,6 +688,13 @@
|
|||
"something_went_wrong": "Algo salió mal. Inténtalo de nuevo más tarde o contacta con el servicio de asistencia.",
|
||||
"step_counter_step": "Paso {step}",
|
||||
"subnet_mask": "Máscara de subred",
|
||||
"time_division_days": "días",
|
||||
"time_division_hours": "horas",
|
||||
"time_division_minutes": "minutos",
|
||||
"time_division_months": "meses",
|
||||
"time_division_seconds": "artículos de segunda clase",
|
||||
"time_division_weeks": "semanas",
|
||||
"time_division_years": "años",
|
||||
"troubleshoot_connection": "Solucionar problemas de conexión",
|
||||
"unknown_error": "Error desconocido",
|
||||
"update_in_progress": "Actualización en progreso",
|
||||
|
|
@ -835,9 +811,7 @@
|
|||
"video_stream_quality_title": "Calidad de la transmisión",
|
||||
"video_title": "Video",
|
||||
"view_details": "Ver detalles",
|
||||
"virtual_keyboard_description": "Utilice el teclado virtual para enviar teclas especiales o combinaciones de teclas a la computadora remota.",
|
||||
"virtual_keyboard_header": "Teclado virtual",
|
||||
"wake_on_lan_add_device_back": "Atrás",
|
||||
"wake_on_lan_add_device_device_name": "Nombre del dispositivo",
|
||||
"wake_on_lan_add_device_example_device_name": "Servidor multimedia Plex",
|
||||
"wake_on_lan_add_device_mac_address": "Dirección MAC",
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@
|
|||
"access_tls_updated": "Les paramètres TLS ont été mis à jour avec succès",
|
||||
"access_update_tls_settings": "Mettre à jour les paramètres TLS",
|
||||
"action_bar_connection_stats": "Statistiques de connexion",
|
||||
"action_bar_exit_fullscreen": "Quitter le plein écran",
|
||||
"action_bar_extension": "Extension",
|
||||
"action_bar_fullscreen": "Plein écran",
|
||||
"action_bar_paste_text": "Coller du texte",
|
||||
|
|
@ -201,13 +200,11 @@
|
|||
"dc_power_control_set_restore_state_error": "Échec de l'envoi de l'état de restauration de l'alimentation CC à {state} : {error}",
|
||||
"dc_power_control_voltage_unit": "V",
|
||||
"dc_power_control_voltage": "Tension",
|
||||
"default": "Défaut",
|
||||
"delete": "Supprimer",
|
||||
"deregister_button": "Se désinscrire du Cloud",
|
||||
"deregister_cloud_devices": "Appareils Cloud",
|
||||
"deregister_description": "Cela supprimera l'appareil de votre compte cloud et révoquera l'accès à distance. Veuillez noter que l'accès local restera possible.",
|
||||
"deregister_error": "Une erreur {status} s'est produite lors de l'annulation de l'enregistrement de votre appareil. Veuillez réessayer.",
|
||||
"deregister_from_cloud": "Se désinscrire du cloud",
|
||||
"deregister_headline": "Désinscrivez {device} de votre compte cloud",
|
||||
"detach": "Détacher",
|
||||
"dhcp_lease_boot_file": "Fichier de démarrage",
|
||||
|
|
@ -330,7 +327,6 @@
|
|||
"invalid_password": "Mot de passe invalide",
|
||||
"ip_address": "Adresse IP",
|
||||
"ipv6_address_label": "Adresse",
|
||||
"ipv6_addresses": "Adresses IPv6",
|
||||
"ipv6_information": "Informations IPv6",
|
||||
"ipv6_link_local": "Lien local",
|
||||
"ipv6_preferred_lifetime": "Durée de vie préférée",
|
||||
|
|
@ -339,7 +335,6 @@
|
|||
"jetkvm_device": "Périphérique JetKVM",
|
||||
"jetkvm_logo": "Logo JetKVM",
|
||||
"jetkvm_setup": "Configurez votre JetKVM",
|
||||
"jetkvm": "JetKVM",
|
||||
"jiggler_cron_schedule_description": "Expression Cron pour la planification",
|
||||
"jiggler_cron_schedule_label": "Planification Cron",
|
||||
"jiggler_example_business_hours_early": "Heures d'ouverture 8-17",
|
||||
|
|
@ -370,7 +365,6 @@
|
|||
"local_auth_change_local_device_password_description": "Saisissez votre mot de passe actuel et un nouveau mot de passe pour mettre à jour la protection de votre appareil local.",
|
||||
"local_auth_change_local_device_password_title": "Modifier le mot de passe de l'appareil local",
|
||||
"local_auth_confirm_new_password_label": "Confirmer le nouveau mot de passe",
|
||||
"local_auth_create_confirm_password_label": "Confirmer le nouveau mot de passe",
|
||||
"local_auth_create_confirm_password_placeholder": "Ré-entrez votre mot de passe",
|
||||
"local_auth_create_description": "Créez un mot de passe pour protéger votre appareil contre tout accès local non autorisé.",
|
||||
"local_auth_create_new_password_label": "Nouveau mot de passe",
|
||||
|
|
@ -400,12 +394,7 @@
|
|||
"local_auth_success_password_set_title": "Mot de passe défini avec succès",
|
||||
"local_auth_success_password_updated_description": "Vous avez modifié avec succès le mot de passe de protection de votre appareil local. N'oubliez pas de le mémoriser pour y accéder ultérieurement.",
|
||||
"local_auth_success_password_updated_title": "Mot de passe mis à jour avec succès",
|
||||
"local_auth_update_confirm_password_label": "Confirmer le nouveau mot de passe",
|
||||
"local_auth_update_current_password_label": "Mot de passe actuel",
|
||||
"local_auth_update_description": "Saisissez votre mot de passe actuel et un nouveau mot de passe pour mettre à jour la protection de votre appareil local.",
|
||||
"local_auth_update_new_password_label": "Nouveau mot de passe",
|
||||
"local_auth_update_password_button": "Mettre à jour le mot de passe",
|
||||
"local_auth_update_title": "Modifier le mot de passe de l'appareil local",
|
||||
"log_in": "Se connecter",
|
||||
"log_out": "Se déconnecter",
|
||||
"logged_in_as": "Connecté en tant que",
|
||||
|
|
@ -452,19 +441,16 @@
|
|||
"macros_confirm_deleting": "Suppression…",
|
||||
"macros_create_first_description": "Combinez les frappes en une seule action",
|
||||
"macros_create_first_headline": "Créez votre première macro",
|
||||
"macros_create_first": "Créez votre première macro pour commencer",
|
||||
"macros_created_success": "Macro « {name} » créée avec succès",
|
||||
"macros_delay_only": "Retard seulement",
|
||||
"macros_delete_confirm": "Êtes-vous sûr de vouloir supprimer cette macro ? Cette action est irréversible.",
|
||||
"macros_delete_macro": "Supprimer la macro",
|
||||
"macros_deleted_success": "Macro « {name} » supprimée avec succès",
|
||||
"macros_deleting": "Suppression",
|
||||
"macros_duplicate": "Double",
|
||||
"macros_duplicated_success": "Macro « {name} » dupliquée avec succès",
|
||||
"macros_edit_button": "Modifier",
|
||||
"macros_edit_description": "Modifiez votre macro de clavier",
|
||||
"macros_edit_title": "Modifier la macro",
|
||||
"macros_edit": "Modifier",
|
||||
"macros_failed_create_error": "Échec de la création de la macro : {error}",
|
||||
"macros_failed_create": "Échec de la création de la macro",
|
||||
"macros_failed_delete_error": "Échec de la suppression de la macro : {error}",
|
||||
|
|
@ -479,10 +465,7 @@
|
|||
"macros_loading": "Chargement des macros…",
|
||||
"macros_max_reached": "Max atteint",
|
||||
"macros_maximum_macros_reached": "Vous avez atteint le nombre maximal de macros {maximum} autorisées.",
|
||||
"macros_move_down": "Descendre",
|
||||
"macros_move_up": "Monter",
|
||||
"macros_no_macros_available": "Aucune macro disponible",
|
||||
"macros_no_macros_found": "Aucune macro trouvée",
|
||||
"macros_order_updated": "L'ordre des macros a été mis à jour avec succès",
|
||||
"macros_title": "Macros de clavier",
|
||||
"macros_updated_success": "Macro « {name} » mise à jour avec succès",
|
||||
|
|
@ -496,8 +479,6 @@
|
|||
"mount_button_continue_upload": "Continuer le téléchargement",
|
||||
"mount_button_mount_file": "Fichier de montage",
|
||||
"mount_button_mount_url": "URL de montage",
|
||||
"mount_button_next": "Suivant",
|
||||
"mount_button_previous": "Précédent",
|
||||
"mount_button_select": "Sélectionner",
|
||||
"mount_button_showing_results": "Affichage des résultats {from} à {to} sur {total}",
|
||||
"mount_button_upload_new_image": "Télécharger une nouvelle image",
|
||||
|
|
@ -508,7 +489,6 @@
|
|||
"mount_click_to_select_incomplete": "Cliquez pour sélectionner « {name} »",
|
||||
"mount_confirm_delete": "Êtes-vous sûr de vouloir supprimer {name} ?",
|
||||
"mount_continue_uploading_with_name": "Continuer le téléchargement de « {name} »",
|
||||
"mount_description_mode": "Choisissez comment vous souhaitez monter votre support virtuel",
|
||||
"mount_error_delete_file": "Erreur lors de la suppression du fichier : {error}",
|
||||
"mount_error_description": "Une erreur s'est produite lors du montage du support. Veuillez réessayer.",
|
||||
"mount_error_get_storage_space": "Erreur lors de l'obtention de l'espace de stockage : {error}",
|
||||
|
|
@ -517,9 +497,6 @@
|
|||
"mount_get_state_error": "Échec de l'obtention de l'état du support virtuel : {error}",
|
||||
"mount_jetkvm_storage_description": "Monter les fichiers précédemment téléchargés à partir du stockage JetKVM",
|
||||
"mount_jetkvm_storage": "Support de stockage JetKVM",
|
||||
"mount_label_mount_as": "Monter comme",
|
||||
"mount_label_url_description": "Monter des fichiers à partir de n'importe quelle adresse Web publique",
|
||||
"mount_label_url": "Montage d'URL",
|
||||
"mount_mode_cdrom": "CD/DVD",
|
||||
"mount_mode_disk": "Disque",
|
||||
"mount_mounted_as": "Monté comme",
|
||||
|
|
@ -528,13 +505,10 @@
|
|||
"mount_no_images_title": "Aucune image disponible",
|
||||
"mount_no_mounted_media": "Aucun support monté",
|
||||
"mount_percentage_used": "{percentageUsed} % utilisé",
|
||||
"mount_please_select_file_to_upload": "Veuillez sélectionner le fichier à télécharger.",
|
||||
"mount_please_select_file": "Veuillez sélectionner le fichier « {name} » pour continuer le téléchargement.",
|
||||
"mount_popular_images": "Images populaires",
|
||||
"mount_streaming_from_url": "Diffusion à partir d'une URL",
|
||||
"mount_supported_formats": "Formats pris en charge : ISO, IMG",
|
||||
"mount_tag_experimental": "Expérimental",
|
||||
"mount_title_mode": "Source de média virtuel",
|
||||
"mount_unmount_error": "Échec du démontage de l'image : {error}",
|
||||
"mount_unmount": "Démonter",
|
||||
"mount_upload_description": "Sélectionnez un fichier image à télécharger sur le stockage JetKVM",
|
||||
|
|
@ -567,7 +541,6 @@
|
|||
"mouse_jiggler_description": "Simuler le mouvement d'une souris d'ordinateur",
|
||||
"mouse_jiggler_disabled": "Désactivé",
|
||||
"mouse_jiggler_error_config": "Une erreur s'est produite lors de la configuration du jiggler",
|
||||
"mouse_jiggler_failed_config": "Échec de la définition de la configuration du jiggler : {error}",
|
||||
"mouse_jiggler_failed_state": "Échec de la définition de l'état du jiggler : {error}",
|
||||
"mouse_jiggler_frequent": "Fréquent - 30 s",
|
||||
"mouse_jiggler_invalid_cron": "Expression cron non valide. Veuillez vérifier le format de votre planification (par exemple, « 0 * * * * * » pour chaque minute).",
|
||||
|
|
@ -591,10 +564,7 @@
|
|||
"network_custom_domain": "Domaine personnalisé",
|
||||
"network_description": "Configurez vos paramètres réseau",
|
||||
"network_dhcp_information": "Informations DHCP",
|
||||
"network_dhcp_lease_information": "Informations sur le bail DHCP",
|
||||
"network_dhcp_lease_lifetime_not_applicable": "N / A",
|
||||
"network_dhcp_lease_renew_confirm_description": "Cette opération demandera une nouvelle adresse IP à votre serveur DHCP. Votre appareil pourrait perdre temporairement sa connectivité réseau pendant cette opération.",
|
||||
"network_dhcp_lease_renew_confirm_title": "Renouveler le bail DHCP",
|
||||
"network_dhcp_lease_renew_confirm": "Renouveler le bail",
|
||||
"network_dhcp_lease_renew_failed": "Échec du renouvellement du bail : {error}",
|
||||
"network_dhcp_lease_renew_success": "Renouvellement du bail DHCP",
|
||||
|
|
@ -611,7 +581,6 @@
|
|||
"network_ipv4_mode_description": "Configurer le mode IPv4",
|
||||
"network_ipv4_mode_dhcp": "DHCP",
|
||||
"network_ipv4_mode_title": "Mode IPv4",
|
||||
"network_ipv6_addresses": "Adresses IPv6",
|
||||
"network_ipv6_information": "Informations IPv6",
|
||||
"network_ipv6_mode_description": "Configurer le mode IPv6",
|
||||
"network_ipv6_mode_disabled": "Désactivé",
|
||||
|
|
@ -644,6 +613,7 @@
|
|||
"never_seen_online": "Jamais vu en ligne",
|
||||
"next": "Suivant",
|
||||
"no_results_found": "Aucun résultat trouvé",
|
||||
"not_applicable": "N / A",
|
||||
"not_available": "N / A",
|
||||
"not_found": "Non trouvé",
|
||||
"ntp_servers": "Serveurs NTP",
|
||||
|
|
@ -684,7 +654,6 @@
|
|||
"rename_device_new_name_label": "Nouveau nom de l'appareil",
|
||||
"rename_device_new_name_placeholder": "Serveur multimédia Plex",
|
||||
"rename_device_no_name": "Veuillez spécifier un nom",
|
||||
"rename": "Rebaptiser",
|
||||
"retry": "Réessayer",
|
||||
"saving": "Économie…",
|
||||
"search_placeholder": "Rechercher…",
|
||||
|
|
@ -719,6 +688,13 @@
|
|||
"something_went_wrong": "Une erreur s'est produite. Veuillez réessayer ultérieurement ou contacter le support.",
|
||||
"step_counter_step": "Étape {step}",
|
||||
"subnet_mask": "Masque de sous-réseau",
|
||||
"time_division_days": "jours",
|
||||
"time_division_hours": "heures",
|
||||
"time_division_minutes": "minutes",
|
||||
"time_division_months": "mois",
|
||||
"time_division_seconds": "secondes",
|
||||
"time_division_weeks": "semaines",
|
||||
"time_division_years": "années",
|
||||
"troubleshoot_connection": "Dépannage de connexion",
|
||||
"unknown_error": "Erreur inconnue",
|
||||
"update_in_progress": "Mise à jour en cours",
|
||||
|
|
@ -835,9 +811,7 @@
|
|||
"video_stream_quality_title": "Qualité du flux",
|
||||
"video_title": "Vidéo",
|
||||
"view_details": "Voir les détails",
|
||||
"virtual_keyboard_description": "Utilisez le clavier virtuel pour envoyer des touches spéciales ou des combinaisons de touches à l’ordinateur distant.",
|
||||
"virtual_keyboard_header": "Clavier virtuel",
|
||||
"wake_on_lan_add_device_back": "Dos",
|
||||
"wake_on_lan_add_device_device_name": "Nom de l'appareil",
|
||||
"wake_on_lan_add_device_example_device_name": "Serveur multimédia Plex",
|
||||
"wake_on_lan_add_device_mac_address": "Adresse MAC",
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@
|
|||
"access_tls_updated": "Impostazioni TLS aggiornate correttamente",
|
||||
"access_update_tls_settings": "Aggiorna le impostazioni TLS",
|
||||
"action_bar_connection_stats": "Statistiche di connessione",
|
||||
"action_bar_exit_fullscreen": "Esci dalla modalità a schermo intero",
|
||||
"action_bar_extension": "Estensione",
|
||||
"action_bar_fullscreen": "A schermo intero",
|
||||
"action_bar_paste_text": "Incolla il testo",
|
||||
|
|
@ -201,13 +200,11 @@
|
|||
"dc_power_control_set_restore_state_error": "Impossibile inviare lo stato di ripristino dell'alimentazione CC a {state} : {error}",
|
||||
"dc_power_control_voltage_unit": "V",
|
||||
"dc_power_control_voltage": "Voltaggio",
|
||||
"default": "Predefinito",
|
||||
"delete": "Eliminare",
|
||||
"deregister_button": "Annulla registrazione dal cloud",
|
||||
"deregister_cloud_devices": "Dispositivi cloud",
|
||||
"deregister_description": "Questo rimuoverà il dispositivo dal tuo account cloud e ne revocherà l'accesso remoto. Tieni presente che l'accesso locale sarà comunque possibile.",
|
||||
"deregister_error": "Si è verificato un errore {status} durante l'annullamento della registrazione del dispositivo. Riprova.",
|
||||
"deregister_from_cloud": "Annulla la registrazione dal cloud",
|
||||
"deregister_headline": "Annulla la registrazione di {device} dal tuo account cloud",
|
||||
"detach": "Staccare",
|
||||
"dhcp_lease_boot_file": "File di avvio",
|
||||
|
|
@ -330,7 +327,6 @@
|
|||
"invalid_password": "Password non valida",
|
||||
"ip_address": "Indirizzo IP",
|
||||
"ipv6_address_label": "Indirizzo",
|
||||
"ipv6_addresses": "Indirizzi IPv6",
|
||||
"ipv6_information": "Informazioni IPv6",
|
||||
"ipv6_link_local": "Collegamento locale",
|
||||
"ipv6_preferred_lifetime": "Durata preferita",
|
||||
|
|
@ -339,7 +335,6 @@
|
|||
"jetkvm_device": "Dispositivo JetKVM",
|
||||
"jetkvm_logo": "Logo JetKVM",
|
||||
"jetkvm_setup": "Configura il tuo JetKVM",
|
||||
"jetkvm": "JetKVM",
|
||||
"jiggler_cron_schedule_description": "Espressione cron per la pianificazione",
|
||||
"jiggler_cron_schedule_label": "Cron Schedule",
|
||||
"jiggler_example_business_hours_early": "Orario di lavoro 8-17",
|
||||
|
|
@ -370,7 +365,6 @@
|
|||
"local_auth_change_local_device_password_description": "Inserisci la tua password attuale e una nuova password per aggiornare la protezione del tuo dispositivo locale.",
|
||||
"local_auth_change_local_device_password_title": "Cambia la password del dispositivo locale",
|
||||
"local_auth_confirm_new_password_label": "Conferma nuova password",
|
||||
"local_auth_create_confirm_password_label": "Conferma nuova password",
|
||||
"local_auth_create_confirm_password_placeholder": "Reinserisci la tua password",
|
||||
"local_auth_create_description": "Crea una password per proteggere il tuo dispositivo da accessi locali non autorizzati.",
|
||||
"local_auth_create_new_password_label": "Nuova password",
|
||||
|
|
@ -400,12 +394,7 @@
|
|||
"local_auth_success_password_set_title": "Password impostata correttamente",
|
||||
"local_auth_success_password_updated_description": "Hai modificato correttamente la password di protezione del tuo dispositivo locale. Assicurati di ricordare la nuova password per gli accessi futuri.",
|
||||
"local_auth_success_password_updated_title": "Password aggiornata con successo",
|
||||
"local_auth_update_confirm_password_label": "Conferma nuova password",
|
||||
"local_auth_update_current_password_label": "password attuale",
|
||||
"local_auth_update_description": "Inserisci la tua password attuale e una nuova password per aggiornare la protezione del tuo dispositivo locale.",
|
||||
"local_auth_update_new_password_label": "Nuova password",
|
||||
"local_auth_update_password_button": "Aggiorna password",
|
||||
"local_auth_update_title": "Cambia la password del dispositivo locale",
|
||||
"log_in": "Login",
|
||||
"log_out": "Disconnetti",
|
||||
"logged_in_as": "Accedi come",
|
||||
|
|
@ -452,19 +441,16 @@
|
|||
"macros_confirm_deleting": "Eliminazione in corso…",
|
||||
"macros_create_first_description": "Combina le sequenze di tasti in un'unica azione",
|
||||
"macros_create_first_headline": "Crea la tua prima macro",
|
||||
"macros_create_first": "Crea la tua prima macro per iniziare",
|
||||
"macros_created_success": "Macro \" {name} \" creata con successo",
|
||||
"macros_delay_only": "Solo ritardo",
|
||||
"macros_delete_confirm": "Vuoi davvero eliminare questa macro? Questa azione non può essere annullata.",
|
||||
"macros_delete_macro": "Elimina macro",
|
||||
"macros_deleted_success": "Macro \" {name} \" eliminata con successo",
|
||||
"macros_deleting": "Eliminazione",
|
||||
"macros_duplicate": "Duplicato",
|
||||
"macros_duplicated_success": "Macro \" {name} \" duplicata correttamente",
|
||||
"macros_edit_button": "Modificare",
|
||||
"macros_edit_description": "Modifica la macro della tastiera",
|
||||
"macros_edit_title": "Modifica macro",
|
||||
"macros_edit": "Modificare",
|
||||
"macros_failed_create_error": "Impossibile creare la macro: {error}",
|
||||
"macros_failed_create": "Impossibile creare la macro",
|
||||
"macros_failed_delete_error": "Impossibile eliminare la macro: {error}",
|
||||
|
|
@ -479,10 +465,7 @@
|
|||
"macros_loading": "Caricamento macro in corso…",
|
||||
"macros_max_reached": "Massimo raggiunto",
|
||||
"macros_maximum_macros_reached": "Hai raggiunto il numero massimo di {maximum} consentite.",
|
||||
"macros_move_down": "Sposta giù",
|
||||
"macros_move_up": "Spostarsi verso l'alto",
|
||||
"macros_no_macros_available": "Nessuna macro disponibile",
|
||||
"macros_no_macros_found": "Nessuna macro trovata",
|
||||
"macros_order_updated": "Ordine macro aggiornato con successo",
|
||||
"macros_title": "Macro della tastiera",
|
||||
"macros_updated_success": "Macro \" {name} \" aggiornata con successo",
|
||||
|
|
@ -496,8 +479,6 @@
|
|||
"mount_button_continue_upload": "Continua a caricare",
|
||||
"mount_button_mount_file": "Monta file",
|
||||
"mount_button_mount_url": "Monta URL",
|
||||
"mount_button_next": "Prossimo",
|
||||
"mount_button_previous": "Precedente",
|
||||
"mount_button_select": "Selezionare",
|
||||
"mount_button_showing_results": "Visualizzazione di {from} a {to} di {total} risultati",
|
||||
"mount_button_upload_new_image": "Carica una nuova immagine",
|
||||
|
|
@ -508,7 +489,6 @@
|
|||
"mount_click_to_select_incomplete": "Fai clic per selezionare \" {name} \"",
|
||||
"mount_confirm_delete": "Sei sicuro di voler eliminare {name} ?",
|
||||
"mount_continue_uploading_with_name": "Continua a caricare \" {name} \"",
|
||||
"mount_description_mode": "Scegli come vuoi montare i tuoi media virtuali",
|
||||
"mount_error_delete_file": "Errore durante l'eliminazione del file: {error}",
|
||||
"mount_error_description": "Si è verificato un errore durante il tentativo di montare il supporto. Riprova.",
|
||||
"mount_error_get_storage_space": "Errore durante l'ottenimento dello spazio di archiviazione: {error}",
|
||||
|
|
@ -517,9 +497,6 @@
|
|||
"mount_get_state_error": "Impossibile ottenere lo stato del supporto virtuale: {error}",
|
||||
"mount_jetkvm_storage_description": "Montare i file caricati in precedenza dall'archiviazione JetKVM",
|
||||
"mount_jetkvm_storage": "Montaggio di archiviazione JetKVM",
|
||||
"mount_label_mount_as": "Montare come",
|
||||
"mount_label_url_description": "Montare file da qualsiasi indirizzo web pubblico",
|
||||
"mount_label_url": "Montaggio URL",
|
||||
"mount_mode_cdrom": "CD/DVD",
|
||||
"mount_mode_disk": "Disco",
|
||||
"mount_mounted_as": "Montato come",
|
||||
|
|
@ -528,13 +505,10 @@
|
|||
"mount_no_images_title": "Nessuna immagine disponibile",
|
||||
"mount_no_mounted_media": "Nessun supporto montato",
|
||||
"mount_percentage_used": "{percentageUsed} % utilizzata",
|
||||
"mount_please_select_file_to_upload": "Seleziona il file da caricare.",
|
||||
"mount_please_select_file": "Seleziona il file \" {name} \" per continuare il caricamento.",
|
||||
"mount_popular_images": "Immagini popolari",
|
||||
"mount_streaming_from_url": "Streaming da URL",
|
||||
"mount_supported_formats": "Formati supportati: ISO, IMG",
|
||||
"mount_tag_experimental": "Sperimentale",
|
||||
"mount_title_mode": "Fonte multimediale virtuale",
|
||||
"mount_unmount_error": "Impossibile smontare l'immagine: {error}",
|
||||
"mount_unmount": "Smontare",
|
||||
"mount_upload_description": "Seleziona un file immagine da caricare nell'archiviazione JetKVM",
|
||||
|
|
@ -567,7 +541,6 @@
|
|||
"mouse_jiggler_description": "Simula il movimento del mouse di un computer",
|
||||
"mouse_jiggler_disabled": "Disabili",
|
||||
"mouse_jiggler_error_config": "Si è verificato un errore durante l'impostazione della configurazione di Jiggler",
|
||||
"mouse_jiggler_failed_config": "Impossibile impostare la configurazione di Jiggler: {error}",
|
||||
"mouse_jiggler_failed_state": "Impossibile impostare lo stato del jiggler: {error}",
|
||||
"mouse_jiggler_frequent": "Frequente - 30s",
|
||||
"mouse_jiggler_invalid_cron": "Espressione cron non valida. Controlla il formato della tua pianificazione (ad esempio, '0 * * * * *' per ogni minuto).",
|
||||
|
|
@ -591,10 +564,7 @@
|
|||
"network_custom_domain": "Dominio personalizzato",
|
||||
"network_description": "Configura le impostazioni di rete",
|
||||
"network_dhcp_information": "Informazioni DHCP",
|
||||
"network_dhcp_lease_information": "Informazioni sul lease DHCP",
|
||||
"network_dhcp_lease_lifetime_not_applicable": "N / A",
|
||||
"network_dhcp_lease_renew_confirm_description": "Verrà richiesto un nuovo indirizzo IP al server DHCP. Durante questo processo, il dispositivo potrebbe perdere temporaneamente la connettività di rete.",
|
||||
"network_dhcp_lease_renew_confirm_title": "Rinnova il contratto di locazione DHCP",
|
||||
"network_dhcp_lease_renew_confirm": "Rinnovare il contratto di locazione",
|
||||
"network_dhcp_lease_renew_failed": "Impossibile rinnovare il contratto di locazione: {error}",
|
||||
"network_dhcp_lease_renew_success": "Rinnovo del contratto di locazione DHCP",
|
||||
|
|
@ -611,7 +581,6 @@
|
|||
"network_ipv4_mode_description": "Configurare la modalità IPv4",
|
||||
"network_ipv4_mode_dhcp": "DHCP",
|
||||
"network_ipv4_mode_title": "Modalità IPv4",
|
||||
"network_ipv6_addresses": "Indirizzi IPv6",
|
||||
"network_ipv6_information": "Informazioni IPv6",
|
||||
"network_ipv6_mode_description": "Configurare la modalità IPv6",
|
||||
"network_ipv6_mode_disabled": "Disabili",
|
||||
|
|
@ -644,6 +613,7 @@
|
|||
"never_seen_online": "Mai visto online",
|
||||
"next": "Prossimo",
|
||||
"no_results_found": "Nessun risultato trovato",
|
||||
"not_applicable": "N / A",
|
||||
"not_available": "N / A",
|
||||
"not_found": "Non trovato",
|
||||
"ntp_servers": "Server NTP",
|
||||
|
|
@ -684,7 +654,6 @@
|
|||
"rename_device_new_name_label": "Nuovo nome del dispositivo",
|
||||
"rename_device_new_name_placeholder": "Server multimediale Plex",
|
||||
"rename_device_no_name": "Si prega di specificare un nome",
|
||||
"rename": "Rinominare",
|
||||
"retry": "Riprova",
|
||||
"saving": "Risparmio…",
|
||||
"search_placeholder": "Ricerca…",
|
||||
|
|
@ -719,6 +688,13 @@
|
|||
"something_went_wrong": "Qualcosa è andato storto. Riprova più tardi o contatta l'assistenza.",
|
||||
"step_counter_step": "Passaggio {step}",
|
||||
"subnet_mask": "Maschera di sottorete",
|
||||
"time_division_days": "giorni",
|
||||
"time_division_hours": "ore",
|
||||
"time_division_minutes": "minuti",
|
||||
"time_division_months": "mesi",
|
||||
"time_division_seconds": "secondi",
|
||||
"time_division_weeks": "settimane",
|
||||
"time_division_years": "anni",
|
||||
"troubleshoot_connection": "Risoluzione dei problemi di connessione",
|
||||
"unknown_error": "Errore sconosciuto",
|
||||
"update_in_progress": "Aggiornamento in corso",
|
||||
|
|
@ -835,9 +811,7 @@
|
|||
"video_stream_quality_title": "Qualità dello streaming",
|
||||
"video_title": "Video",
|
||||
"view_details": "Visualizza dettagli",
|
||||
"virtual_keyboard_description": "Utilizzare la tastiera virtuale per inviare tasti speciali o combinazioni di tasti al computer remoto.",
|
||||
"virtual_keyboard_header": "Tastiera virtuale",
|
||||
"wake_on_lan_add_device_back": "Indietro",
|
||||
"wake_on_lan_add_device_device_name": "Nome del dispositivo",
|
||||
"wake_on_lan_add_device_example_device_name": "Server multimediale Plex",
|
||||
"wake_on_lan_add_device_mac_address": "Indirizzo MAC",
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@
|
|||
"access_tls_updated": "TLS-innstillingene er oppdatert",
|
||||
"access_update_tls_settings": "Oppdater TLS-innstillinger",
|
||||
"action_bar_connection_stats": "Tilkoblingsstatistikk",
|
||||
"action_bar_exit_fullscreen": "Avslutt fullskjerm",
|
||||
"action_bar_extension": "Forlengelse",
|
||||
"action_bar_fullscreen": "Fullskjerm",
|
||||
"action_bar_paste_text": "Lim inn tekst",
|
||||
|
|
@ -201,13 +200,11 @@
|
|||
"dc_power_control_set_restore_state_error": "Kunne ikke sende gjenopprettingsstatus for likestrøm til {state} : {error}",
|
||||
"dc_power_control_voltage_unit": "V",
|
||||
"dc_power_control_voltage": "Spenning",
|
||||
"default": "Misligholde",
|
||||
"delete": "Slett",
|
||||
"deregister_button": "Avregistrer deg fra skyen",
|
||||
"deregister_cloud_devices": "Skyenheter",
|
||||
"deregister_description": "Dette vil fjerne enheten fra skykontoen din og oppheve ekstern tilgang til den. Vær oppmerksom på at lokal tilgang fortsatt vil være mulig.",
|
||||
"deregister_error": "Det oppsto en feil {status} enheten din skulle avregistreres. Prøv på nytt.",
|
||||
"deregister_from_cloud": "Avregistrer deg fra skyen",
|
||||
"deregister_headline": "Avregistrer {device} fra skykontoen din",
|
||||
"detach": "Løsne",
|
||||
"dhcp_lease_boot_file": "Oppstartsfil",
|
||||
|
|
@ -330,7 +327,6 @@
|
|||
"invalid_password": "Ugyldig passord",
|
||||
"ip_address": "IP-adresse",
|
||||
"ipv6_address_label": "Adresse",
|
||||
"ipv6_addresses": "IPv6-adresser",
|
||||
"ipv6_information": "IPv6-informasjon",
|
||||
"ipv6_link_local": "Link-local",
|
||||
"ipv6_preferred_lifetime": "Foretrukket levetid",
|
||||
|
|
@ -339,7 +335,6 @@
|
|||
"jetkvm_device": "JetKVM-enhet",
|
||||
"jetkvm_logo": "JetKVM-logo",
|
||||
"jetkvm_setup": "Sett opp JetKVM-en din",
|
||||
"jetkvm": "JetKVM",
|
||||
"jiggler_cron_schedule_description": "Cron-uttrykk for planlegging",
|
||||
"jiggler_cron_schedule_label": "Cron-plan",
|
||||
"jiggler_example_business_hours_early": "Åpningstider 8-17",
|
||||
|
|
@ -370,7 +365,6 @@
|
|||
"local_auth_change_local_device_password_description": "Skriv inn ditt nåværende passord og et nytt passord for å oppdatere den lokale enhetsbeskyttelsen.",
|
||||
"local_auth_change_local_device_password_title": "Endre passord for lokal enhet",
|
||||
"local_auth_confirm_new_password_label": "Bekreft nytt passord",
|
||||
"local_auth_create_confirm_password_label": "Bekreft nytt passord",
|
||||
"local_auth_create_confirm_password_placeholder": "Skriv inn passordet ditt på nytt",
|
||||
"local_auth_create_description": "Opprett et passord for å beskytte enheten din mot uautorisert lokal tilgang.",
|
||||
"local_auth_create_new_password_label": "Nytt passord",
|
||||
|
|
@ -400,12 +394,7 @@
|
|||
"local_auth_success_password_set_title": "Passord angitt",
|
||||
"local_auth_success_password_updated_description": "Du har endret passordet for beskyttelse av den lokale enheten. Husk det nye passordet for fremtidig tilgang.",
|
||||
"local_auth_success_password_updated_title": "Passord oppdatert",
|
||||
"local_auth_update_confirm_password_label": "Bekreft nytt passord",
|
||||
"local_auth_update_current_password_label": "Nåværende passord",
|
||||
"local_auth_update_description": "Skriv inn ditt nåværende passord og et nytt passord for å oppdatere den lokale enhetsbeskyttelsen.",
|
||||
"local_auth_update_new_password_label": "Nytt passord",
|
||||
"local_auth_update_password_button": "Oppdater passord",
|
||||
"local_auth_update_title": "Endre passord for lokal enhet",
|
||||
"log_in": "Logg inn",
|
||||
"log_out": "Logg ut",
|
||||
"logged_in_as": "Logget inn som",
|
||||
|
|
@ -452,19 +441,16 @@
|
|||
"macros_confirm_deleting": "Sletter…",
|
||||
"macros_create_first_description": "Kombiner tastetrykk til én handling",
|
||||
"macros_create_first_headline": "Lag din første makro",
|
||||
"macros_create_first": "Opprett din første makro for å komme i gang",
|
||||
"macros_created_success": "Makroen « {name} « ble opprettet",
|
||||
"macros_delay_only": "Bare forsinkelse",
|
||||
"macros_delete_confirm": "Er du sikker på at du vil slette denne makroen? Denne handlingen kan ikke angres.",
|
||||
"macros_delete_macro": "Slett makro",
|
||||
"macros_deleted_success": "Makroen « {name} « ble slettet",
|
||||
"macros_deleting": "Sletter",
|
||||
"macros_duplicate": "Kopiere",
|
||||
"macros_duplicated_success": "Makroen « {name} « ble duplisert",
|
||||
"macros_edit_button": "Redigere",
|
||||
"macros_edit_description": "Endre tastaturmakroen din",
|
||||
"macros_edit_title": "Rediger makro",
|
||||
"macros_edit": "Redigere",
|
||||
"macros_failed_create_error": "Klarte ikke å opprette makro: {error}",
|
||||
"macros_failed_create": "Kunne ikke opprette makroen",
|
||||
"macros_failed_delete_error": "Klarte ikke å slette makroen: {error}",
|
||||
|
|
@ -479,10 +465,7 @@
|
|||
"macros_loading": "Laster inn makroer …",
|
||||
"macros_max_reached": "Maks nådd",
|
||||
"macros_maximum_macros_reached": "Du har nådd det maksimale antallet tillatte makroer {maximum}",
|
||||
"macros_move_down": "Flytt ned",
|
||||
"macros_move_up": "Flytt opp",
|
||||
"macros_no_macros_available": "Ingen makroer tilgjengelig",
|
||||
"macros_no_macros_found": "Ingen makroer funnet",
|
||||
"macros_order_updated": "Makroordren er oppdatert",
|
||||
"macros_title": "Tastaturmakroer",
|
||||
"macros_updated_success": "Makroen « {name} « ble oppdatert",
|
||||
|
|
@ -496,8 +479,6 @@
|
|||
"mount_button_continue_upload": "Fortsett opplastingen",
|
||||
"mount_button_mount_file": "Monter fil",
|
||||
"mount_button_mount_url": "Monterings-URL",
|
||||
"mount_button_next": "Neste",
|
||||
"mount_button_previous": "Tidligere",
|
||||
"mount_button_select": "Velge",
|
||||
"mount_button_showing_results": "Viser {from} til {to} av {total} resultater",
|
||||
"mount_button_upload_new_image": "Last opp et nytt bilde",
|
||||
|
|
@ -508,7 +489,6 @@
|
|||
"mount_click_to_select_incomplete": "Klikk for å velge « {name} »",
|
||||
"mount_confirm_delete": "Er du sikker på at du vil slette {name} ?",
|
||||
"mount_continue_uploading_with_name": "Fortsett å laste opp « {name} »",
|
||||
"mount_description_mode": "Velg hvordan du vil montere virtuelle medier",
|
||||
"mount_error_delete_file": "Feil ved sletting av fil: {error}",
|
||||
"mount_error_description": "Det oppsto en feil under forsøk på å montere mediet. Prøv på nytt.",
|
||||
"mount_error_get_storage_space": "Feil ved henting av lagringsplass: {error}",
|
||||
|
|
@ -517,9 +497,6 @@
|
|||
"mount_get_state_error": "Klarte ikke å hente status for virtuelle medier: {error}",
|
||||
"mount_jetkvm_storage_description": "Monter tidligere opplastede filer fra JetKVM-lagringen",
|
||||
"mount_jetkvm_storage": "JetKVM-lagringsmontering",
|
||||
"mount_label_mount_as": "Monter som",
|
||||
"mount_label_url_description": "Monter filer fra en hvilken som helst offentlig nettadresse",
|
||||
"mount_label_url": "URL-montering",
|
||||
"mount_mode_cdrom": "CD/DVD",
|
||||
"mount_mode_disk": "Disk",
|
||||
"mount_mounted_as": "Montert som",
|
||||
|
|
@ -528,13 +505,10 @@
|
|||
"mount_no_images_title": "Ingen bilder tilgjengelig",
|
||||
"mount_no_mounted_media": "Ingen monterte medier",
|
||||
"mount_percentage_used": "{percentageUsed} % brukt",
|
||||
"mount_please_select_file_to_upload": "Vennligst velg filen du vil laste opp.",
|
||||
"mount_please_select_file": "Vennligst velg filen « {name} » for å fortsette opplastingen.",
|
||||
"mount_popular_images": "Populære bilder",
|
||||
"mount_streaming_from_url": "Strømming fra URL",
|
||||
"mount_supported_formats": "Støttede formater: ISO, IMG",
|
||||
"mount_tag_experimental": "Eksperimentell",
|
||||
"mount_title_mode": "Virtuell mediekilde",
|
||||
"mount_unmount_error": "Klarte ikke å demontere bildet: {error}",
|
||||
"mount_unmount": "Avmonter",
|
||||
"mount_upload_description": "Velg en bildefil som skal lastes opp til JetKVM-lagring",
|
||||
|
|
@ -567,7 +541,6 @@
|
|||
"mouse_jiggler_description": "Simuler bevegelsen til en datamus",
|
||||
"mouse_jiggler_disabled": "Funksjonshemmet",
|
||||
"mouse_jiggler_error_config": "Det oppsto en feil under innstilling av jiggler-konfigurasjonen",
|
||||
"mouse_jiggler_failed_config": "Klarte ikke å angi jiggler-konfigurasjon: {error}",
|
||||
"mouse_jiggler_failed_state": "Klarte ikke å angi jiggler-tilstand: {error}",
|
||||
"mouse_jiggler_frequent": "Hyppig - 30-tallet",
|
||||
"mouse_jiggler_invalid_cron": "Ugyldig cron-uttrykk. Sjekk planformatet ditt (f.eks. '0 * * * * *' for hvert minutt).",
|
||||
|
|
@ -591,10 +564,7 @@
|
|||
"network_custom_domain": "Tilpasset domene",
|
||||
"network_description": "Konfigurer nettverksinnstillingene dine",
|
||||
"network_dhcp_information": "DHCP-informasjon",
|
||||
"network_dhcp_lease_information": "DHCP-leaseinformasjon",
|
||||
"network_dhcp_lease_lifetime_not_applicable": "Ikke aktuelt",
|
||||
"network_dhcp_lease_renew_confirm_description": "Dette vil be om en ny IP-adresse fra DHCP-serveren din. Enheten din kan midlertidig miste nettverkstilkoblingen under denne prosessen.",
|
||||
"network_dhcp_lease_renew_confirm_title": "Forny DHCP-leieavtale",
|
||||
"network_dhcp_lease_renew_confirm": "Forny leieavtalen",
|
||||
"network_dhcp_lease_renew_failed": "Kunne ikke fornye leieavtalen: {error}",
|
||||
"network_dhcp_lease_renew_success": "DHCP-leieavtale fornyet",
|
||||
|
|
@ -611,7 +581,6 @@
|
|||
"network_ipv4_mode_description": "Konfigurer IPv4-modusen",
|
||||
"network_ipv4_mode_dhcp": "DHCP",
|
||||
"network_ipv4_mode_title": "IPv4-modus",
|
||||
"network_ipv6_addresses": "IPv6-adresser",
|
||||
"network_ipv6_information": "IPv6-informasjon",
|
||||
"network_ipv6_mode_description": "Konfigurer IPv6-modusen",
|
||||
"network_ipv6_mode_disabled": "Funksjonshemmet",
|
||||
|
|
@ -644,6 +613,7 @@
|
|||
"never_seen_online": "Aldri sett på nett",
|
||||
"next": "Neste",
|
||||
"no_results_found": "Ingen resultater funnet",
|
||||
"not_applicable": "Ikke aktuelt",
|
||||
"not_available": "Ikke aktuelt",
|
||||
"not_found": "Ikke funnet",
|
||||
"ntp_servers": "NTP-servere",
|
||||
|
|
@ -684,7 +654,6 @@
|
|||
"rename_device_new_name_label": "Nytt enhetsnavn",
|
||||
"rename_device_new_name_placeholder": "Plex Media Server",
|
||||
"rename_device_no_name": "Vennligst oppgi et navn",
|
||||
"rename": "Gi nytt navn",
|
||||
"retry": "Prøv på nytt",
|
||||
"saving": "Lagrer…",
|
||||
"search_placeholder": "Søk…",
|
||||
|
|
@ -719,6 +688,13 @@
|
|||
"something_went_wrong": "Noe gikk galt. Prøv igjen senere, eller kontakt kundestøtte.",
|
||||
"step_counter_step": "Trinn {step}",
|
||||
"subnet_mask": "Nettmaske",
|
||||
"time_division_days": "dager",
|
||||
"time_division_hours": "timer",
|
||||
"time_division_minutes": "minutter",
|
||||
"time_division_months": "måneder",
|
||||
"time_division_seconds": "sekunder",
|
||||
"time_division_weeks": "uker",
|
||||
"time_division_years": "år",
|
||||
"troubleshoot_connection": "Feilsøking av tilkobling",
|
||||
"unknown_error": "Ukjent feil",
|
||||
"update_in_progress": "Oppdatering pågår",
|
||||
|
|
@ -835,9 +811,7 @@
|
|||
"video_stream_quality_title": "Strømmekvalitet",
|
||||
"video_title": "Video",
|
||||
"view_details": "Vis detaljer",
|
||||
"virtual_keyboard_description": "Bruk det virtuelle tastaturet til å sende spesialtaster eller tastekombinasjoner til den eksterne datamaskinen.",
|
||||
"virtual_keyboard_header": "Virtuelt tastatur",
|
||||
"wake_on_lan_add_device_back": "Tilbake",
|
||||
"wake_on_lan_add_device_device_name": "Enhetsnavn",
|
||||
"wake_on_lan_add_device_example_device_name": "Plex Media Server",
|
||||
"wake_on_lan_add_device_mac_address": "MAC-adresse",
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@
|
|||
"access_tls_updated": "TLS-inställningarna har uppdaterats",
|
||||
"access_update_tls_settings": "Uppdatera TLS-inställningar",
|
||||
"action_bar_connection_stats": "Anslutningsstatistik",
|
||||
"action_bar_exit_fullscreen": "Avsluta helskärm",
|
||||
"action_bar_extension": "Förlängning",
|
||||
"action_bar_fullscreen": "Helskärm",
|
||||
"action_bar_paste_text": "Klistra in text",
|
||||
|
|
@ -201,13 +200,11 @@
|
|||
"dc_power_control_set_restore_state_error": "Misslyckades med att skicka återställningsstatus för likström till {state} : {error}",
|
||||
"dc_power_control_voltage_unit": "V",
|
||||
"dc_power_control_voltage": "Spänning",
|
||||
"default": "Standard",
|
||||
"delete": "Radera",
|
||||
"deregister_button": "Avregistrera dig från molnet",
|
||||
"deregister_cloud_devices": "Molnenheter",
|
||||
"deregister_description": "Detta kommer att ta bort enheten från ditt molnkonto och återkalla fjärråtkomst till den. Observera att lokal åtkomst fortfarande kommer att vara möjlig.",
|
||||
"deregister_error": "Det uppstod ett fel {status} enheten avregistrerades. Försök igen.",
|
||||
"deregister_from_cloud": "Avregistrera dig från molnet",
|
||||
"deregister_headline": "Avregistrera {device} från ditt molnkonto",
|
||||
"detach": "Lösgöra",
|
||||
"dhcp_lease_boot_file": "Startfil",
|
||||
|
|
@ -330,7 +327,6 @@
|
|||
"invalid_password": "Ogiltigt lösenord",
|
||||
"ip_address": "IP-adress",
|
||||
"ipv6_address_label": "Adress",
|
||||
"ipv6_addresses": "IPv6-adresser",
|
||||
"ipv6_information": "IPv6-information",
|
||||
"ipv6_link_local": "Länklokal",
|
||||
"ipv6_preferred_lifetime": "Föredragen livslängd",
|
||||
|
|
@ -339,7 +335,6 @@
|
|||
"jetkvm_device": "JetKVM-enhet",
|
||||
"jetkvm_logo": "JetKVM-logotyp",
|
||||
"jetkvm_setup": "Konfigurera din JetKVM",
|
||||
"jetkvm": "JetKVM",
|
||||
"jiggler_cron_schedule_description": "Cron-uttryck för schemaläggning",
|
||||
"jiggler_cron_schedule_label": "Cron-schema",
|
||||
"jiggler_example_business_hours_early": "Öppettider 8-17",
|
||||
|
|
@ -370,7 +365,6 @@
|
|||
"local_auth_change_local_device_password_description": "Ange ditt nuvarande lösenord och ett nytt lösenord för att uppdatera ditt lokala enhetsskydd.",
|
||||
"local_auth_change_local_device_password_title": "Ändra lösenord för lokal enhet",
|
||||
"local_auth_confirm_new_password_label": "Bekräfta nytt lösenord",
|
||||
"local_auth_create_confirm_password_label": "Bekräfta nytt lösenord",
|
||||
"local_auth_create_confirm_password_placeholder": "Ange ditt lösenord igen",
|
||||
"local_auth_create_description": "Skapa ett lösenord för att skydda din enhet från obehörig lokal åtkomst.",
|
||||
"local_auth_create_new_password_label": "Nytt lösenord",
|
||||
|
|
@ -400,12 +394,7 @@
|
|||
"local_auth_success_password_set_title": "Lösenordet har ställts in",
|
||||
"local_auth_success_password_updated_description": "Du har ändrat ditt lösenord för lokal enhetsskydd. Se till att komma ihåg ditt nya lösenord för framtida åtkomst.",
|
||||
"local_auth_success_password_updated_title": "Lösenordet har uppdaterats",
|
||||
"local_auth_update_confirm_password_label": "Bekräfta nytt lösenord",
|
||||
"local_auth_update_current_password_label": "Nuvarande lösenord",
|
||||
"local_auth_update_description": "Ange ditt nuvarande lösenord och ett nytt lösenord för att uppdatera ditt lokala enhetsskydd.",
|
||||
"local_auth_update_new_password_label": "Nytt lösenord",
|
||||
"local_auth_update_password_button": "Uppdatera lösenord",
|
||||
"local_auth_update_title": "Ändra lösenord för lokal enhet",
|
||||
"log_in": "Logga in",
|
||||
"log_out": "Logga ut",
|
||||
"logged_in_as": "Inloggad som",
|
||||
|
|
@ -452,19 +441,16 @@
|
|||
"macros_confirm_deleting": "Tar bort…",
|
||||
"macros_create_first_description": "Kombinera tangenttryckningar till en enda åtgärd",
|
||||
"macros_create_first_headline": "Skapa ditt första makro",
|
||||
"macros_create_first": "Skapa ditt första makro för att komma igång",
|
||||
"macros_created_success": "Makrot \" {name} \" skapades",
|
||||
"macros_delay_only": "Endast fördröjning",
|
||||
"macros_delete_confirm": "Är du säker på att du vill ta bort det här makrot? Åtgärden kan inte ångras.",
|
||||
"macros_delete_macro": "Ta bort makro",
|
||||
"macros_deleted_success": "Makrot \" {name} \" har raderats",
|
||||
"macros_deleting": "Tar bort",
|
||||
"macros_duplicate": "Duplicera",
|
||||
"macros_duplicated_success": "Makrot \" {name} \" duplicerades",
|
||||
"macros_edit_button": "Redigera",
|
||||
"macros_edit_description": "Ändra ditt tangentbordsmakro",
|
||||
"macros_edit_title": "Redigera makro",
|
||||
"macros_edit": "Redigera",
|
||||
"macros_failed_create_error": "Misslyckades med att skapa makrot: {error}",
|
||||
"macros_failed_create": "Misslyckades med att skapa makrot",
|
||||
"macros_failed_delete_error": "Misslyckades med att ta bort makrot: {error}",
|
||||
|
|
@ -479,10 +465,7 @@
|
|||
"macros_loading": "Läser in makron…",
|
||||
"macros_max_reached": "Max uppnått",
|
||||
"macros_maximum_macros_reached": "Du har nått det maximala antalet tillåtna makron {maximum} .",
|
||||
"macros_move_down": "Flytta ner",
|
||||
"macros_move_up": "Flytta upp",
|
||||
"macros_no_macros_available": "Inga makron tillgängliga",
|
||||
"macros_no_macros_found": "Inga makron hittades",
|
||||
"macros_order_updated": "Makroordningen har uppdaterats",
|
||||
"macros_title": "Tangentbordsmakron",
|
||||
"macros_updated_success": "Makrot \" {name} \" uppdaterades",
|
||||
|
|
@ -496,8 +479,6 @@
|
|||
"mount_button_continue_upload": "Fortsätt uppladdningen",
|
||||
"mount_button_mount_file": "Montera fil",
|
||||
"mount_button_mount_url": "Monterings-URL",
|
||||
"mount_button_next": "Nästa",
|
||||
"mount_button_previous": "Tidigare",
|
||||
"mount_button_select": "Välja",
|
||||
"mount_button_showing_results": "Visar {from} till {to} av {total} resultat",
|
||||
"mount_button_upload_new_image": "Ladda upp en ny bild",
|
||||
|
|
@ -508,7 +489,6 @@
|
|||
"mount_click_to_select_incomplete": "Klicka för att välja \" {name} \"",
|
||||
"mount_confirm_delete": "Är du säker på att du vill ta bort {name} ?",
|
||||
"mount_continue_uploading_with_name": "Fortsätt ladda upp \" {name} \"",
|
||||
"mount_description_mode": "Välj hur du vill montera ditt virtuella media",
|
||||
"mount_error_delete_file": "Fel vid borttagning av fil: {error}",
|
||||
"mount_error_description": "Ett fel uppstod när mediet skulle monteras. Försök igen.",
|
||||
"mount_error_get_storage_space": "Fel vid hämtning av lagringsutrymme: {error}",
|
||||
|
|
@ -517,9 +497,6 @@
|
|||
"mount_get_state_error": "Misslyckades med att hämta virtuellt medietillstånd: {error}",
|
||||
"mount_jetkvm_storage_description": "Montera tidigare uppladdade filer från JetKVM-lagringen",
|
||||
"mount_jetkvm_storage": "JetKVM-lagringsmontering",
|
||||
"mount_label_mount_as": "Montera som",
|
||||
"mount_label_url_description": "Montera filer från valfri offentlig webbadress",
|
||||
"mount_label_url": "URL-montering",
|
||||
"mount_mode_cdrom": "CD/DVD",
|
||||
"mount_mode_disk": "Disk",
|
||||
"mount_mounted_as": "Monterad som",
|
||||
|
|
@ -528,13 +505,10 @@
|
|||
"mount_no_images_title": "Inga bilder tillgängliga",
|
||||
"mount_no_mounted_media": "Inget monterat media",
|
||||
"mount_percentage_used": "{percentageUsed} % använd",
|
||||
"mount_please_select_file_to_upload": "Välj filen att ladda upp.",
|
||||
"mount_please_select_file": "Välj filen \" {name} \" för att fortsätta uppladdningen.",
|
||||
"mount_popular_images": "Populära bilder",
|
||||
"mount_streaming_from_url": "Streaming från URL",
|
||||
"mount_supported_formats": "Format som stöds: ISO, IMG",
|
||||
"mount_tag_experimental": "Experimentell",
|
||||
"mount_title_mode": "Virtuell mediekälla",
|
||||
"mount_unmount_error": "Misslyckades med att avmontera bilden: {error}",
|
||||
"mount_unmount": "Avmontera",
|
||||
"mount_upload_description": "Välj en bildfil att ladda upp till JetKVM-lagring",
|
||||
|
|
@ -567,7 +541,6 @@
|
|||
"mouse_jiggler_description": "Simulera rörelsen hos en datormus",
|
||||
"mouse_jiggler_disabled": "Funktionshindrad",
|
||||
"mouse_jiggler_error_config": "Det uppstod ett fel vid konfiguration av jiggler",
|
||||
"mouse_jiggler_failed_config": "Misslyckades med att ställa in jiggler-konfigurationen: {error}",
|
||||
"mouse_jiggler_failed_state": "Misslyckades med att ställa in jiggler-tillstånd: {error}",
|
||||
"mouse_jiggler_frequent": "Frekvent - 30-talet",
|
||||
"mouse_jiggler_invalid_cron": "Ogiltigt cron-uttryck. Kontrollera schemaformatet (t.ex. '0 * * * * *' för varje minut).",
|
||||
|
|
@ -591,10 +564,7 @@
|
|||
"network_custom_domain": "Anpassad domän",
|
||||
"network_description": "Konfigurera dina nätverksinställningar",
|
||||
"network_dhcp_information": "DHCP-information",
|
||||
"network_dhcp_lease_information": "DHCP-leasinginformation",
|
||||
"network_dhcp_lease_lifetime_not_applicable": "Ej tillämpligt",
|
||||
"network_dhcp_lease_renew_confirm_description": "Detta kommer att begära en ny IP-adress från din DHCP-server. Din enhet kan tillfälligt förlora nätverksanslutningen under denna process.",
|
||||
"network_dhcp_lease_renew_confirm_title": "Förnya DHCP-lease",
|
||||
"network_dhcp_lease_renew_confirm": "Förnya hyresavtalet",
|
||||
"network_dhcp_lease_renew_failed": "Misslyckades med att förnya leasingavtalet: {error}",
|
||||
"network_dhcp_lease_renew_success": "DHCP-lease förnyad",
|
||||
|
|
@ -611,7 +581,6 @@
|
|||
"network_ipv4_mode_description": "Konfigurera IPv4-läget",
|
||||
"network_ipv4_mode_dhcp": "DHCP",
|
||||
"network_ipv4_mode_title": "IPv4-läge",
|
||||
"network_ipv6_addresses": "IPv6-adresser",
|
||||
"network_ipv6_information": "IPv6-information",
|
||||
"network_ipv6_mode_description": "Konfigurera IPv6-läget",
|
||||
"network_ipv6_mode_disabled": "Funktionshindrad",
|
||||
|
|
@ -644,6 +613,7 @@
|
|||
"never_seen_online": "Aldrig sett online",
|
||||
"next": "Nästa",
|
||||
"no_results_found": "Inga resultat hittades",
|
||||
"not_applicable": "Ej tillämpligt",
|
||||
"not_available": "Ej tillämpligt",
|
||||
"not_found": "Inte hittad",
|
||||
"ntp_servers": "NTP-servrar",
|
||||
|
|
@ -684,7 +654,6 @@
|
|||
"rename_device_new_name_label": "Nytt enhetsnamn",
|
||||
"rename_device_new_name_placeholder": "Plex Media Server",
|
||||
"rename_device_no_name": "Vänligen ange ett namn",
|
||||
"rename": "Döpa om",
|
||||
"retry": "Försöka igen",
|
||||
"saving": "Sparande…",
|
||||
"search_placeholder": "Söka…",
|
||||
|
|
@ -719,6 +688,13 @@
|
|||
"something_went_wrong": "Något gick fel. Försök igen senare eller kontakta supporten.",
|
||||
"step_counter_step": "Steg {step}",
|
||||
"subnet_mask": "Subnätmask",
|
||||
"time_division_days": "dagar",
|
||||
"time_division_hours": "timmar",
|
||||
"time_division_minutes": "minuter",
|
||||
"time_division_months": "månader",
|
||||
"time_division_seconds": "sekunder",
|
||||
"time_division_weeks": "veckor",
|
||||
"time_division_years": "år",
|
||||
"troubleshoot_connection": "Felsök anslutning",
|
||||
"unknown_error": "Okänt fel",
|
||||
"update_in_progress": "Uppdatering pågår",
|
||||
|
|
@ -835,9 +811,7 @@
|
|||
"video_stream_quality_title": "Strömningskvalitet",
|
||||
"video_title": "Video",
|
||||
"view_details": "Visa detaljer",
|
||||
"virtual_keyboard_description": "Använd det virtuella tangentbordet för att skicka specialtangenter eller tangentkombinationer till fjärrdatorn.",
|
||||
"virtual_keyboard_header": "Virtuellt tangentbord",
|
||||
"wake_on_lan_add_device_back": "Tillbaka",
|
||||
"wake_on_lan_add_device_device_name": "Enhetsnamn",
|
||||
"wake_on_lan_add_device_example_device_name": "Plex Media Server",
|
||||
"wake_on_lan_add_device_mac_address": "MAC-adress",
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@
|
|||
"access_tls_updated": "TLS 设置更新成功",
|
||||
"access_update_tls_settings": "更新 TLS 设置",
|
||||
"action_bar_connection_stats": "连接统计",
|
||||
"action_bar_exit_fullscreen": "退出全屏",
|
||||
"action_bar_extension": "扩展",
|
||||
"action_bar_fullscreen": "全屏",
|
||||
"action_bar_paste_text": "粘贴文本",
|
||||
|
|
@ -201,13 +200,11 @@
|
|||
"dc_power_control_set_restore_state_error": "无法将直流电源恢复状态发送到 {state} : {error}",
|
||||
"dc_power_control_voltage_unit": "V",
|
||||
"dc_power_control_voltage": "电压",
|
||||
"default": "默认",
|
||||
"delete": "删除",
|
||||
"deregister_button": "从云端注销",
|
||||
"deregister_cloud_devices": "云设备",
|
||||
"deregister_description": "这将从您的云帐户中移除该设备,并撤销其远程访问权限。请注意,您仍然可以进行本地访问",
|
||||
"deregister_error": "注销您的设备时出现错误{status} 。请重试。",
|
||||
"deregister_from_cloud": "从云端取消注册",
|
||||
"deregister_headline": "从您的云帐户中取消注册{device}",
|
||||
"detach": "分离",
|
||||
"dhcp_lease_boot_file": "引导文件",
|
||||
|
|
@ -330,7 +327,6 @@
|
|||
"invalid_password": "密码无效",
|
||||
"ip_address": "IP 地址",
|
||||
"ipv6_address_label": "地址",
|
||||
"ipv6_addresses": "IPv6 地址",
|
||||
"ipv6_information": "IPv6 信息",
|
||||
"ipv6_link_local": "本地链路",
|
||||
"ipv6_preferred_lifetime": "首选寿命",
|
||||
|
|
@ -339,7 +335,6 @@
|
|||
"jetkvm_device": "JetKVM 设备",
|
||||
"jetkvm_logo": "JetKVM 徽标",
|
||||
"jetkvm_setup": "设置您的 JetKVM",
|
||||
"jetkvm": "JetKVM",
|
||||
"jiggler_cron_schedule_description": "用于调度的 Cron 表达式",
|
||||
"jiggler_cron_schedule_label": "Cron 计划",
|
||||
"jiggler_example_business_hours_early": "营业时间 8-17",
|
||||
|
|
@ -370,7 +365,6 @@
|
|||
"local_auth_change_local_device_password_description": "输入您当前的密码和新密码以更新您的本地设备保护。",
|
||||
"local_auth_change_local_device_password_title": "更改本地设备密码",
|
||||
"local_auth_confirm_new_password_label": "确认新密码",
|
||||
"local_auth_create_confirm_password_label": "确认新密码",
|
||||
"local_auth_create_confirm_password_placeholder": "重新输入您的密码",
|
||||
"local_auth_create_description": "创建密码以保护您的设备免遭未经授权的本地访问。",
|
||||
"local_auth_create_new_password_label": "新密码",
|
||||
|
|
@ -400,12 +394,7 @@
|
|||
"local_auth_success_password_set_title": "密码设置成功",
|
||||
"local_auth_success_password_updated_description": "您已成功更改本地设备保护密码。请务必记住新密码,以便日后访问。",
|
||||
"local_auth_success_password_updated_title": "密码更新成功",
|
||||
"local_auth_update_confirm_password_label": "确认新密码",
|
||||
"local_auth_update_current_password_label": "当前密码",
|
||||
"local_auth_update_description": "输入您当前的密码和新密码以更新您的本地设备保护。",
|
||||
"local_auth_update_new_password_label": "新密码",
|
||||
"local_auth_update_password_button": "更新密码",
|
||||
"local_auth_update_title": "更改本地设备密码",
|
||||
"log_in": "登录",
|
||||
"log_out": "登出",
|
||||
"logged_in_as": "登录身份",
|
||||
|
|
@ -452,19 +441,16 @@
|
|||
"macros_confirm_deleting": "正在删除…",
|
||||
"macros_create_first_description": "将按键组合成一个动作",
|
||||
"macros_create_first_headline": "创建您的第一个宏",
|
||||
"macros_create_first": "创建您的第一个宏以开始使用",
|
||||
"macros_created_success": "宏“ {name} ”已成功创建",
|
||||
"macros_delay_only": "仅延迟",
|
||||
"macros_delete_confirm": "您确定要删除此宏吗?此操作无法撤消。",
|
||||
"macros_delete_macro": "删除宏",
|
||||
"macros_deleted_success": "宏“ {name} ”已成功删除",
|
||||
"macros_deleting": "删除",
|
||||
"macros_duplicate": "复制",
|
||||
"macros_duplicated_success": "宏“ {name} ”复制成功",
|
||||
"macros_edit_button": "编辑",
|
||||
"macros_edit_description": "修改键盘宏",
|
||||
"macros_edit_title": "编辑宏",
|
||||
"macros_edit": "编辑",
|
||||
"macros_failed_create_error": "无法创建宏: {error}",
|
||||
"macros_failed_create": "无法创建宏",
|
||||
"macros_failed_delete_error": "无法删除宏: {error}",
|
||||
|
|
@ -479,10 +465,7 @@
|
|||
"macros_loading": "正在加载宏...",
|
||||
"macros_max_reached": "已达到最大值",
|
||||
"macros_maximum_macros_reached": "您已达到允许的最大{maximum}宏数量。",
|
||||
"macros_move_down": "下移",
|
||||
"macros_move_up": "上移",
|
||||
"macros_no_macros_available": "没有可用的宏",
|
||||
"macros_no_macros_found": "未找到宏",
|
||||
"macros_order_updated": "宏命令更新成功",
|
||||
"macros_title": "键盘宏",
|
||||
"macros_updated_success": "宏“ {name} ”已成功更新",
|
||||
|
|
@ -496,8 +479,6 @@
|
|||
"mount_button_continue_upload": "继续上传",
|
||||
"mount_button_mount_file": "挂载文件",
|
||||
"mount_button_mount_url": "安装 URL",
|
||||
"mount_button_next": "下一个",
|
||||
"mount_button_previous": "以前的",
|
||||
"mount_button_select": "选择",
|
||||
"mount_button_showing_results": "显示{from}至{to}共{total}个结果",
|
||||
"mount_button_upload_new_image": "上传新图片",
|
||||
|
|
@ -508,7 +489,6 @@
|
|||
"mount_click_to_select_incomplete": "点击选择“ {name} ”",
|
||||
"mount_confirm_delete": "您确定要删除{name} ?",
|
||||
"mount_continue_uploading_with_name": "继续上传“ {name} ”",
|
||||
"mount_description_mode": "选择如何安装虚拟媒体",
|
||||
"mount_error_delete_file": "删除文件时出错: {error}",
|
||||
"mount_error_description": "尝试装载媒体时出错。请重试。",
|
||||
"mount_error_get_storage_space": "获取存储空间时出错: {error}",
|
||||
|
|
@ -517,9 +497,6 @@
|
|||
"mount_get_state_error": "无法获取虚拟媒体状态: {error}",
|
||||
"mount_jetkvm_storage_description": "从 JetKVM 存储挂载之前上传的文件",
|
||||
"mount_jetkvm_storage": "JetKVM 存储支架",
|
||||
"mount_label_mount_as": "挂载为",
|
||||
"mount_label_url_description": "从任何公共网址挂载文件",
|
||||
"mount_label_url": "URL 挂载",
|
||||
"mount_mode_cdrom": "CD/DVD",
|
||||
"mount_mode_disk": "磁盘",
|
||||
"mount_mounted_as": "安装为",
|
||||
|
|
@ -528,13 +505,10 @@
|
|||
"mount_no_images_title": "没有可用的图像",
|
||||
"mount_no_mounted_media": "没有安装媒体",
|
||||
"mount_percentage_used": "{percentageUsed}使用百分比",
|
||||
"mount_please_select_file_to_upload": "请选择要上传的文件。",
|
||||
"mount_please_select_file": "请选择文件“ {name} ”继续上传。",
|
||||
"mount_popular_images": "热门图片",
|
||||
"mount_streaming_from_url": "从 URL 流式传输",
|
||||
"mount_supported_formats": "支持的格式:ISO、IMG",
|
||||
"mount_tag_experimental": "实验",
|
||||
"mount_title_mode": "虚拟媒体源",
|
||||
"mount_unmount_error": "无法卸载映像: {error}",
|
||||
"mount_unmount": "卸载",
|
||||
"mount_upload_description": "选择要上传到 JetKVM 存储的图像文件",
|
||||
|
|
@ -567,7 +541,6 @@
|
|||
"mouse_jiggler_description": "模拟计算机鼠标的移动",
|
||||
"mouse_jiggler_disabled": "已禁用",
|
||||
"mouse_jiggler_error_config": "设置抖动器配置时出错",
|
||||
"mouse_jiggler_failed_config": "无法设置 jiggler 配置: {error}",
|
||||
"mouse_jiggler_failed_state": "无法设置抖动器状态: {error}",
|
||||
"mouse_jiggler_frequent": "频繁 - 30 秒",
|
||||
"mouse_jiggler_invalid_cron": "cron 表达式无效。请检查您的计划格式(例如,每分钟为“0 * * * * *”)。",
|
||||
|
|
@ -591,10 +564,7 @@
|
|||
"network_custom_domain": "自定义域",
|
||||
"network_description": "配置您的网络设置",
|
||||
"network_dhcp_information": "DHCP 信息",
|
||||
"network_dhcp_lease_information": "DHCP 租约信息",
|
||||
"network_dhcp_lease_lifetime_not_applicable": "不适用",
|
||||
"network_dhcp_lease_renew_confirm_description": "这将从您的 DHCP 服务器请求新的 IP 地址。在此过程中,您的设备可能会暂时失去网络连接。",
|
||||
"network_dhcp_lease_renew_confirm_title": "续订 DHCP 租约",
|
||||
"network_dhcp_lease_renew_confirm": "续租",
|
||||
"network_dhcp_lease_renew_failed": "无法续订租约: {error}",
|
||||
"network_dhcp_lease_renew_success": "DHCP 租约已续订",
|
||||
|
|
@ -611,7 +581,6 @@
|
|||
"network_ipv4_mode_description": "配置 IPv4 模式",
|
||||
"network_ipv4_mode_dhcp": "DHCP",
|
||||
"network_ipv4_mode_title": "IPv4 模式",
|
||||
"network_ipv6_addresses": "IPv6 地址",
|
||||
"network_ipv6_information": "IPv6 信息",
|
||||
"network_ipv6_mode_description": "配置 IPv6 模式",
|
||||
"network_ipv6_mode_disabled": "已禁用",
|
||||
|
|
@ -644,6 +613,7 @@
|
|||
"never_seen_online": "网上没见过",
|
||||
"next": "下一个",
|
||||
"no_results_found": "未找到结果",
|
||||
"not_applicable": "不适用",
|
||||
"not_available": "不适用",
|
||||
"not_found": "未找到",
|
||||
"ntp_servers": "NTP 服务器",
|
||||
|
|
@ -684,7 +654,6 @@
|
|||
"rename_device_new_name_label": "新设备名称",
|
||||
"rename_device_new_name_placeholder": "Plex媒体服务器",
|
||||
"rename_device_no_name": "请指定名称",
|
||||
"rename": "重命名",
|
||||
"retry": "重试",
|
||||
"saving": "保存…",
|
||||
"search_placeholder": "搜索…",
|
||||
|
|
@ -719,6 +688,13 @@
|
|||
"something_went_wrong": "出了点问题。请稍后重试或联系客服",
|
||||
"step_counter_step": "步骤{step}",
|
||||
"subnet_mask": "子网掩码",
|
||||
"time_division_days": "天",
|
||||
"time_division_hours": "小时",
|
||||
"time_division_minutes": "分钟",
|
||||
"time_division_months": "个月",
|
||||
"time_division_seconds": "秒",
|
||||
"time_division_weeks": "周",
|
||||
"time_division_years": "年",
|
||||
"troubleshoot_connection": "连接故障排除",
|
||||
"unknown_error": "未知错误",
|
||||
"update_in_progress": "正在更新",
|
||||
|
|
@ -835,9 +811,7 @@
|
|||
"video_stream_quality_title": "流质量",
|
||||
"video_title": "视频",
|
||||
"view_details": "查看详情",
|
||||
"virtual_keyboard_description": "使用虚拟键盘向远程计算机发送特殊键或组合键。",
|
||||
"virtual_keyboard_header": "虚拟键盘",
|
||||
"wake_on_lan_add_device_back": "后退",
|
||||
"wake_on_lan_add_device_device_name": "设备名称",
|
||||
"wake_on_lan_add_device_example_device_name": "Plex媒体服务器",
|
||||
"wake_on_lan_add_device_mac_address": "MAC 地址",
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "kvm-ui",
|
||||
"version": "2025.10.13.2055",
|
||||
"version": "2025.10.14.2130",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "kvm-ui",
|
||||
"version": "2025.10.13.2055",
|
||||
"version": "2025.10.14.2130",
|
||||
"dependencies": {
|
||||
"@headlessui/react": "^2.2.9",
|
||||
"@headlessui/tailwindcss": "^0.2.2",
|
||||
|
|
@ -62,6 +62,7 @@
|
|||
"@vitejs/plugin-react-swc": "^4.1.0",
|
||||
"autoprefixer": "^10.4.21",
|
||||
"eslint": "^9.37.0",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-import": "^2.32.0",
|
||||
"eslint-plugin-prettier": "^5.5.4",
|
||||
"eslint-plugin-react": "^7.37.5",
|
||||
|
|
@ -70,10 +71,10 @@
|
|||
"globals": "^16.4.0",
|
||||
"postcss": "^8.5.6",
|
||||
"prettier": "^3.6.2",
|
||||
"prettier-plugin-tailwindcss": "^0.6.14",
|
||||
"prettier-plugin-tailwindcss": "^0.7.0",
|
||||
"tailwindcss": "^4.1.14",
|
||||
"typescript": "^5.9.3",
|
||||
"vite": "^7.1.9",
|
||||
"vite": "^7.1.10",
|
||||
"vite-tsconfig-paths": "^5.1.4"
|
||||
},
|
||||
"engines": {
|
||||
|
|
@ -3078,9 +3079,9 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/baseline-browser-mapping": {
|
||||
"version": "2.8.14",
|
||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.14.tgz",
|
||||
"integrity": "sha512-GM9c0cWWR8Ga7//Ves/9KRgTS8nLausCkP3CGiFLrnwA2CDUluXgaQqvrULoR2Ujrd/mz/lkX87F5BHFsNr5sQ==",
|
||||
"version": "2.8.16",
|
||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.16.tgz",
|
||||
"integrity": "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
|
|
@ -3201,9 +3202,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001749",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001749.tgz",
|
||||
"integrity": "sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==",
|
||||
"version": "1.0.30001750",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz",
|
||||
"integrity": "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -3684,9 +3685,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.5.233",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.233.tgz",
|
||||
"integrity": "sha512-iUdTQSf7EFXsDdQsp8MwJz5SVk4APEFqXU/S47OtQ0YLqacSwPXdZ5vRlMX3neb07Cy2vgioNuRnWUXFwuslkg==",
|
||||
"version": "1.5.235",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.235.tgz",
|
||||
"integrity": "sha512-i/7ntLFwOdoHY7sgjlTIDo4Sl8EdoTjWIaKinYOVfC6bOp71bmwenyZthWHcasxgHDNWbWxvG9M3Ia116zIaYQ==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
|
|
@ -4026,8 +4027,6 @@
|
|||
"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"eslint-config-prettier": "bin/cli.js"
|
||||
},
|
||||
|
|
@ -6316,13 +6315,13 @@
|
|||
}
|
||||
},
|
||||
"node_modules/prettier-plugin-tailwindcss": {
|
||||
"version": "0.6.14",
|
||||
"resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.14.tgz",
|
||||
"integrity": "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==",
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.7.0.tgz",
|
||||
"integrity": "sha512-zpRZhkfwq1cNmbKhmKzXKuKFdkgXZXlf6p+KttD75v6pGz1FxmcKMc4RKdw97GYBKBbout4113HSLaBJAomFDw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14.21.3"
|
||||
"node": ">=20.19"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@ianvs/prettier-plugin-sort-imports": "*",
|
||||
|
|
@ -6335,14 +6334,12 @@
|
|||
"prettier": "^3.0",
|
||||
"prettier-plugin-astro": "*",
|
||||
"prettier-plugin-css-order": "*",
|
||||
"prettier-plugin-import-sort": "*",
|
||||
"prettier-plugin-jsdoc": "*",
|
||||
"prettier-plugin-marko": "*",
|
||||
"prettier-plugin-multiline-arrays": "*",
|
||||
"prettier-plugin-organize-attributes": "*",
|
||||
"prettier-plugin-organize-imports": "*",
|
||||
"prettier-plugin-sort-imports": "*",
|
||||
"prettier-plugin-style-order": "*",
|
||||
"prettier-plugin-svelte": "*"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
|
|
@ -6373,9 +6370,6 @@
|
|||
"prettier-plugin-css-order": {
|
||||
"optional": true
|
||||
},
|
||||
"prettier-plugin-import-sort": {
|
||||
"optional": true
|
||||
},
|
||||
"prettier-plugin-jsdoc": {
|
||||
"optional": true
|
||||
},
|
||||
|
|
@ -6394,9 +6388,6 @@
|
|||
"prettier-plugin-sort-imports": {
|
||||
"optional": true
|
||||
},
|
||||
"prettier-plugin-style-order": {
|
||||
"optional": true
|
||||
},
|
||||
"prettier-plugin-svelte": {
|
||||
"optional": true
|
||||
}
|
||||
|
|
@ -7651,9 +7642,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "7.1.9",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-7.1.9.tgz",
|
||||
"integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==",
|
||||
"version": "7.1.10",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-7.1.10.tgz",
|
||||
"integrity": "sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"esbuild": "^0.25.0",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "kvm-ui",
|
||||
"private": true,
|
||||
"version": "2025.10.13.2055",
|
||||
"version": "2025.10.14.2130",
|
||||
"type": "module",
|
||||
"engines": {
|
||||
"node": "^22.15.0"
|
||||
|
|
@ -75,18 +75,19 @@
|
|||
"@vitejs/plugin-react-swc": "^4.1.0",
|
||||
"autoprefixer": "^10.4.21",
|
||||
"eslint": "^9.37.0",
|
||||
"eslint-plugin-prettier": "^5.5.4",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-import": "^2.32.0",
|
||||
"eslint-plugin-prettier": "^5.5.4",
|
||||
"eslint-plugin-react": "^7.37.5",
|
||||
"eslint-plugin-react-hooks": "^7.0.0",
|
||||
"eslint-plugin-react-refresh": "^0.4.23",
|
||||
"globals": "^16.4.0",
|
||||
"postcss": "^8.5.6",
|
||||
"prettier": "^3.6.2",
|
||||
"prettier-plugin-tailwindcss": "^0.6.14",
|
||||
"prettier-plugin-tailwindcss": "^0.7.0",
|
||||
"tailwindcss": "^4.1.14",
|
||||
"typescript": "^5.9.3",
|
||||
"vite": "^7.1.9",
|
||||
"vite": "^7.1.10",
|
||||
"vite-tsconfig-paths": "^5.1.4"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -263,8 +263,8 @@ export default function Actionbar({
|
|||
text={m.action_bar_settings()}
|
||||
LeadingIcon={LuSettings}
|
||||
onClick={() => {
|
||||
setDisableVideoFocusTrap(true);
|
||||
navigateTo("/settings")
|
||||
setDisableVideoFocusTrap(true);
|
||||
navigateTo("/settings")
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ export function Combobox({
|
|||
|
||||
// Disabled
|
||||
disabled &&
|
||||
"pointer-events-none select-none bg-slate-50 text-slate-500/80 disabled:hover:bg-white dark:bg-slate-800 dark:text-slate-400/80 dark:disabled:hover:bg-slate-800",
|
||||
"pointer-events-none select-none bg-slate-50 text-slate-500/80 disabled:hover:bg-white dark:bg-slate-800 dark:text-slate-400/80 dark:disabled:hover:bg-slate-800",
|
||||
)}
|
||||
placeholder={disabled ? disabledMessage : placeholder}
|
||||
displayValue={displayValue}
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ export function FeatureFlag({
|
|||
if (!appVersion) return;
|
||||
console.log(
|
||||
`Feature '${name}' ${isEnabled ? "ENABLED" : "DISABLED"}: ` +
|
||||
`Current version: ${appVersion}, ` +
|
||||
`Required min version: ${minAppVersion || "N/A"}`,
|
||||
`Current version: ${appVersion}, ` +
|
||||
`Required min version: ${minAppVersion || "N/A"}`,
|
||||
);
|
||||
}, [isEnabled, name, minAppVersion, appVersion]);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
import type { Ref } from "react";
|
||||
import React, { forwardRef, JSX } from "react";
|
||||
import React, { forwardRef, JSX, type Ref } from "react";
|
||||
import clsx from "clsx";
|
||||
|
||||
import FieldLabel from "@/components/FieldLabel";
|
||||
import Card from "@/components/Card";
|
||||
import FieldLabel from "@components/FieldLabel";
|
||||
import Card from "@components/Card";
|
||||
import { cva } from "@/cva.config";
|
||||
|
||||
const sizes = {
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ export function JigglerSetting({
|
|||
return (
|
||||
<div className="space-y-4">
|
||||
<div className="space-y-2">
|
||||
<h4 className="text-sm font-semibold text-gray-900 dark:text-gray-100">{m.jiggler_examples_label()}</h4>
|
||||
<h4 className="text-sm font-semibold text-gray-900 dark:text-gray-100">{m.jiggler_examples_label()}</h4>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{exampleConfigs.map((example, index) => (
|
||||
<Button
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ export function MacroForm({
|
|||
? newSteps[stepIndex].keys
|
||||
: [];
|
||||
if (keysArray.length >= MAX_KEYS_PER_STEP) {
|
||||
showTemporaryError(m.macro_max_steps_error({max: MAX_KEYS_PER_STEP}));
|
||||
showTemporaryError(m.macro_max_steps_error({ max: MAX_KEYS_PER_STEP }));
|
||||
return;
|
||||
}
|
||||
newSteps[stepIndex].keys = [...keysArray, option.value];
|
||||
|
|
@ -201,7 +201,7 @@ export function MacroForm({
|
|||
/>
|
||||
</div>
|
||||
<span className="text-slate-500 dark:text-slate-400">
|
||||
{m.macro_step_count({steps: macro.steps?.length || 0, max: MAX_STEPS_PER_MACRO})}
|
||||
{m.macro_step_count({ steps: macro.steps?.length || 0, max: MAX_STEPS_PER_MACRO })}
|
||||
</span>
|
||||
</div>
|
||||
{errors.steps && errors.steps[0]?.keys && (
|
||||
|
|
@ -247,10 +247,10 @@ export function MacroForm({
|
|||
theme="light"
|
||||
fullWidth
|
||||
LeadingIcon={LuPlus}
|
||||
text={m.macro_add_step({ maxed_out: isMaxStepsReached ? m.macro_max_steps_reached({ max: MAX_STEPS_PER_MACRO} ) : ""})}
|
||||
text={m.macro_add_step({ maxed_out: isMaxStepsReached ? m.macro_max_steps_reached({ max: MAX_STEPS_PER_MACRO }) : "" })}
|
||||
onClick={() => {
|
||||
if (isMaxStepsReached) {
|
||||
showTemporaryError(m.macro_max_steps_error({max: MAX_STEPS_PER_MACRO}));
|
||||
showTemporaryError(m.macro_max_steps_error({ max: MAX_STEPS_PER_MACRO }));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ export function MacroStepCard({
|
|||
LeadingIcon={LuArrowDown}
|
||||
/>
|
||||
</div>
|
||||
{onDelete && (
|
||||
{onDelete && (
|
||||
<Button
|
||||
size="XS"
|
||||
theme="light"
|
||||
|
|
@ -149,7 +149,7 @@ export function MacroStepCard({
|
|||
|
||||
<div className="space-y-4 mt-2">
|
||||
<div className="w-full flex flex-col gap-2">
|
||||
<FieldLabel label={m.macro_step_modifiers_label()} description={m.macro_step_modifiers_description()}/>
|
||||
<FieldLabel label={m.macro_step_modifiers_label()} description={m.macro_step_modifiers_description()} />
|
||||
<div className="inline-flex flex-wrap gap-3">
|
||||
{Object.entries(groupedModifiers).map(([group, mods]) => (
|
||||
<div key={group} className="relative min-w-[120px] rounded-md border border-slate-200 dark:border-slate-700 p-2">
|
||||
|
|
@ -181,7 +181,7 @@ export function MacroStepCard({
|
|||
|
||||
<div className="w-full flex flex-col gap-1">
|
||||
<div className="flex items-center gap-1">
|
||||
<FieldLabel label={m.macro_step_keys_label()} description={m.macro_step_keys_description({max: MAX_KEYS_PER_STEP})} />
|
||||
<FieldLabel label={m.macro_step_keys_label()} description={m.macro_step_keys_description({ max: MAX_KEYS_PER_STEP })} />
|
||||
</div>
|
||||
{ensureArray(step.keys) && step.keys.length > 0 && (
|
||||
<div className="flex flex-wrap gap-1 pb-2">
|
||||
|
|
@ -216,7 +216,7 @@ export function MacroStepCard({
|
|||
displayValue={() => keyQuery}
|
||||
onInputChange={onKeyQueryChange}
|
||||
options={() => filteredKeys}
|
||||
disabledMessage={m.macro_step_max_keys_reached({max: MAX_KEYS_PER_STEP})}
|
||||
disabledMessage={m.macro_step_max_keys_reached({ max: MAX_KEYS_PER_STEP })}
|
||||
size="SM"
|
||||
immediate
|
||||
disabled={ensureArray(step.keys).length >= MAX_KEYS_PER_STEP}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import {
|
|||
YAxis,
|
||||
} from "recharts";
|
||||
|
||||
import { getLocale } from '@localizations/runtime.js';
|
||||
import CustomTooltip, { CustomTooltipProps } from "@components/CustomTooltip";
|
||||
|
||||
export default function MetricsChart({
|
||||
|
|
@ -51,8 +52,7 @@ export default function MetricsChart({
|
|||
axisLine={{ stroke: "rgba(30, 41, 59, 0.3)" }}
|
||||
tickLine={{ stroke: "rgba(30, 41, 59, 0.3)" }}
|
||||
tickFormatter={date => {
|
||||
// TODO use locale from user settings for date formatting
|
||||
return new Date(date * 1000).toLocaleString("en-US", {
|
||||
return new Date(date * 1000).toLocaleString(getLocale() || "en-US", {
|
||||
hourCycle: "h23",
|
||||
hour: "numeric",
|
||||
minute: "2-digit",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { useMemo , useCallback , useEffect, useState } from "react";
|
||||
import { useMemo, useCallback, useEffect, useState } from "react";
|
||||
|
||||
import { UsbConfigState } from "@hooks/stores";
|
||||
import { JsonRpcResponse, useJsonRpc } from "@hooks/useJsonRpc";
|
||||
|
|
@ -94,7 +94,7 @@ export function UsbInfoSetting() {
|
|||
|
||||
const syncUsbConfigProduct = useCallback(() => {
|
||||
send("getUsbConfig", {}, (resp: JsonRpcResponse) => {
|
||||
if ("error" in resp) {
|
||||
if ("error" in resp) {
|
||||
console.error("Failed to load USB Config:", resp.error);
|
||||
notifications.error(
|
||||
m.usb_config_failed_load({ error: String(resp.error.data || "Unknown error") }),
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ const MountPopopover = forwardRef<HTMLDivElement, object>((_props, ref) => {
|
|||
description={m.mount_virtual_media_description()}
|
||||
/>
|
||||
|
||||
<div
|
||||
<div
|
||||
className="animate-fadeIn opacity-0 space-y-2"
|
||||
style={{
|
||||
animationDuration: "0.7s",
|
||||
|
|
@ -157,7 +157,7 @@ const MountPopopover = forwardRef<HTMLDivElement, object>((_props, ref) => {
|
|||
</div>
|
||||
{remoteVirtualMediaState ? (
|
||||
<div className="flex select-none items-center justify-between text-xs">
|
||||
<div className="select-none text-white dark:text-slate-300">
|
||||
<div className="select-none text-white dark:text-slate-300">
|
||||
<span>{m.mount_mounted_as()}</span>{" "}
|
||||
<span className="font-semibold">
|
||||
{remoteVirtualMediaState.mode === "Disk" ? m.mount_mode_disk() : m.mount_mode_cdrom()}
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ export default function AddDeviceForm({
|
|||
<Button
|
||||
size="SM"
|
||||
theme="light"
|
||||
text={m.wake_on_lan_add_device_back()}
|
||||
text={m.back()}
|
||||
LeadingIcon={LuArrowLeft}
|
||||
onClick={() => setShowAddForm(false)}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -19,9 +19,8 @@ const ToastContent = ({
|
|||
t: Toast;
|
||||
}) => (
|
||||
<Card
|
||||
className={`${
|
||||
t.visible ? "animate-enter" : "animate-leave"
|
||||
} pointer-events-auto z-30 w-full max-w-sm shadow-xl!`}
|
||||
className={`${t.visible ? "animate-enter" : "animate-leave"
|
||||
} pointer-events-auto z-30 w-full max-w-sm shadow-xl!`}
|
||||
>
|
||||
<div className="flex items-center gap-x-2 p-2.5 px-2">
|
||||
{icon}
|
||||
|
|
|
|||
|
|
@ -1159,7 +1159,7 @@ function UploadFileView({
|
|||
></div>
|
||||
</div>
|
||||
<div className="flex justify-between text-xs text-slate-600 dark:text-slate-400">
|
||||
<span>{m.mount_uploading()}</span>
|
||||
<span>{m.mount_uploading()}</span>{" "}
|
||||
<span>
|
||||
{uploadSpeed !== null
|
||||
? `${formatters.bytes(uploadSpeed)}/s`
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ export default function OtherSessionRoute() {
|
|||
{m.other_session_detected()}
|
||||
</p>
|
||||
<p className="mb-4 text-sm text-slate-600 dark:text-slate-400">
|
||||
{m.other_session_take_over()}
|
||||
{m.other_session_take_over()}
|
||||
</p>
|
||||
<div className="flex items-center justify-start space-x-4">
|
||||
<Button size="SM" theme="primary" text={m.other_session_use_here_button()} onClick={handleClose} />
|
||||
|
|
|
|||
|
|
@ -66,8 +66,8 @@ export default function SettingsAdvancedRoute() {
|
|||
if ("error" in resp) {
|
||||
notifications.error(
|
||||
enabled
|
||||
? m.advanced_error_usb_emulation_enable({error: resp.error.data || m.unknown_error()})
|
||||
: m.advanced_error_usb_emulation_disable({error: resp.error.data || m.unknown_error()})
|
||||
? m.advanced_error_usb_emulation_enable({ error: resp.error.data || m.unknown_error() })
|
||||
: m.advanced_error_usb_emulation_disable({ error: resp.error.data || m.unknown_error() })
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
|
@ -82,7 +82,7 @@ export default function SettingsAdvancedRoute() {
|
|||
send("resetConfig", {}, (resp: JsonRpcResponse) => {
|
||||
if ("error" in resp) {
|
||||
notifications.error(
|
||||
m.advanced_error_reset_config({error: resp.error.data || m.unknown_error()})
|
||||
m.advanced_error_reset_config({ error: resp.error.data || m.unknown_error() })
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
|
@ -94,7 +94,7 @@ export default function SettingsAdvancedRoute() {
|
|||
send("setSSHKeyState", { sshKey }, (resp: JsonRpcResponse) => {
|
||||
if ("error" in resp) {
|
||||
notifications.error(
|
||||
m.advanced_error_update_ssh_key({error: resp.error.data || m.unknown_error()})
|
||||
m.advanced_error_update_ssh_key({ error: resp.error.data || m.unknown_error() })
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
|
@ -107,7 +107,7 @@ export default function SettingsAdvancedRoute() {
|
|||
send("setDevModeState", { enabled: developerMode }, (resp: JsonRpcResponse) => {
|
||||
if ("error" in resp) {
|
||||
notifications.error(
|
||||
m.advanced_error_set_dev_mode({error: resp.error.data || m.unknown_error()})
|
||||
m.advanced_error_set_dev_mode({ error: resp.error.data || m.unknown_error() })
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
|
@ -122,7 +122,7 @@ export default function SettingsAdvancedRoute() {
|
|||
send("setDevChannelState", { enabled }, (resp: JsonRpcResponse) => {
|
||||
if ("error" in resp) {
|
||||
notifications.error(
|
||||
m.advanced_error_set_dev_channel({error: resp.error.data || m.unknown_error()})
|
||||
m.advanced_error_set_dev_channel({ error: resp.error.data || m.unknown_error() })
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
|
@ -138,8 +138,8 @@ export default function SettingsAdvancedRoute() {
|
|||
if ("error" in resp) {
|
||||
notifications.error(
|
||||
enabled
|
||||
? m.advanced_error_loopback_enable({error: resp.error.data || m.unknown_error()})
|
||||
: m.advanced_error_loopback_disable({error: resp.error.data || m.unknown_error()})
|
||||
? m.advanced_error_loopback_enable({ error: resp.error.data || m.unknown_error() })
|
||||
: m.advanced_error_loopback_disable({ error: resp.error.data || m.unknown_error() })
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -308,7 +308,7 @@ function UpdatingDeviceState({
|
|||
></div>
|
||||
</div>
|
||||
<div className="flex justify-between text-sm text-slate-600 dark:text-slate-300">
|
||||
<span>{getUpdateStatus("system")}</span>
|
||||
<span>{getUpdateStatus("system")}</span>{" "}
|
||||
{calculateOverallProgress("system") < 100 ? (
|
||||
<span>{formatProgress(calculateOverallProgress("system"))}</span>
|
||||
) : null}
|
||||
|
|
@ -340,7 +340,7 @@ function UpdatingDeviceState({
|
|||
></div>
|
||||
</div>
|
||||
<div className="flex justify-between text-sm text-slate-600 dark:text-slate-300">
|
||||
<span>{getUpdateStatus("app")}</span>
|
||||
<span>{getUpdateStatus("app")}</span>{" "}
|
||||
{calculateOverallProgress("system") < 100 ? (
|
||||
<span>{formatProgress(calculateOverallProgress("app"))}</span>
|
||||
) : null}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ export default function SettingsKeyboardRoute() {
|
|||
send("setKeyboardLayout", { layout: isoCode }, resp => {
|
||||
if ("error" in resp) {
|
||||
notifications.error(
|
||||
m.keyboard_layout_error({ error: resp.error.data || m.unknown_error() }),
|
||||
m.keyboard_layout_error({ error: resp.error.data || m.unknown_error() }),
|
||||
);
|
||||
}
|
||||
notifications.success(m.keyboard_layout_success({ layout: isoCode }));
|
||||
|
|
|
|||
|
|
@ -25,11 +25,11 @@ export default function SettingsMacrosAddRoute() {
|
|||
};
|
||||
|
||||
await saveMacros(normalizeSortOrders([...macros, newMacro]));
|
||||
notifications.success(m.macros_created_success({name: newMacro.name}));
|
||||
notifications.success(m.macros_created_success({ name: newMacro.name }));
|
||||
navigate("../");
|
||||
} catch (error: unknown) {
|
||||
if (error instanceof Error) {
|
||||
notifications.error(m.macros_failed_create_error({error: error.message || m.unknown_error() }));
|
||||
notifications.error(m.macros_failed_create_error({ error: error.message || m.unknown_error() }));
|
||||
} else {
|
||||
notifications.error(m.macros_failed_create());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ export default function SettingsMacrosEditRoute() {
|
|||
navigate("../");
|
||||
} catch (error: unknown) {
|
||||
if (error instanceof Error) {
|
||||
notifications.error(m.macros_failed_update({ error: error.message || m.unknown_error() }));
|
||||
notifications.error(m.macros_failed_update_error({ error: error.message || m.unknown_error() }));
|
||||
} else {
|
||||
notifications.error(m.macros_failed_update());
|
||||
}
|
||||
|
|
@ -96,7 +96,6 @@ export default function SettingsMacrosEditRoute() {
|
|||
<Button
|
||||
size="SM"
|
||||
theme="light"
|
||||
|
||||
className="text-red-500 dark:text-red-400"
|
||||
LeadingIcon={LuTrash2}
|
||||
onClick={() => setShowDeleteConfirm(true)}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ export function LifeTimeLabel({ lifetime }: { lifetime: string }) {
|
|||
}, [updateRemaining]);
|
||||
|
||||
if (lifetime == "") {
|
||||
return <strong>{m.network_dhcp_lease_lifetime_not_applicable()}</strong>;
|
||||
return <strong>{m.not_applicable()}</strong>;
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ const action: ActionFunction = async ({ request }: ActionFunctionArgs) => {
|
|||
if (res.ok) {
|
||||
return redirect(returnTo?.toString() ?? `/devices/${id}`);
|
||||
} else {
|
||||
return { error: m.register_device_error({ error:res.statusText }) };
|
||||
return { error: m.register_device_error({ error: res.statusText }) };
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
|
|
|
|||
|
|
@ -686,7 +686,7 @@ export default function KvmIdRoute() {
|
|||
});
|
||||
}, [rpcDataChannel?.readyState, send, setHdmiState]);
|
||||
|
||||
const [ needLedState, setNeedLedState ] = useState(true);
|
||||
const [needLedState, setNeedLedState] = useState(true);
|
||||
|
||||
// request keyboard led state from the device
|
||||
useEffect(() => {
|
||||
|
|
@ -742,8 +742,8 @@ export default function KvmIdRoute() {
|
|||
}, [navigate, navigateTo, queryParams, setModalView, setQueryParams]);
|
||||
|
||||
// System update
|
||||
const [ kvmTerminal, setKvmTerminal ] = useState<RTCDataChannel | null>(null);
|
||||
const [ serialConsole, setSerialConsole ] = useState<RTCDataChannel | null>(null);
|
||||
const [kvmTerminal, setKvmTerminal] = useState<RTCDataChannel | null>(null);
|
||||
const [serialConsole, setSerialConsole] = useState<RTCDataChannel | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
if (!peerConnection) return;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ const action: ActionFunction = async ({ request }: ActionFunctionArgs) => {
|
|||
}
|
||||
} catch (error) {
|
||||
console.error("Error setting password:", error);
|
||||
return { error: m.auth_mode_local_password_failed_set({ error: String(error) })};
|
||||
return { error: m.auth_mode_local_password_failed_set({ error: String(error) }) };
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
import { KeySequence } from "@hooks/stores";
|
||||
import { getLocale } from '@localizations/runtime.js';
|
||||
|
||||
export const formatters = {
|
||||
date: (date: Date, options?: Intl.DateTimeFormatOptions) =>
|
||||
new Intl.DateTimeFormat("en-US", {
|
||||
new Intl.DateTimeFormat(getLocale() || "en-US", {
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
|
|
@ -34,11 +35,12 @@ export const formatters = {
|
|||
},
|
||||
|
||||
timeAgo: (date: Date, options?: Intl.RelativeTimeFormatOptions) => {
|
||||
const relativeTimeFormat = new Intl.RelativeTimeFormat("en-US", {
|
||||
const relativeTimeFormat = new Intl.RelativeTimeFormat(getLocale() || "en-US", {
|
||||
numeric: "auto",
|
||||
...(options || {}),
|
||||
});
|
||||
|
||||
// Note, do not translate the unit names in DIVISIONS, as they must match Intl.RelativeTimeFormatUnit
|
||||
const DIVISIONS: {
|
||||
amount: number;
|
||||
name: Intl.RelativeTimeFormatUnit;
|
||||
|
|
@ -79,7 +81,7 @@ export const formatters = {
|
|||
opts.minimumFractionDigits = 0;
|
||||
}
|
||||
|
||||
return new Intl.NumberFormat("en-US", opts).format(numericPrice);
|
||||
return new Intl.NumberFormat(getLocale() || "en-US", opts).format(numericPrice);
|
||||
},
|
||||
|
||||
truncateMiddle: (str: string | null | undefined, maxLength: number): string => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue