mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-09-29 10:06:41 +00:00
Merge pull request #396 from Vaso73/i18n/oci-manager-slovak-wording
i18n(oci): refine Slovak manager wording
This commit is contained in:
+5
-5
@@ -1103,7 +1103,7 @@
|
|||||||
"Container:": "Kontajner:",
|
"Container:": "Kontajner:",
|
||||||
"Containers & Docker": "Kontajnery a Docker",
|
"Containers & Docker": "Kontajnery a Docker",
|
||||||
"Containers returned to their previous state": "Kontajnery sa vrátili do predchádzajúceho stavu",
|
"Containers returned to their previous state": "Kontajnery sa vrátili do predchádzajúceho stavu",
|
||||||
"Containers that are removed:": "Nádoby, ktoré sú odstránené:",
|
"Containers that are removed:": "Kontajnery, ktoré sa odstránia:",
|
||||||
"Containers that will be created (one LXC per service, on a private network):": "Kontajnery, ktoré budú vytvorené (jeden LXC na službu, na súkromnej sieti):",
|
"Containers that will be created (one LXC per service, on a private network):": "Kontajnery, ktoré budú vytvorené (jeden LXC na službu, na súkromnej sieti):",
|
||||||
"Containers that will receive this device": "Kontajnery, ktoré dostanú toto zariadenie",
|
"Containers that will receive this device": "Kontajnery, ktoré dostanú toto zariadenie",
|
||||||
"Containers that will receive this path": "Kontajnery, ktoré dostanú túto cestu",
|
"Containers that will receive this path": "Kontajnery, ktoré dostanú túto cestu",
|
||||||
@@ -5552,7 +5552,7 @@
|
|||||||
"Stale VFIO Config Detected": "Zistila sa zastaraná konfigurácia VFIO",
|
"Stale VFIO Config Detected": "Zistila sa zastaraná konfigurácia VFIO",
|
||||||
"Stale VFIO entries removed and initramfs rebuilt.": "Zastarané záznamy VFIO boli odstránené a initramfs prestavané.",
|
"Stale VFIO entries removed and initramfs rebuilt.": "Zastarané záznamy VFIO boli odstránené a initramfs prestavané.",
|
||||||
"Standard NAS (backup, iso, vztmpl)": "Štandardné NAS (backup, iso, vztmpl)",
|
"Standard NAS (backup, iso, vztmpl)": "Štandardné NAS (backup, iso, vztmpl)",
|
||||||
"Start": "Začiatok",
|
"Start": "Spustenie",
|
||||||
"Start VM": "Spustiť VM",
|
"Start VM": "Spustiť VM",
|
||||||
"Start VM after creation": "Spustiť VM po vytvorení",
|
"Start VM after creation": "Spustiť VM po vytvorení",
|
||||||
"Start VM after creation?": "Spustiť VM po vytvorení?",
|
"Start VM after creation?": "Spustiť VM po vytvorení?",
|
||||||
@@ -5578,8 +5578,8 @@
|
|||||||
"Start the stack with Proxmox": "Spustiť zásobník s Proxmox",
|
"Start the stack with Proxmox": "Spustiť zásobník s Proxmox",
|
||||||
"Start uploading to PBS — sets a recovery passphrase": "Spustiť nahrávanie do PBS - nastaví obnovovaciu frázu",
|
"Start uploading to PBS — sets a recovery passphrase": "Spustiť nahrávanie do PBS - nastaví obnovovaciu frázu",
|
||||||
"Start when finished": "Spustiť po dokončení",
|
"Start when finished": "Spustiť po dokončení",
|
||||||
"Start with Proxmox": "Začnite s Proxmox",
|
"Start with Proxmox": "Spúšťať spolu so spustením Proxmoxu",
|
||||||
"Starting": "Začiatok",
|
"Starting": "Spúšťanie",
|
||||||
"Starting Borg backup...": "Spúšťam Borg zálohu...",
|
"Starting Borg backup...": "Spúšťam Borg zálohu...",
|
||||||
"Starting CT": "Spúšťam CT",
|
"Starting CT": "Spúšťam CT",
|
||||||
"Starting LXC Privileged to Unprivileged conversion process...": "Spúšťam prevod LXC z privilegovaného na neprivilegovaný...",
|
"Starting LXC Privileged to Unprivileged conversion process...": "Spúšťam prevod LXC z privilegovaného na neprivilegovaný...",
|
||||||
@@ -5879,7 +5879,7 @@
|
|||||||
"The application did not pass its HTTP check:": "Aplikácia neprešla kontrolou HTTP:",
|
"The application did not pass its HTTP check:": "Aplikácia neprešla kontrolou HTTP:",
|
||||||
"The application did not respond in time:": "Žiadosť neodpovedala včas:",
|
"The application did not respond in time:": "Žiadosť neodpovedala včas:",
|
||||||
"The application stopped during its first start:": "Aplikácia sa zastavila počas prvého začiatku:",
|
"The application stopped during its first start:": "Aplikácia sa zastavila počas prvého začiatku:",
|
||||||
"The application was removed": "Žiadosť bola stiahnutá",
|
"The application was removed": "Aplikácia bola odstránená",
|
||||||
"The archive could not be extracted.": "Archív sa nepodarilo rozbaliť.",
|
"The archive could not be extracted.": "Archív sa nepodarilo rozbaliť.",
|
||||||
"The archive destination directory is INSIDE one of the paths you are about to back up. Writing the archive there would copy the backup into itself — producing a corrupted archive, or growing without limit until the disk fills up.": "Cieľový priečinok archívu je VNÚTRI jednej z ciest, ktoré sa chystáte zálohovať. Zápis archívu na toto miesto by zálohu kopíroval samu do seba - vznikol by poškodený archív alebo by rástol, kým sa disk nezaplní.",
|
"The archive destination directory is INSIDE one of the paths you are about to back up. Writing the archive there would copy the backup into itself — producing a corrupted archive, or growing without limit until the disk fills up.": "Cieľový priečinok archívu je VNÚTRI jednej z ciest, ktoré sa chystáte zálohovať. Zápis archívu na toto miesto by zálohu kopíroval samu do seba - vznikol by poškodený archív alebo by rástol, kým sa disk nezaplní.",
|
||||||
"The backup could not be identified; the image is not replaced": "Zálohovanie nebolo možné identifikovať; obrázok nie je nahradený",
|
"The backup could not be identified; the image is not replaced": "Zálohovanie nebolo možné identifikovať; obrázok nie je nahradený",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import sys
|
|||||||
import textwrap
|
import textwrap
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
from .i18n import BASE_DIR
|
from .i18n import BASE_DIR, translate
|
||||||
|
|
||||||
MG = "\033[1;35m"
|
MG = "\033[1;35m"
|
||||||
GN = "\033[1;92m"
|
GN = "\033[1;92m"
|
||||||
@@ -101,6 +101,7 @@ def ask_yes_no(text: str, default_yes: bool = True) -> bool:
|
|||||||
width = 74
|
width = 74
|
||||||
lines = sum(max(1, len(textwrap.wrap(line, width - 6) or [''])) for line in text.splitlines() or [''])
|
lines = sum(max(1, len(textwrap.wrap(line, width - 6) or [''])) for line in text.splitlines() or [''])
|
||||||
widget = ['whiptail', '--backtitle', 'ProxMenux', '--title', 'ProxMenux',
|
widget = ['whiptail', '--backtitle', 'ProxMenux', '--title', 'ProxMenux',
|
||||||
|
'--yes-button', translate('Yes'), '--no-button', translate('No'),
|
||||||
'--yesno', text, str(min(lines + 8, 20)), str(width)]
|
'--yesno', text, str(min(lines + 8, 20)), str(width)]
|
||||||
if not default_yes:
|
if not default_yes:
|
||||||
widget.insert(1, '--defaultno')
|
widget.insert(1, '--defaultno')
|
||||||
|
|||||||
@@ -192,9 +192,10 @@ class DialogUI:
|
|||||||
# dialog draws on the terminal and writes the selection to stderr.
|
# dialog draws on the terminal and writes the selection to stderr.
|
||||||
back_widget = ['--extra-button', '--extra-label', translate('Back')] if self.back_enabled and any(
|
back_widget = ['--extra-button', '--extra-label', translate('Back')] if self.back_enabled and any(
|
||||||
flag in widget for flag in ('--inputbox', '--passwordbox', '--yesno', '--menu', '--checklist')) else []
|
flag in widget for flag in ('--inputbox', '--passwordbox', '--yesno', '--menu', '--checklist')) else []
|
||||||
|
confirmation_labels = ['--yes-label', translate('Yes'), '--no-label', translate('No')] if '--yesno' in widget else []
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
["dialog", "--no-collapse", "--cancel-label", translate('Cancel'), "--backtitle", self.backtitle, "--title", title or self.title,
|
["dialog", "--no-collapse", "--cancel-label", translate('Cancel'), "--backtitle", self.backtitle, "--title", title or self.title,
|
||||||
*back_widget, *widget],
|
*confirmation_labels, *back_widget, *widget],
|
||||||
stdout=None, stderr=subprocess.PIPE, text=True, check=False, env=environment,
|
stdout=None, stderr=subprocess.PIPE, text=True, check=False, env=environment,
|
||||||
)
|
)
|
||||||
if result.returncode == 3 and back_widget:
|
if result.returncode == 3 and back_widget:
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
"""OCI confirmation buttons use the active language catalog."""
|
||||||
|
from pathlib import Path
|
||||||
|
import sys
|
||||||
|
import unittest
|
||||||
|
from subprocess import CompletedProcess
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[1]
|
||||||
|
sys.path.insert(0, str(ROOT / "src"))
|
||||||
|
|
||||||
|
from proxmenux_oci import console
|
||||||
|
from proxmenux_oci.ui import DialogUI
|
||||||
|
|
||||||
|
|
||||||
|
def slovak(text: str) -> str:
|
||||||
|
return {"Yes": "Áno", "No": "Nie", "Cancel": "Zrušiť"}.get(text, text)
|
||||||
|
|
||||||
|
|
||||||
|
class ConfirmationLabelTests(unittest.TestCase):
|
||||||
|
def test_dialog_confirmation_uses_translated_yes_and_no_labels(self):
|
||||||
|
with patch("proxmenux_oci.ui.translate", side_effect=slovak):
|
||||||
|
with patch("proxmenux_oci.ui.subprocess.run", return_value=CompletedProcess([], 0, "", "")) as run:
|
||||||
|
DialogUI().confirm("Continue?")
|
||||||
|
command = run.call_args.args[0]
|
||||||
|
self.assertEqual(command[command.index("--yes-label") + 1], "Áno")
|
||||||
|
self.assertEqual(command[command.index("--no-label") + 1], "Nie")
|
||||||
|
|
||||||
|
def test_console_confirmation_uses_translated_yes_and_no_labels(self):
|
||||||
|
with patch("proxmenux_oci.console.translate", side_effect=slovak):
|
||||||
|
with patch("proxmenux_oci.console.shutil.which", return_value="/usr/bin/whiptail"):
|
||||||
|
with patch("proxmenux_oci.console.subprocess.run", return_value=CompletedProcess([], 0)) as run:
|
||||||
|
self.assertTrue(console.ask_yes_no("Continue?"))
|
||||||
|
command = run.call_args.args[0]
|
||||||
|
self.assertEqual(command[command.index("--yes-button") + 1], "Áno")
|
||||||
|
self.assertEqual(command[command.index("--no-button") + 1], "Nie")
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
"""Regression checks for the Slovak wording in the OCI Manager journey."""
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[2]
|
||||||
|
SLOVAK = ROOT / "lang" / "sk.json"
|
||||||
|
|
||||||
|
|
||||||
|
class SlovakOCIWordingTests(unittest.TestCase):
|
||||||
|
def test_wizard_and_removal_copy_is_clear(self):
|
||||||
|
text = json.loads(SLOVAK.read_text(encoding="utf-8"))
|
||||||
|
self.assertEqual(text["Start with Proxmox"], "Spúšťať spolu so spustením Proxmoxu")
|
||||||
|
self.assertEqual(text["Start"], "Spustenie")
|
||||||
|
self.assertEqual(text["Starting"], "Spúšťanie")
|
||||||
|
self.assertEqual(text["Containers that are removed:"], "Kontajnery, ktoré sa odstránia:")
|
||||||
|
self.assertEqual(text["The application was removed"], "Aplikácia bola odstránená")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
||||||
Reference in New Issue
Block a user