From 1d08947300dc84f2bd72c773727d568cbb73c2db Mon Sep 17 00:00:00 2001 From: zenobit Date: Fri, 14 Feb 2025 08:43:47 +0100 Subject: [PATCH] Translation preparation --- locale/LINGUAS | 1 + locale/quickemu.pot | 150 +++++++++++ locale/quickemu_en.po | 214 ++++++++++++++++ locale/quickget.pot | 150 +++++++++++ locale/quickget_en.po | 210 ++++++++++++++++ quickemu | 396 +++++++++++++++-------------- quickemu.pot | 570 ++++++++++++++++++++++++++++++++++++++++++ quickget | 145 ++++++----- quickget.pot | 162 ++++++++++++ 9 files changed, 1740 insertions(+), 258 deletions(-) create mode 100644 locale/LINGUAS create mode 100644 locale/quickemu.pot create mode 100644 locale/quickemu_en.po create mode 100644 locale/quickget.pot create mode 100644 locale/quickget_en.po create mode 100644 quickemu.pot create mode 100644 quickget.pot diff --git a/locale/LINGUAS b/locale/LINGUAS new file mode 100644 index 0000000..c574d07 --- /dev/null +++ b/locale/LINGUAS @@ -0,0 +1 @@ +en diff --git a/locale/quickemu.pot b/locale/quickemu.pot new file mode 100644 index 0000000..7efcc2b --- /dev/null +++ b/locale/quickemu.pot @@ -0,0 +1,150 @@ +#: quickget:27 +msgid " Website: ${HOMEPAGE}" +msgstr "" +#: quickget:28 +msgid " Based of: ${BASEDOF}" +msgstr "" +#: quickget:29 +msgid "Description: ${DESCRIPTION}" +msgstr "" +#: quickget:30 +msgid "Credentials: ${CREDENTIALS}" +msgstr "" +#: quickget:31 +msgid "Releases: ${RELEASES}" +msgstr "" +#: quickget:33 +msgid "Editions: ${EDITIONS}" +msgstr "" +#: quickget:48 +msgid "ERROR! You must specify an operating system." +msgstr "" +#: quickget:49 +msgid "- Supported Operating Systems:" +msgstr "" +#: quickget:51 +msgid "\\nTo see all possible arguments, use:\\n quickget -h or quickget --help" +msgstr "" +#: quickget:57 +msgid "ERROR! ${OS} is not a supported OS.\\n" +msgstr "" +#: quickget:65 +msgid "\\nERROR! You must specify a release." +msgstr "" +#: quickget:71 +msgid "ERROR! ${DISPLAY_NAME} ${RELEASE} is not a supported release.\\n" +msgstr "" +#: quickget:79 +msgid "ERROR! ${I18N} is not a supported ${PRETTY} language\\n" +msgstr "" +#: quickget:88 +msgid "ERROR! Not supported argument" +msgstr "" +#: quickget:89 +msgid "To see all possible arguments, use:" +msgstr "" +#: quickget:95 +msgid "ERROR! Unable to create directory ${DIR}" +msgstr "" +#: quickget:100 +msgid "ERROR! Only ISO,IMG and QCOW2 file types are supported for --create-config" +msgstr "" +#: quickget:126 +msgid "ERROR! Unsupported combination" +msgstr "" +#: quickget:127 +msgid " Fedora ${RELEASE} ${EDITION} is not available, please choose another Release or Edition" +msgstr "" +#: quickget:407 +msgid "WARNING! Can't guess hash algorithm, not checking ${iso} hash." +msgstr "" +#: quickget:410 +msgid "Checking ${iso} with ${hash_algo}... " +msgstr "" +#: quickget:412 +msgid "ERROR!" +msgstr "" +#: quickget:413 +msgid "${iso} doesn't match ${hash}. Try running 'quickget' again." +msgstr "" +#: quickget:416 +msgid "Good!" +msgstr "" +#: quickget:475 +msgid "Downloading ${PRETTY} ${RELEASE} ${EDITION}" +msgstr "" +#: quickget:476 +msgid "- URL: ${URL}" +msgstr "" +#: quickget:480 +msgid "ERROR! Failed to download ${URL} with curl." +msgstr "" +#: quickget:539 +msgid "Downloading ${PRETTY} ${RELEASE} ${EDITION} from ${URL}" +msgstr "" +#: quickget:542 +msgid "ERROR! Failed to download ${URL/https/http}.zsync" +msgstr "" +#: quickget:550 +msgid "INFO: zsync not found, falling back to curl" +msgstr "" +#: quickget:637 +msgid "Making ${CONF_FILE}" +msgstr "" +#: quickget:644 +msgid " - Setting ${CONF_FILE} executable" +msgstr "" +#: quickget:744 +msgid "Run new ${OS} VM?" +msgstr "" +#: quickget:747 +msgid "\\nTo start your ${PRETTY} virtual machine run:" +msgstr "" +#: quickget:749 +msgid " quickemu --vm ${CONF_FILE}\\nTo start Slint with braille support run:\\n quickemu --vm --braille --display sdl ${CONF_FILE}" +msgstr "" +#: quickget:812 +msgid "ERROR! '7zip' needs installing. Unable to extract file." +msgstr "" +#: quickget:835 +msgid "ERROR! qemu-img not found. Please make sure qemu-img is installed." +msgstr "" +#: quickget:855 +msgid "WARNING! This will overwrite content of directory: ${VM_PATH}" +msgstr "" +#: quickget:867 +msgid "Moving image to VM dir" +msgstr "" +#: quickget:870 +msgid "ERROR! The input must be a valid URL or path to an ISO, IMG, or QCOW2 file." +msgstr "" +#: quickget:886 +msgid "Creating custom VM config for ${INPUT##*/}." +msgstr "" +#: quickget:896 +msgid "Creating unattended Windows installation files. To disable, pass --disable-unattended" +msgstr "" +#: quickget:898 +msgid "Downloading VirtIO drivers..." +msgstr "" +#: quickget:907 +msgid "Selecting OS: ${CUSTOM_OS}. If this is incorrect, please modify the config file to include the correct OS.\\n" +msgstr "" +#: quickget:918 +msgid "quickemu not found" +msgstr "" +#: quickget:944 +msgid "ERROR! ${EDITION} is not a supported ${PRETTY} edition\\n" +msgstr "" +#: quickget:954 +msgid "\\nERROR! You must specify an edition." +msgstr "" +#: quickget:997 +msgid "gum could not be found, please install it first" +msgstr "" +#: quickget:1063 +msgid "Sorry, you need bash 4.0 or newer to run this script." +msgstr "" +#: quickget:1072 +msgid "ERROR! curl not found. Please install curl" +msgstr "" diff --git a/locale/quickemu_en.po b/locale/quickemu_en.po new file mode 100644 index 0000000..3a41836 --- /dev/null +++ b/locale/quickemu_en.po @@ -0,0 +1,214 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: zenobit \n" +"Language-Team: none\n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: quickget:27 +msgid " Website: ${HOMEPAGE}" +msgstr " Website: ${HOMEPAGE}" + +#: quickget:28 +msgid " Based of: ${BASEDOF}" +msgstr " Based of: ${BASEDOF}" + +#: quickget:29 +msgid "Description: ${DESCRIPTION}" +msgstr "Description: ${DESCRIPTION}" + +#: quickget:30 +msgid "Credentials: ${CREDENTIALS}" +msgstr "Credentials: ${CREDENTIALS}" + +#: quickget:31 +msgid "Releases: ${RELEASES}" +msgstr "Releases: ${RELEASES}" + +#: quickget:33 +msgid "Editions: ${EDITIONS}" +msgstr "Editions: ${EDITIONS}" + +#: quickget:48 +msgid "ERROR! You must specify an operating system." +msgstr "ERROR! You must specify an operating system." + +#: quickget:49 +msgid "- Supported Operating Systems:" +msgstr "- Supported Operating Systems:" + +#: quickget:51 +msgid "\\nTo see all possible arguments, use:\\n quickget -h or quickget --help" +msgstr "\\nTo see all possible arguments, use:\\n quickget -h or quickget --help" + +#: quickget:57 +msgid "ERROR! ${OS} is not a supported OS.\\n" +msgstr "ERROR! ${OS} is not a supported OS.\\n" + +#: quickget:65 +msgid "\\nERROR! You must specify a release." +msgstr "\\nERROR! You must specify a release." + +#: quickget:71 +msgid "ERROR! ${DISPLAY_NAME} ${RELEASE} is not a supported release.\\n" +msgstr "ERROR! ${DISPLAY_NAME} ${RELEASE} is not a supported release.\\n" + +#: quickget:79 +msgid "ERROR! ${I18N} is not a supported ${PRETTY} language\\n" +msgstr "ERROR! ${I18N} is not a supported ${PRETTY} language\\n" + +#: quickget:88 +msgid "ERROR! Not supported argument" +msgstr "ERROR! Not supported argument" + +#: quickget:89 +msgid "To see all possible arguments, use:" +msgstr "To see all possible arguments, use:" + +#: quickget:95 +msgid "ERROR! Unable to create directory ${DIR}" +msgstr "ERROR! Unable to create directory ${DIR}" + +#: quickget:100 +msgid "ERROR! Only ISO,IMG and QCOW2 file types are supported for --create-config" +msgstr "ERROR! Only ISO,IMG and QCOW2 file types are supported for --create-config" + +#: quickget:126 +msgid "ERROR! Unsupported combination" +msgstr "ERROR! Unsupported combination" + +#: quickget:127 +msgid " Fedora ${RELEASE} ${EDITION} is not available, please choose another " +"Release or Edition" +msgstr " Fedora ${RELEASE} ${EDITION} is not available, please choose another " +"Release or Edition" + +#: quickget:407 +msgid "WARNING! Can't guess hash algorithm, not checking ${iso} hash." +msgstr "WARNING! Can't guess hash algorithm, not checking ${iso} hash." + +#: quickget:410 +msgid "Checking ${iso} with ${hash_algo}... " +msgstr "Checking ${iso} with ${hash_algo}... " + +#: quickget:412 +msgid "ERROR!" +msgstr "ERROR!" + +#: quickget:413 +msgid "${iso} doesn't match ${hash}. Try running 'quickget' again." +msgstr "${iso} doesn't match ${hash}. Try running 'quickget' again." + +#: quickget:416 +msgid "Good!" +msgstr "Good!" + +#: quickget:475 +msgid "Downloading ${PRETTY} ${RELEASE} ${EDITION}" +msgstr "Downloading ${PRETTY} ${RELEASE} ${EDITION}" + +#: quickget:476 +msgid "- URL: ${URL}" +msgstr "- URL: ${URL}" + +#: quickget:480 +msgid "ERROR! Failed to download ${URL} with curl." +msgstr "ERROR! Failed to download ${URL} with curl." + +#: quickget:539 +msgid "Downloading ${PRETTY} ${RELEASE} ${EDITION} from ${URL}" +msgstr "Downloading ${PRETTY} ${RELEASE} ${EDITION} from ${URL}" + +#: quickget:542 +msgid "ERROR! Failed to download ${URL/https/http}.zsync" +msgstr "ERROR! Failed to download ${URL/https/http}.zsync" + +#: quickget:550 +msgid "INFO: zsync not found, falling back to curl" +msgstr "INFO: zsync not found, falling back to curl" + +#: quickget:637 +msgid "Making ${CONF_FILE}" +msgstr "Making ${CONF_FILE}" + +#: quickget:644 +msgid " - Setting ${CONF_FILE} executable" +msgstr " - Setting ${CONF_FILE} executable" + +#: quickget:744 +msgid "Run new ${OS} VM?" +msgstr "Run new ${OS} VM?" + +#: quickget:747 +msgid "\\nTo start your ${PRETTY} virtual machine run:" +msgstr "\\nTo start your ${PRETTY} virtual machine run:" + +#: quickget:749 +msgid " quickemu --vm ${CONF_FILE}\\nTo start Slint with braille support run:" +"\\n quickemu --vm --braille --display sdl ${CONF_FILE}" +msgstr " quickemu --vm ${CONF_FILE}\\nTo start Slint with braille support run:" +"\\n quickemu --vm --braille --display sdl ${CONF_FILE}" + +#: quickget:812 +msgid "ERROR! '7zip' needs installing. Unable to extract file." +msgstr "ERROR! '7zip' needs installing. Unable to extract file." + +#: quickget:835 +msgid "ERROR! qemu-img not found. Please make sure qemu-img is installed." +msgstr "ERROR! qemu-img not found. Please make sure qemu-img is installed." + +#: quickget:855 +msgid "WARNING! This will overwrite content of directory: ${VM_PATH}" +msgstr "WARNING! This will overwrite content of directory: ${VM_PATH}" + +#: quickget:867 +msgid "Moving image to VM dir" +msgstr "Moving image to VM dir" + +#: quickget:870 +msgid "ERROR! The input must be a valid URL or path to an ISO, IMG, or QCOW2 file." +msgstr "ERROR! The input must be a valid URL or path to an ISO, IMG, or QCOW2 file." + +#: quickget:886 +msgid "Creating custom VM config for ${INPUT##*/}." +msgstr "Creating custom VM config for ${INPUT##*/}." + +#: quickget:896 +msgid "Creating unattended Windows installation files. To disable, pass --disable-unattended" +msgstr "Creating unattended Windows installation files. To disable, pass --disable-unattended" + +#: quickget:898 +msgid "Downloading VirtIO drivers..." +msgstr "Downloading VirtIO drivers..." + +#: quickget:907 +msgid "Selecting OS: ${CUSTOM_OS}. If this is incorrect, please modify the config file to include the correct OS.\\n" +msgstr "Selecting OS: ${CUSTOM_OS}. If this is incorrect, please modify the config file to include the correct OS.\\n" + +#: quickget:918 +msgid "quickemu not found" +msgstr "quickemu not found" + +#: quickget:944 +msgid "ERROR! ${EDITION} is not a supported ${PRETTY} edition\\n" +msgstr "ERROR! ${EDITION} is not a supported ${PRETTY} edition\\n" + +#: quickget:954 +msgid "\\nERROR! You must specify an edition." +msgstr "\\nERROR! You must specify an edition." + +#: quickget:997 +msgid "gum could not be found, please install it first" +msgstr "gum could not be found, please install it first" + +#: quickget:1063 +msgid "Sorry, you need bash 4.0 or newer to run this script." +msgstr "Sorry, you need bash 4.0 or newer to run this script." + +#: quickget:1072 +msgid "ERROR! curl not found. Please install curl" +msgstr "ERROR! curl not found. Please install curl" diff --git a/locale/quickget.pot b/locale/quickget.pot new file mode 100644 index 0000000..7efcc2b --- /dev/null +++ b/locale/quickget.pot @@ -0,0 +1,150 @@ +#: quickget:27 +msgid " Website: ${HOMEPAGE}" +msgstr "" +#: quickget:28 +msgid " Based of: ${BASEDOF}" +msgstr "" +#: quickget:29 +msgid "Description: ${DESCRIPTION}" +msgstr "" +#: quickget:30 +msgid "Credentials: ${CREDENTIALS}" +msgstr "" +#: quickget:31 +msgid "Releases: ${RELEASES}" +msgstr "" +#: quickget:33 +msgid "Editions: ${EDITIONS}" +msgstr "" +#: quickget:48 +msgid "ERROR! You must specify an operating system." +msgstr "" +#: quickget:49 +msgid "- Supported Operating Systems:" +msgstr "" +#: quickget:51 +msgid "\\nTo see all possible arguments, use:\\n quickget -h or quickget --help" +msgstr "" +#: quickget:57 +msgid "ERROR! ${OS} is not a supported OS.\\n" +msgstr "" +#: quickget:65 +msgid "\\nERROR! You must specify a release." +msgstr "" +#: quickget:71 +msgid "ERROR! ${DISPLAY_NAME} ${RELEASE} is not a supported release.\\n" +msgstr "" +#: quickget:79 +msgid "ERROR! ${I18N} is not a supported ${PRETTY} language\\n" +msgstr "" +#: quickget:88 +msgid "ERROR! Not supported argument" +msgstr "" +#: quickget:89 +msgid "To see all possible arguments, use:" +msgstr "" +#: quickget:95 +msgid "ERROR! Unable to create directory ${DIR}" +msgstr "" +#: quickget:100 +msgid "ERROR! Only ISO,IMG and QCOW2 file types are supported for --create-config" +msgstr "" +#: quickget:126 +msgid "ERROR! Unsupported combination" +msgstr "" +#: quickget:127 +msgid " Fedora ${RELEASE} ${EDITION} is not available, please choose another Release or Edition" +msgstr "" +#: quickget:407 +msgid "WARNING! Can't guess hash algorithm, not checking ${iso} hash." +msgstr "" +#: quickget:410 +msgid "Checking ${iso} with ${hash_algo}... " +msgstr "" +#: quickget:412 +msgid "ERROR!" +msgstr "" +#: quickget:413 +msgid "${iso} doesn't match ${hash}. Try running 'quickget' again." +msgstr "" +#: quickget:416 +msgid "Good!" +msgstr "" +#: quickget:475 +msgid "Downloading ${PRETTY} ${RELEASE} ${EDITION}" +msgstr "" +#: quickget:476 +msgid "- URL: ${URL}" +msgstr "" +#: quickget:480 +msgid "ERROR! Failed to download ${URL} with curl." +msgstr "" +#: quickget:539 +msgid "Downloading ${PRETTY} ${RELEASE} ${EDITION} from ${URL}" +msgstr "" +#: quickget:542 +msgid "ERROR! Failed to download ${URL/https/http}.zsync" +msgstr "" +#: quickget:550 +msgid "INFO: zsync not found, falling back to curl" +msgstr "" +#: quickget:637 +msgid "Making ${CONF_FILE}" +msgstr "" +#: quickget:644 +msgid " - Setting ${CONF_FILE} executable" +msgstr "" +#: quickget:744 +msgid "Run new ${OS} VM?" +msgstr "" +#: quickget:747 +msgid "\\nTo start your ${PRETTY} virtual machine run:" +msgstr "" +#: quickget:749 +msgid " quickemu --vm ${CONF_FILE}\\nTo start Slint with braille support run:\\n quickemu --vm --braille --display sdl ${CONF_FILE}" +msgstr "" +#: quickget:812 +msgid "ERROR! '7zip' needs installing. Unable to extract file." +msgstr "" +#: quickget:835 +msgid "ERROR! qemu-img not found. Please make sure qemu-img is installed." +msgstr "" +#: quickget:855 +msgid "WARNING! This will overwrite content of directory: ${VM_PATH}" +msgstr "" +#: quickget:867 +msgid "Moving image to VM dir" +msgstr "" +#: quickget:870 +msgid "ERROR! The input must be a valid URL or path to an ISO, IMG, or QCOW2 file." +msgstr "" +#: quickget:886 +msgid "Creating custom VM config for ${INPUT##*/}." +msgstr "" +#: quickget:896 +msgid "Creating unattended Windows installation files. To disable, pass --disable-unattended" +msgstr "" +#: quickget:898 +msgid "Downloading VirtIO drivers..." +msgstr "" +#: quickget:907 +msgid "Selecting OS: ${CUSTOM_OS}. If this is incorrect, please modify the config file to include the correct OS.\\n" +msgstr "" +#: quickget:918 +msgid "quickemu not found" +msgstr "" +#: quickget:944 +msgid "ERROR! ${EDITION} is not a supported ${PRETTY} edition\\n" +msgstr "" +#: quickget:954 +msgid "\\nERROR! You must specify an edition." +msgstr "" +#: quickget:997 +msgid "gum could not be found, please install it first" +msgstr "" +#: quickget:1063 +msgid "Sorry, you need bash 4.0 or newer to run this script." +msgstr "" +#: quickget:1072 +msgid "ERROR! curl not found. Please install curl" +msgstr "" diff --git a/locale/quickget_en.po b/locale/quickget_en.po new file mode 100644 index 0000000..8fd262f --- /dev/null +++ b/locale/quickget_en.po @@ -0,0 +1,210 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: zenobit \n" +"Language-Team: none\n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: quickget:27 +msgid " Website: ${HOMEPAGE}" +msgstr " Website: ${HOMEPAGE}" + +#: quickget:28 +msgid " Based of: ${BASEDOF}" +msgstr " Based of: ${BASEDOF}" + +#: quickget:29 +msgid "Description: ${DESCRIPTION}" +msgstr "Description: ${DESCRIPTION}" + +#: quickget:30 +msgid "Credentials: ${CREDENTIALS}" +msgstr "Credentials: ${CREDENTIALS}" + +#: quickget:31 +msgid "Releases: ${RELEASES}" +msgstr "Releases: ${RELEASES}" + +#: quickget:33 +msgid "Editions: ${EDITIONS}" +msgstr "Editions: ${EDITIONS}" + +#: quickget:48 +msgid "ERROR! You must specify an operating system." +msgstr "ERROR! You must specify an operating system." + +#: quickget:49 +msgid "- Supported Operating Systems:" +msgstr "- Supported Operating Systems:" + +#: quickget:51 +msgid "\\nTo see all possible arguments, use:\\n quickget -h or quickget --help" +msgstr "\\nTo see all possible arguments, use:\\n quickget -h or quickget --help" + +#: quickget:57 +msgid "ERROR! ${OS} is not a supported OS.\\n" +msgstr "ERROR! ${OS} is not a supported OS.\\n" + +#: quickget:65 +msgid "\\nERROR! You must specify a release." +msgstr "\\nERROR! You must specify a release." + +#: quickget:71 +msgid "ERROR! ${DISPLAY_NAME} ${RELEASE} is not a supported release.\\n" +msgstr "ERROR! ${DISPLAY_NAME} ${RELEASE} is not a supported release.\\n" + +#: quickget:79 +msgid "ERROR! ${I18N} is not a supported ${PRETTY} language\\n" +msgstr "ERROR! ${I18N} is not a supported ${PRETTY} language\\n" + +#: quickget:88 +msgid "ERROR! Not supported argument" +msgstr "ERROR! Not supported argument" + +#: quickget:89 +msgid "To see all possible arguments, use:" +msgstr "To see all possible arguments, use:" + +#: quickget:95 +msgid "ERROR! Unable to create directory ${DIR}" +msgstr "ERROR! Unable to create directory ${DIR}" + +#: quickget:100 +msgid "ERROR! Only ISO,IMG and QCOW2 file types are supported for --create-config" +msgstr "ERROR! Only ISO,IMG and QCOW2 file types are supported for --create-config" + +#: quickget:126 +msgid "ERROR! Unsupported combination" +msgstr "ERROR! Unsupported combination" + +#: quickget:127 +msgid " Fedora ${RELEASE} ${EDITION} is not available, please choose another Release or Edition" +msgstr " Fedora ${RELEASE} ${EDITION} is not available, please choose another Release or Edition" + +#: quickget:407 +msgid "WARNING! Can't guess hash algorithm, not checking ${iso} hash." +msgstr "WARNING! Can't guess hash algorithm, not checking ${iso} hash." + +#: quickget:410 +msgid "Checking ${iso} with ${hash_algo}... " +msgstr "Checking ${iso} with ${hash_algo}... " + +#: quickget:412 +msgid "ERROR!" +msgstr "ERROR!" + +#: quickget:413 +msgid "${iso} doesn't match ${hash}. Try running 'quickget' again." +msgstr "${iso} doesn't match ${hash}. Try running 'quickget' again." + +#: quickget:416 +msgid "Good!" +msgstr "Good!" + +#: quickget:475 +msgid "Downloading ${PRETTY} ${RELEASE} ${EDITION}" +msgstr "Downloading ${PRETTY} ${RELEASE} ${EDITION}" + +#: quickget:476 +msgid "- URL: ${URL}" +msgstr "- URL: ${URL}" + +#: quickget:480 +msgid "ERROR! Failed to download ${URL} with curl." +msgstr "ERROR! Failed to download ${URL} with curl." + +#: quickget:539 +msgid "Downloading ${PRETTY} ${RELEASE} ${EDITION} from ${URL}" +msgstr "Downloading ${PRETTY} ${RELEASE} ${EDITION} from ${URL}" + +#: quickget:542 +msgid "ERROR! Failed to download ${URL/https/http}.zsync" +msgstr "ERROR! Failed to download ${URL/https/http}.zsync" + +#: quickget:550 +msgid "INFO: zsync not found, falling back to curl" +msgstr "INFO: zsync not found, falling back to curl" + +#: quickget:637 +msgid "Making ${CONF_FILE}" +msgstr "Making ${CONF_FILE}" + +#: quickget:644 +msgid " - Setting ${CONF_FILE} executable" +msgstr " - Setting ${CONF_FILE} executable" + +#: quickget:744 +msgid "Run new ${OS} VM?" +msgstr "Run new ${OS} VM?" + +#: quickget:747 +msgid "\\nTo start your ${PRETTY} virtual machine run:" +msgstr "\\nTo start your ${PRETTY} virtual machine run:" + +#: quickget:749 +msgid " quickemu --vm ${CONF_FILE}\\nTo start Slint with braille support run:\\n quickemu --vm --braille --display sdl ${CONF_FILE}" +msgstr " quickemu --vm ${CONF_FILE}\\nTo start Slint with braille support run:\\n quickemu --vm --braille --display sdl ${CONF_FILE}" + +#: quickget:812 +msgid "ERROR! '7zip' needs installing. Unable to extract file." +msgstr "ERROR! '7zip' needs installing. Unable to extract file." + +#: quickget:835 +msgid "ERROR! qemu-img not found. Please make sure qemu-img is installed." +msgstr "ERROR! qemu-img not found. Please make sure qemu-img is installed." + +#: quickget:855 +msgid "WARNING! This will overwrite content of directory: ${VM_PATH}" +msgstr "WARNING! This will overwrite content of directory: ${VM_PATH}" + +#: quickget:867 +msgid "Moving image to VM dir" +msgstr "Moving image to VM dir" + +#: quickget:870 +msgid "ERROR! The input must be a valid URL or path to an ISO, IMG, or QCOW2 file." +msgstr "ERROR! The input must be a valid URL or path to an ISO, IMG, or QCOW2 file." + +#: quickget:886 +msgid "Creating custom VM config for ${INPUT##*/}." +msgstr "Creating custom VM config for ${INPUT##*/}." + +#: quickget:896 +msgid "Creating unattended Windows installation files. To disable, pass --disable-unattended" +msgstr "Creating unattended Windows installation files. To disable, pass --disable-unattended" + +#: quickget:898 +msgid "Downloading VirtIO drivers..." +msgstr "Downloading VirtIO drivers..." + +#: quickget:907 +msgid "Selecting OS: ${CUSTOM_OS}. If this is incorrect, please modify the config file to include the correct OS.\\n" +msgstr "Selecting OS: ${CUSTOM_OS}. If this is incorrect, please modify the config file to include the correct OS.\\n" + +#: quickget:918 +msgid "quickemu not found" +msgstr "quickemu not found" + +#: quickget:944 +msgid "ERROR! ${EDITION} is not a supported ${PRETTY} edition\\n" +msgstr "ERROR! ${EDITION} is not a supported ${PRETTY} edition\\n" + +#: quickget:954 +msgid "\\nERROR! You must specify an edition." +msgstr "\\nERROR! You must specify an edition." + +#: quickget:997 +msgid "gum could not be found, please install it first" +msgstr "gum could not be found, please install it first" + +#: quickget:1063 +msgid "Sorry, you need bash 4.0 or newer to run this script." +msgstr "Sorry, you need bash 4.0 or newer to run this script." + +#: quickget:1072 +msgid "ERROR! curl not found. Please install curl" +msgstr "ERROR! curl not found. Please install curl" diff --git a/quickemu b/quickemu index 743c3a2..b9351e0 100755 --- a/quickemu +++ b/quickemu @@ -1,8 +1,16 @@ #!/usr/bin/env bash + +export TEXTDOMAIN=quickemu +if [[ -n $Q_DEBUG ]]; then + export TEXTDOMAINDIR="${PWD}/locale" +else + export TEXTDOMAINDIR=/usr/share/locale +fi + export LC_ALL=C if ((BASH_VERSINFO[0] < 4)); then - echo "Sorry, you need bash 4.0 or newer to run this script." + echo $"Sorry, you need bash 4.0 or newer to run this script." exit 1 fi @@ -15,7 +23,7 @@ function ignore_msrs_always() { sudo update-initramfs -k all -u fi else - echo "ERROR! /etc/modprobe.d was not found, I don't know how to configure this system." + echo $"ERROR! /etc/modprobe.d was not found, I don't know how to configure this system." exit 1 fi } @@ -27,13 +35,13 @@ function ignore_msrs_alert() { elif [ -e /sys/module/kvm/parameters/ignore_msrs ]; then ignore_msrs=$(cat /sys/module/kvm/parameters/ignore_msrs) if [ "${ignore_msrs}" == "N" ]; then - echo " - MSR: WARNING! Ignoring unhandled Model-Specific Registers is disabled." + echo $" - MSR: WARNING! Ignoring unhandled Model-Specific Registers is disabled." echo echo " echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs" echo - echo " If you are unable to run macOS or Windows VMs then run the above 👆" - echo " This will enable ignoring of unhandled MSRs until you reboot the host." - echo " You can make this change permanent by running: 'quickemu --ignore-msrs-always'" + echo $" If you are unable to run macOS or Windows VMs then run the above 👆" + echo $" This will enable ignoring of unhandled MSRs until you reboot the host." + echo $" You can make this change permanent by running: 'quickemu --ignore-msrs-always'" fi fi } @@ -42,107 +50,107 @@ function delete_shortcut() { local SHORTCUT_DIR="${HOME}/.local/share/applications" if [ -e "${SHORTCUT_DIR}/${VMNAME}.desktop" ]; then rm "${SHORTCUT_DIR}/${VMNAME}.desktop" - echo " - Deleted ${SHORTCUT_DIR}/${VMNAME}.desktop" + echo $" - Deleted ${SHORTCUT_DIR}/${VMNAME}.desktop" fi } function delete_disk() { - echo "Deleting ${VMNAME} virtual hard disk" + echo $"Deleting ${VMNAME} virtual hard disk" if [ -e "${disk_img}" ]; then rm "${disk_img}" >/dev/null 2>&1 # Remove any EFI vars, but not for macOS rm "${VMDIR}"/OVMF_VARS*.fd >/dev/null 2>&1 rm "${VMDIR}/${VMNAME}-vars.fd" >/dev/null 2>&1 - echo " - Deleted ${disk_img}" + echo $" - Deleted ${disk_img}" delete_shortcut else - echo " - ${disk_img} not found. Doing nothing." + echo $" - ${disk_img} not found. Doing nothing." fi } function delete_vm() { - echo "Deleting ${VMNAME} completely" + echo $"Deleting ${VMNAME} completely" if [ -d "${VMDIR}" ]; then rm -rf "${VMDIR}" rm "${VM}" - echo " - Deleted ${VM} and ${VMDIR}/" + echo $" - Deleted ${VM} and ${VMDIR}/" delete_shortcut else - echo " - ${VMDIR} not found. Doing nothing." + echo $" - ${VMDIR} not found. Doing nothing." fi } function kill_vm() { - echo "Killing ${VMNAME}" + echo $"Killing ${VMNAME}" if [ -z "${VM_PID}" ]; then - echo " - ${VMNAME} is not running." + echo $" - ${VMNAME} is not running." rm -f "${VMDIR}/${VMNAME}.pid" elif [ -n "${VM_PID}" ]; then if kill -9 "${VM_PID}" > /dev/null 2>&1; then - echo " - ${VMNAME} (${VM_PID}) killed." + echo $" - ${VMNAME} (${VM_PID}) killed." rm -f "${VMDIR}/${VMNAME}.pid" else - echo " - ${VMNAME} (${VM_PID}) was not killed." + echo $" - ${VMNAME} (${VM_PID}) was not killed." fi elif [ ! -r "${VMDIR}/${VMNAME}.pid" ]; then - echo " - ${VMNAME} has no ${VMDIR}/${VMNAME}.pid" + echo $" - ${VMNAME} has no ${VMDIR}/${VMNAME}.pid" fi } function snapshot_apply() { - echo "Snapshot apply to ${disk_img}" + echo $"Snapshot apply to ${disk_img}" local TAG="${1}" if [ -z "${TAG}" ]; then - echo " - ERROR! No snapshot tag provided." + echo $" - ERROR! No snapshot tag provided." exit fi if [ -e "${disk_img}" ]; then if ${QEMU_IMG} snapshot -q -a "${TAG}" "${disk_img}"; then - echo " - Applied snapshot '${TAG}' to ${disk_img}" + echo $" - Applied snapshot '${TAG}' to ${disk_img}" else - echo " - ERROR! Failed to apply snapshot '${TAG}' to ${disk_img}" + echo $" - ERROR! Failed to apply snapshot '${TAG}' to ${disk_img}" fi else - echo " - NOTE! ${disk_img} not found. Doing nothing." + echo $" - NOTE! ${disk_img} not found. Doing nothing." fi } function snapshot_create() { - echo "Snapshotting ${disk_img}" + echo $"Snapshotting ${disk_img}" local TAG="${1}" if [ -z "${TAG}" ]; then - echo "- ERROR! No snapshot tag provided." + echo $"- ERROR! No snapshot tag provided." exit fi if [ -e "${disk_img}" ]; then if ${QEMU_IMG} snapshot -q -c "${TAG}" "${disk_img}"; then - echo " - Created snapshot '${TAG}' for ${disk_img}" + echo $" - Created snapshot '${TAG}' for ${disk_img}" else - echo " - ERROR! Failed to create snapshot '${TAG}' for ${disk_img}" + echo $" - ERROR! Failed to create snapshot '${TAG}' for ${disk_img}" fi else - echo " - NOTE! ${disk_img} not found. Doing nothing." + echo $" - NOTE! ${disk_img} not found. Doing nothing." fi } function snapshot_delete() { - echo "Snapshot removal ${disk_img}" + echo $"Snapshot removal ${disk_img}" local TAG="${1}" if [ -z "${TAG}" ]; then - echo " - ERROR! No snapshot tag provided." + echo $" - ERROR! No snapshot tag provided." exit fi if [ -e "${disk_img}" ]; then if ${QEMU_IMG} snapshot -q -d "${TAG}" "${disk_img}"; then - echo " - Deleted snapshot '${TAG}' from ${disk_img}" + echo $" - Deleted snapshot '${TAG}' from ${disk_img}" else - echo " - ERROR! Failed to delete snapshot '${TAG}' from ${disk_img}" + echo $" - ERROR! Failed to delete snapshot '${TAG}' from ${disk_img}" fi else - echo " - NOTE! ${disk_img} not found. Doing nothing." + echo $" - NOTE! ${disk_img} not found. Doing nothing." fi } @@ -178,7 +186,7 @@ function configure_usb() { # Have any USB devices been requested for pass-through? if (( ${#usb_devices[@]} )); then - echo " - USB: Host pass-through requested:" + echo $" - USB: Host pass-through requested:" for DEVICE in "${usb_devices[@]}"; do VENDOR_ID=$(echo "${DEVICE}" | cut -d':' -f1) PRODUCT_ID=$(echo "${DEVICE}" | cut -d':' -f2) @@ -186,12 +194,12 @@ function configure_usb() { USB_DEV=$(lsusb -d "${VENDOR_ID}:${PRODUCT_ID}" | cut -d' ' -f4 | cut -d':' -f1) USB_NAME=$(lsusb -d "${VENDOR_ID}:${PRODUCT_ID}" | cut -d' ' -f7-) if [ -z "${USB_NAME}" ]; then - echo " ! USB device ${VENDOR_ID}:${PRODUCT_ID} not found. Check your configuration" + echo $" ! USB device ${VENDOR_ID}:${PRODUCT_ID} not found. Check your configuration" continue elif [ -w "/dev/bus/usb/${USB_BUS}/${USB_DEV}" ]; then - echo " o ${USB_NAME} on bus ${USB_BUS} device ${USB_DEV} is accessible." + echo $" o ${USB_NAME} on bus ${USB_BUS} device ${USB_DEV} is accessible." else - echo " x ${USB_NAME} on bus ${USB_BUS} device ${USB_DEV} needs permission changes:" + echo $" x ${USB_NAME} on bus ${USB_BUS} device ${USB_DEV} needs permission changes:" echo " sudo chown -v root:${USER} /dev/bus/usb/${USB_BUS}/${USB_DEV}" USB_NOT_READY=1 fi @@ -199,7 +207,7 @@ function configure_usb() { done if [ "${USB_NOT_READY}" -eq 1 ]; then - echo " ERROR! USB permission changes are required 👆" + echo $" ERROR! USB permission changes are required 👆" exit 1 fi fi @@ -212,7 +220,7 @@ function get_nproc() { elif command -v sysctl &>/dev/null; then sysctl -n hw.ncpu else - echo "ERROR! Unable to determine the number of processing units." + echo $"ERROR! Unable to determine the number of processing units." exit 1 fi } @@ -233,7 +241,7 @@ function get_cpu_info() { sysctl -n machdep.cpu.vendor | sed 's/ //g' fi else - echo "ERROR! Could not find macOS translation for ${INFO_NAME}" + echo $"ERROR! Could not find macOS translation for ${INFO_NAME}" exit 1 fi else @@ -311,7 +319,7 @@ function efi_vars() { if [ -e "${VARS_IN}" ]; then cp "${VARS_IN}" "${VARS_OUT}" else - echo "ERROR! ${VARS_IN} was not found. Please install edk2." + echo $"ERROR! ${VARS_IN} was not found. Please install edk2." exit 1 fi fi @@ -374,12 +382,12 @@ function configure_cpu() { # A CPU with Intel VT-x / AMD SVM support is required if [ "${HOST_CPU_VENDOR}" == "GenuineIntel" ]; then if ! check_cpu_flag vmx; then - echo "ERROR! Intel VT-x support is required." + echo $"ERROR! Intel VT-x support is required." exit 1 fi elif [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then if ! check_cpu_flag svm; then - echo "ERROR! AMD SVM support is required." + echo $"ERROR! AMD SVM support is required." exit 1 fi fi @@ -421,8 +429,8 @@ function configure_cpu() { CPU+=",+avx2,+sse4.2" fi else - echo "ERROR! macOS ${macos_release} requires a CPU with SSE 4.2 and AVX2 support." - echo " Try macOS Monterey or Big Sur." + echo $"ERROR! macOS ${macos_release} requires a CPU with SSE 4.2 and AVX2 support." + echo $" Try macOS Monterey or Big Sur." exit 1 fi;; catalina|big-sur|monterey) @@ -432,7 +440,7 @@ function configure_cpu() { CPU+=",+sse4.2" fi else - echo "ERROR! macOS ${macos_release} requires a CPU with SSE 4.2 support." + echo $"ERROR! macOS ${macos_release} requires a CPU with SSE 4.2 support." exit 1 fi;; *) @@ -442,7 +450,7 @@ function configure_cpu() { CPU+=",+sse4.1" fi else - echo "ERROR! macOS ${macos_release} requires a CPU with SSE 4.1 support." + echo $"ERROR! macOS ${macos_release} requires a CPU with SSE 4.1 support." exit 1 fi;; esac @@ -547,8 +555,8 @@ function configure_cpu() { fi SMP="-smp cores=${GUEST_CPU_LOGICAL_CORES},threads=${GUEST_CPU_THREADS},sockets=${HOST_CPU_SOCKETS}" - echo " - CPU: ${HOST_CPU_MODEL}" - echo " - CPU VM: ${CPU_MODEL%%,*}, ${HOST_CPU_SOCKETS} Socket(s), ${GUEST_CPU_LOGICAL_CORES} Core(s), ${GUEST_CPU_THREADS} Thread(s)" + echo $" - CPU: ${HOST_CPU_MODEL}" + echo $" - CPU VM: ${CPU_MODEL%%,*}, ${HOST_CPU_SOCKETS} Socket(s), ${GUEST_CPU_LOGICAL_CORES} Core(s), ${GUEST_CPU_THREADS} Thread(s)" if [ "${guest_os}" == "macos" ] || [ "${guest_os}" == "windows" ] || [ "${guest_os}" == "windows-server" ]; then # Display MSRs alert if the guest is macOS or windows @@ -580,7 +588,7 @@ function configure_ram() { else RAM_VM="${ram}" fi - echo " - RAM VM: ${RAM_VM} RAM" + echo $" - RAM VM: ${RAM_VM} RAM" case "${guest_os}" in windows|windows-server) @@ -595,11 +603,11 @@ function configure_ram() { if [ -n "${min_ram}" ] && [ "${RAM_VM//G/}" -lt "${min_ram}" ]; then if [ -z "${ram}" ]; then - echo " ERROR! The guest virtual machine has been allocated insufficient RAM to run ${OS_PRETTY_NAME}." - echo " You can override the guest RAM allocation by adding 'ram=${min_ram}G' to ${VM}" + echo $" ERROR! The guest virtual machine has been allocated insufficient RAM to run ${OS_PRETTY_NAME}." + echo $" You can override the guest RAM allocation by adding 'ram=${min_ram}G' to ${VM}" exit 1 else - echo " WARNING! You have allocated less than the recommended amount of RAM to run ${OS_PRETTY_NAME}." + echo $" WARNING! You have allocated less than the recommended amount of RAM to run ${OS_PRETTY_NAME}." fi fi } @@ -628,8 +636,8 @@ function configure_bios() { fi if [ -n "${MAC_MISSING}" ]; then - echo "ERROR! macOS ${MAC_MISSING} was not found." - echo " Use 'quickget' to download the required files." + echo $"ERROR! macOS ${MAC_MISSING} was not found." + echo $" Use 'quickget' to download the required files." exit 1 fi BOOT_STATUS="EFI (macOS), OVMF ($(basename "${EFI_CODE}")), SecureBoot (${secureboot})." @@ -700,16 +708,16 @@ function configure_bios() { fi if [ -z "${EFI_CODE}" ] || [ ! -e "${EFI_CODE}" ]; then if [ "${secureboot}" == "on" ]; then - echo "ERROR! SecureBoot was requested but no SecureBoot capable firmware was found." + echo $"ERROR! SecureBoot was requested but no SecureBoot capable firmware was found." else - echo "ERROR! EFI boot requested but no EFI firmware found." + echo $"ERROR! EFI boot requested but no EFI firmware found." fi - echo " Please install OVMF firmware." + echo $" Please install OVMF firmware." exit 1 fi if [ -n "${EFI_EXTRA_VARS}" ]; then if [ ! -e "${EFI_EXTRA_VARS}" ]; then - echo " - EFI: ERROR! EFI_EXTRA_VARS file ${EFI_EXTRA_VARS} does not exist." + echo $" - EFI: ERROR! EFI_EXTRA_VARS file ${EFI_EXTRA_VARS} does not exist." exit 1 fi efi_vars "${EFI_EXTRA_VARS}" "${EFI_VARS}" @@ -717,16 +725,16 @@ function configure_bios() { # Make sure EFI_VARS references an actual, writeable, file if [ ! -f "${EFI_VARS}" ] || [ ! -w "${EFI_VARS}" ]; then - echo " - EFI: ERROR! ${EFI_VARS} is not a regular file or not writeable." - echo " Deleting ${EFI_VARS}. Please re-run quickemu." + echo $" - EFI: ERROR! ${EFI_VARS} is not a regular file or not writeable." + echo $" Deleting ${EFI_VARS}. Please re-run quickemu." rm -f "${EFI_VARS}" exit 1 fi # If EFI_CODE references a symlink, resolve it to the real file. if [ -L "${EFI_CODE}" ]; then - echo " - EFI: WARNING! ${EFI_CODE} is a symlink." - echo -n " Resolving to... " + echo $" - EFI: WARNING! ${EFI_CODE} is a symlink." + echo $-n " Resolving to... " EFI_CODE=$(realpath "${EFI_CODE}") echo "${EFI_CODE}" fi @@ -737,7 +745,7 @@ function configure_bios() { secureboot="off" fi - echo " - BOOT: ${BOOT_STATUS}" + echo $" - BOOT: ${BOOT_STATUS}" } function configure_os_quirks() { @@ -793,13 +801,13 @@ function configure_os_quirks() { function configure_storage() { local create_options="" - echo " - Disk: ${disk_img} (${disk_size})" + echo $" - Disk: ${disk_img} (${disk_size})" if [ ! -f "${disk_img}" ]; then # If there is no disk image, create a new image. mkdir -p "${VMDIR}" 2>/dev/null case ${preallocation} in off|metadata|falloc|full) true;; - *) echo "ERROR! ${preallocation} is an unsupported disk preallocation option." + *) echo $"ERROR! ${preallocation} is an unsupported disk preallocation option." exit 1;; esac @@ -811,27 +819,27 @@ function configure_storage() { # https://blog.programster.org/qcow2-performance if ! ${QEMU_IMG} create -q -f "${disk_format}" -o "${create_options=}" "${disk_img}" "${disk_size}"; then - echo "ERROR! Failed to create ${disk_img} using ${disk_format} format." + echo $"ERROR! Failed to create ${disk_img} using ${disk_format} format." exit 1 fi if [ -z "${iso}" ] && [ -z "${img}" ]; then - echo "ERROR! You haven't specified a .iso or .img image to boot from." + echo $"ERROR! You haven't specified a .iso or .img image to boot from." exit 1 fi - echo " Just created, booting from ${iso}${img}" + echo $" Just created, booting from ${iso}${img}" DISK_USED="no" elif [ -e "${disk_img}" ]; then # If the VM is not running, check for disk related issues. if [ -z "${VM_PID}" ]; then # Check there isn't already a process attached to the disk image. if ! ${QEMU_IMG} info "${disk_img}" >/dev/null; then - echo " Failed to get \"write\" lock. Is another process using the disk?" + echo $" Failed to get \"write\" lock. Is another process using the disk?" exit 1 fi else if ! ${QEMU_IMG} check -q "${disk_img}"; then - echo " Disk integrity check failed. Please run qemu-img check --help." + echo $" Disk integrity check failed. Please run qemu-img check --help." echo "${QEMU_IMG}" check "${disk_img}" exit 1 @@ -842,9 +850,9 @@ function configure_storage() { if [ "${preallocation}" == "off" ]; then DISK_CURR_SIZE=$(${STAT} -c%s "${disk_img}") if [ "${DISK_CURR_SIZE}" -le "${DISK_MIN_SIZE}" ]; then - echo " Looks unused, booting from ${iso}${img}" + echo $" Looks unused, booting from ${iso}${img}" if [ -z "${iso}" ] && [ -z "${img}" ]; then - echo "ERROR! You haven't specified a .iso or .img image to boot from." + echo $"ERROR! You haven't specified a .iso or .img image to boot from." exit 1 fi else @@ -864,18 +872,18 @@ function configure_storage() { # Has the status quo been requested? if [ "${STATUS_QUO}" == "-snapshot" ]; then if [ -z "${img}" ] && [ -z "${iso}" ]; then - echo " Existing disk state will be preserved, no writes will be committed." + echo $" Existing disk state will be preserved, no writes will be committed." fi fi if [ -n "${iso}" ] && [ -e "${iso}" ]; then - echo " - Boot ISO: ${iso}" + echo $" - Boot ISO: ${iso}" elif [ -n "${img}" ] && [ -e "${img}" ]; then - echo " - Recovery: ${img}" + echo $" - Recovery: ${img}" fi if [ -n "${fixed_iso}" ] && [ -e "${fixed_iso}" ]; then - echo " - CD-ROM: ${fixed_iso}" + echo $" - CD-ROM: ${fixed_iso}" fi } @@ -947,9 +955,9 @@ function configure_display() { else DISPLAY_DEVICE="${DISPLAY_DEVICE},virgl=on" fi - echo -n " - Display: ${display^^}, ${DISPLAY_DEVICE}, GL (${gl}), VirGL (on)" + echo -n $" - Display: ${display^^}, ${DISPLAY_DEVICE}, GL (${gl}), VirGL (on)" else - echo -n " - Display: ${display^^}, ${DISPLAY_DEVICE}, GL (${gl}), VirGL (off)" + echo -n $" - Display: ${display^^}, ${DISPLAY_DEVICE}, GL (${gl}), VirGL (off)" fi # Build the video configuration @@ -994,7 +1002,7 @@ function configure_audio() { ac97|es1370|sb16) SOUND="-device ${sound_card},audiodev=audio0";; none) SOUND="";; esac - echo " - Sound: ${sound_card} (${sound_duplex})" + echo $" - Sound: ${sound_card} (${sound_duplex})" } function configure_ports() { @@ -1008,14 +1016,14 @@ function configure_ports() { if [ -n "${ssh_port}" ]; then echo "ssh,${ssh_port}" >> "${VMDIR}/${VMNAME}.ports" NET="${NET},hostfwd=tcp::${ssh_port}-:22" - echo " - ssh: On host: ssh user@localhost -p ${ssh_port}" + echo $" - ssh: On host: ssh user@localhost -p ${ssh_port}" else - echo " - ssh: All ssh ports have been exhausted." + echo $" - ssh: All ssh ports have been exhausted." fi # Have any port forwards been requested? if (( ${#port_forwards[@]} )); then - echo " - PORTS: Port forwards requested:" + echo $" - PORTS: Port forwards requested:" for FORWARD in "${port_forwards[@]}"; do HOST_PORT=$(echo "${FORWARD}" | cut -d':' -f1) GUEST_PORT=$(echo "${FORWARD}" | cut -d':' -f2) @@ -1052,17 +1060,17 @@ function configure_ports() { fi if [ -z "${spice_port}" ]; then - echo " - SPICE: All SPICE ports have been exhausted." + echo $" - SPICE: All SPICE ports have been exhausted." if [ "${display}" == "none" ] || [ "${display}" == "spice" ] || [ "${display}" == "spice-app" ]; then - echo " ERROR! Requested SPICE display, but no SPICE ports are free." + echo $" ERROR! Requested SPICE display, but no SPICE ports are free." exit 1 fi else if [ "${display}" == "spice-app" ]; then - echo " - SPICE: Enabled" + echo $" - SPICE: Enabled" else echo "spice,${spice_port}" >> "${VMDIR}/${VMNAME}.ports" - echo -n " - SPICE: On host: spicy --title \"${VMNAME}\" --port ${spice_port}" + echo $-n " - SPICE: On host: spicy --title \"${VMNAME}\" --port ${spice_port}" if [ "${guest_os}" != "macos" ] && [ -n "${PUBLIC}" ]; then echo -n " --spice-shared-dir ${PUBLIC}" fi @@ -1080,15 +1088,15 @@ function configure_file_sharing() { macos) if [ "${display}" == "none" ] || [ "${display}" == "spice" ] || [ "${display}" == "spice-app" ]; then # Reference: https://gitlab.gnome.org/GNOME/phodav/-/issues/5 - echo " - WebDAV: On guest: build spice-webdavd (https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24)" - echo " - WebDAV: On guest: Finder -> Connect to Server -> http://localhost:9843/" + echo $" - WebDAV: On guest: build spice-webdavd (https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24)" + echo $" - WebDAV: On guest: Finder -> Connect to Server -> http://localhost:9843/" fi;; - *) echo " - WebDAV: On guest: dav://localhost:9843/";; + *) echo $" - WebDAV: On guest: dav://localhost:9843/";; esac # 9P if [ "${guest_os}" != "windows" ] || [ "${guest_os}" == "windows-server" ]; then - echo -n " - 9P: On guest: " + echo -n $" - 9P: On guest: " if [ "${guest_os}" == "linux" ]; then echo "sudo mount -t 9p -o trans=virtio,version=9p2000.L,msize=104857600 ${PUBLIC_TAG} ~/$(basename "${PUBLIC}")" elif [ "${guest_os}" == "macos" ]; then @@ -1096,8 +1104,8 @@ function configure_file_sharing() { # macOS. Test if it is world writeable, and prompt what to do if not. echo "sudo mount_9p ${PUBLIC_TAG}" if [ "${PUBLIC_PERMS}" != "drwxrwxrwx" ]; then - echo " - 9P: On host: chmod 777 ${PUBLIC}" - echo " Required for macOS integration 👆" + echo $" - 9P: On host: chmod 777 ${PUBLIC}" + echo $" Required for macOS integration 👆" fi fi fi @@ -1107,7 +1115,7 @@ function configure_file_sharing() { # since /usr/sbin/smbd may not be in the PATH. if [ -x "$(command -v smbd)" ] || [ -x "/usr/sbin/smbd" ]; then NET+=",smb=${PUBLIC}" - echo " - smbd: On guest: smb://10.0.2.4/qemu" + echo $" - smbd: On guest: smb://10.0.2.4/qemu" fi fi } @@ -1124,7 +1132,7 @@ function configure_tpm() { --tpm2) echo "${SWTPM} ${tpm_args[*]} &" >> "${VMDIR}/${VMNAME}.sh" ${SWTPM} "${tpm_args[@]}" >> "${VMDIR}/${VMNAME}.log" & - echo " - TPM: ${VMDIR}/${VMNAME}.swtpm-sock (${!})" + echo $" - TPM: ${VMDIR}/${VMNAME}.swtpm-sock (${!})" sleep 0.25 fi } @@ -1177,8 +1185,8 @@ function vm_boot() { OS_RELEASE=$(grep PRETTY_NAME /etc/os-release | cut -d'"' -f2) fi - echo "Quickemu ${VERSION} using ${QEMU} v${QEMU_VER_LONG}" - echo " - Host: ${OS_RELEASE} running ${KERNEL_NAME} ${KERNEL_VER} ${KERNEL_NODE}" + echo $"Quickemu ${VERSION} using ${QEMU} v${QEMU_VER_LONG}" + echo $" - Host: ${OS_RELEASE} running ${KERNEL_NAME} ${KERNEL_VER} ${KERNEL_NODE}" # Force to lowercase. boot=${boot,,} @@ -1256,7 +1264,7 @@ function vm_boot() { args+=(-chardev spicevmc,id=ccid,name=smartcard -device ccid-card-passthru,chardev=ccid) else - echo " - WARNING! ${QEMU} or SPICE was not compiled with support for smartcard devices" + echo $" - WARNING! ${QEMU} or SPICE was not compiled with support for smartcard devices" fi fi @@ -1271,7 +1279,7 @@ function vm_boot() { # add nothing : else - echo " - WARNING! Unknown usb-controller value: '${usb_controller}'" + echo $" - WARNING! Unknown usb-controller value: '${usb_controller}'" fi # setup keyboard @@ -1286,7 +1294,7 @@ function vm_boot() { # add nothing, default is ps/2 keyboard : else - echo " - WARNING! Unknown keyboard value: '${keyboard}'; Fallback to ps2" + echo $" - WARNING! Unknown keyboard value: '${keyboard}'; Fallback to ps2" fi # setup keyboard_layout @@ -1303,7 +1311,7 @@ function vm_boot() { # -device usb-braille,id=usbbrl,chardev=brltty) args+=(-usbdevice braille) else - echo " - WARNING! ${QEMU} does not support -chardev braille " + echo $" - WARNING! ${QEMU} does not support -chardev braille " fi fi @@ -1322,7 +1330,7 @@ function vm_boot() { # add nothing, default is ps/2 mouse : else - echo " - WARNING! Unknown mouse value: '${mouse}'; Falling back to ps2" + echo $" - WARNING! Unknown mouse value: '${mouse}'; Falling back to ps2" fi # setup audio @@ -1337,15 +1345,15 @@ function vm_boot() { if [ "${network}" == "none" ]; then # Disable all networking - echo " - Network: Disabled" + echo $" - Network: Disabled" args+=(-nic none) elif [ "${network}" == "restrict" ]; then - echo " - Network: Restricted (${NET_DEVICE})" + echo $" - Network: Restricted (${NET_DEVICE})" # shellcheck disable=SC2054,SC2206 args+=(-device ${NET_DEVICE},netdev=nic -netdev ${NET},restrict=y,id=nic) elif [ -n "${network}" ]; then # Enable bridge mode networking - echo " - Network: Bridged (${network})" + echo $" - Network: Bridged (${network})" # If a persistent MAC address is provided, use it. local MAC="" @@ -1356,7 +1364,7 @@ function vm_boot() { # shellcheck disable=SC2054,SC2206 args+=(-nic bridge,br=${network},model=virtio-net-pci${MAC}) else - echo " - Network: User (${NET_DEVICE})" + echo $" - Network: User (${NET_DEVICE})" # shellcheck disable=SC2054,SC2206 args+=(-device ${NET_DEVICE},netdev=nic -netdev ${NET},id=nic) fi @@ -1473,57 +1481,57 @@ function vm_boot() { if [ "${monitor}" == "none" ]; then args+=(-monitor none) - echo " - Monitor: (off)" + echo $" - Monitor: (off)" elif [ "${monitor}" == "telnet" ]; then # Find a free port to expose monitor-telnet to the guest TEMP_PORT="$(get_port "${monitor_telnet_port}" 9)" if [ -z "${TEMP_PORT}" ]; then - echo " - Monitor: All Monitor-Telnet ports have been exhausted." + echo $" - Monitor: All Monitor-Telnet ports have been exhausted." else monitor_telnet_port="${TEMP_PORT}" # shellcheck disable=SC2054 args+=(-monitor telnet:"${monitor_telnet_host}:${monitor_telnet_port}",server,nowait) - echo " - Monitor: On host: telnet ${monitor_telnet_host} ${monitor_telnet_port}" + echo $" - Monitor: On host: telnet ${monitor_telnet_host} ${monitor_telnet_port}" echo "monitor-telnet,${monitor_telnet_port},${monitor_telnet_host}" >> "${VMDIR}/${VMNAME}.ports" fi elif [ "${monitor}" == "socket" ]; then # shellcheck disable=SC2054,SC2206 args+=(-monitor unix:${SOCKET_MONITOR},server,nowait) if command -v socat &>/dev/null; then - echo " - Monitor: On host: socat -,echo=0,icanon=0 unix-connect:${SOCKET_MONITOR}" + echo $" - Monitor: On host: socat -,echo=0,icanon=0 unix-connect:${SOCKET_MONITOR}" elif command -v nc &>/dev/null; then - echo " - Monitor: On host: nc -U \"${SOCKET_MONITOR}\"" + echo $" - Monitor: On host: nc -U \"${SOCKET_MONITOR}\"" fi else - echo "ERROR! \"${monitor}\" is an unknown monitor option." + echo $"ERROR! \"${monitor}\" is an unknown monitor option." exit 1 fi if [ "${serial}" == "none" ]; then args+=(-serial none) - echo " - Serial: (off)" + echo $" - Serial: (off)" elif [ "${serial}" == "telnet" ]; then # Find a free port to expose serial-telnet to the guest TEMP_PORT="$(get_port "${serial_telnet_port}" 9)" if [ -z "${TEMP_PORT}" ]; then - echo " - Serial: All Serial Telnet ports have been exhausted." + echo $" - Serial: All Serial Telnet ports have been exhausted." else serial_telnet_port="${TEMP_PORT}" # shellcheck disable=SC2054,SC2206 args+=(-serial telnet:${serial_telnet_host}:${serial_telnet_port},server,nowait) - echo " - Serial: On host: telnet ${serial_telnet_host} ${serial_telnet_port}" + echo $" - Serial: On host: telnet ${serial_telnet_host} ${serial_telnet_port}" echo "serial-telnet,${serial_telnet_port},${serial_telnet_host}" >> "${VMDIR}/${VMNAME}.ports" fi elif [ "${serial}" == "socket" ]; then # shellcheck disable=SC2054,SC2206 args+=(-serial unix:${SOCKET_SERIAL},server,nowait) if command -v socat &>/dev/null; then - echo " - Serial: On host: socat -,echo=0,icanon=0 unix-connect:${SOCKET_SERIAL}" + echo $" - Serial: On host: socat -,echo=0,icanon=0 unix-connect:${SOCKET_SERIAL}" elif command -v nc &>/dev/null; then - echo " - Serial: On host: nc -U \"${SOCKET_SERIAL}\"" + echo $" - Serial: On host: nc -U \"${SOCKET_SERIAL}\"" fi else - echo "ERROR! \"${serial}\" is an unknown serial option." + echo $"ERROR! \"${serial}\" is an unknown serial option." exit 1 fi @@ -1547,9 +1555,9 @@ function vm_boot() { VM_PID=$! sleep 0.25 if kill -0 "${VM_PID}" 2>/dev/null; then - echo " - Process: Started ${VM} as ${VMNAME} (${VM_PID})" + echo $" - Process: Started ${VM} as ${VMNAME} (${VM_PID})" else - echo " - Process: ERROR! Failed to start ${VM} as ${VMNAME}" + echo $" - Process: ERROR! Failed to start ${VM} as ${VMNAME}" rm -f "${VMDIR}/${VMNAME}.pid" echo && cat "${VMDIR}/${VMNAME}.log" exit 1 @@ -1565,28 +1573,28 @@ function start_viewer { if [ "${viewer}" == "remote-viewer" ]; then # show via viewer: remote-viewer if [ -n "${PUBLIC}" ]; then - echo " - Viewer: ${viewer} --title \"${VMNAME}\" --spice-shared-dir \"${PUBLIC}\" ${FULLSCREEN} \"spice://localhost:${spice_port}\" >/dev/null 2>&1 &" + echo $" - Viewer: ${viewer} --title \"${VMNAME}\" --spice-shared-dir \"${PUBLIC}\" ${FULLSCREEN} \"spice://localhost:${spice_port}\" >/dev/null 2>&1 &" ${viewer} --title "${VMNAME}" --spice-shared-dir "${PUBLIC}" ${FULLSCREEN} "spice://localhost:${spice_port}" >/dev/null 2>&1 & errno=$? else - echo " - Viewer: ${viewer} --title \"${VMNAME}\" ${FULLSCREEN} \"spice://localhost:${spice_port}\" >/dev/null 2>&1 &" + echo $" - Viewer: ${viewer} --title \"${VMNAME}\" ${FULLSCREEN} \"spice://localhost:${spice_port}\" >/dev/null 2>&1 &" ${viewer} --title "${VMNAME}" ${FULLSCREEN} "spice://localhost:${spice_port}" >/dev/null 2>&1 & errno=$? fi elif [ "${viewer}" == "spicy" ]; then # show via viewer: spicy if [ -n "${PUBLIC}" ]; then - echo " - Viewer: ${viewer} --title \"${VMNAME}\" --port \"${spice_port}\" --spice-shared-dir \"${PUBLIC}\" \"${FULLSCREEN}\" >/dev/null 2>&1 &" + echo $" - Viewer: ${viewer} --title \"${VMNAME}\" --port \"${spice_port}\" --spice-shared-dir \"${PUBLIC}\" \"${FULLSCREEN}\" >/dev/null 2>&1 &" ${viewer} --title "${VMNAME}" --port "${spice_port}" --spice-shared-dir "${PUBLIC}" "${FULLSCREEN}" >/dev/null 2>&1 & errno=$? else - echo " - Viewer: ${viewer} --title \"${VMNAME}\" --port \"${spice_port}\" \"${FULLSCREEN}\" >/dev/null 2>&1 &" + echo $" - Viewer: ${viewer} --title \"${VMNAME}\" --port \"${spice_port}\" \"${FULLSCREEN}\" >/dev/null 2>&1 &" ${viewer} --title "${VMNAME}" --port "${spice_port}" "${FULLSCREEN}" >/dev/null 2>&1 & errno=$? fi fi if [ ${errno} -ne 0 ]; then - echo "WARNING! Could not start viewer (${viewer}) Err: ${errno}" + echo $"WARNING! Could not start viewer (${viewer}) Err: ${errno}" fi fi fi @@ -1595,7 +1603,7 @@ function start_viewer { function shortcut_create { local dirname="${HOME}/.local/share/applications" local filename="${HOME}/.local/share/applications/${VMNAME}.desktop" - echo "Creating ${VMNAME} desktop shortcut file" + echo $"Creating ${VMNAME} desktop shortcut file" if [ ! -d "${dirname}" ]; then mkdir -p "${dirname}" @@ -1610,7 +1618,7 @@ Path=${VMPATH} Name=${VMNAME} Icon=qemu EOF - echo " - ${filename} created." + echo $" - ${filename} created." } function usage() { @@ -1619,52 +1627,52 @@ function usage() { echo " / _' | | | | |/ __| |/ / _ \ '_ ' _ \| | | |" echo "| (_| | |_| | | (__| < __/ | | | | | |_| |" echo " \__, |\__,_|_|\___|_|\_\___|_| |_| |_|\__,_|" - echo " |_| v${VERSION}, using qemu ${QEMU_VER_LONG}" + echo $" |_| v${VERSION}, using qemu ${QEMU_VER_LONG}" echo "--------------------------------------------------------------------------------" - echo " Project - https://github.com/quickemu-project/quickemu" + echo $" Project - https://github.com/quickemu-project/quickemu" echo " Discord - https://wimpysworld.io/discord" echo "--------------------------------------------------------------------------------" echo - echo "Usage" - echo " ${LAUNCHER} --vm ubuntu.conf " + echo $"Usage" + echo $" ${LAUNCHER} --vm ubuntu.conf " echo - echo "Arguments" - echo " --access : Enable remote spice access support. 'local' (default), 'remote', 'clientipaddress'" - echo " --braille : Enable braille support. Requires SDL." - echo " --delete-disk : Delete the disk image and EFI variables" - echo " --delete-vm : Delete the entire VM and its configuration" - echo " --display : Select display backend. 'sdl' (default), 'cocoa', 'gtk', 'none', 'spice' or 'spice-app'" - echo " --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit)" - echo " --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers" - echo " --kill : Kill the VM process if it is running" - echo " --offline : Override all network settings and start the VM offline" - echo " --shortcut : Create a desktop shortcut" - echo " --snapshot apply : Apply/restore a snapshot." - echo " --snapshot create : Create a snapshot." - echo " --snapshot delete : Delete a snapshot." - echo " --snapshot info : Show disk/snapshot info." - echo " --status-quo : Do not commit any changes to disk/snapshot." - echo " --viewer : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none'" - echo " --width : Set VM screen width; requires '--height'" - echo " --height : Set VM screen height; requires '--width'" - echo " --ssh-port : Set SSH port manually" - echo " --spice-port : Set SPICE port manually" - echo " --public-dir : Expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '', 'none'" - echo " --monitor : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'" - echo " --monitor-telnet-host : Set telnet host for monitor. (default: 'localhost')" - echo " --monitor-telnet-port : Set telnet port for monitor. (default: '4440')" - echo " --monitor-cmd : Send command to monitor if available. (Example: system_powerdown)" - echo " --serial : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none'" - echo " --serial-telnet-host : Set telnet host for serial. (default: 'localhost')" - echo " --serial-telnet-port : Set telnet port for serial. (default: '6660')" - echo " --keyboard : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio'" - echo " --keyboard_layout : Set keyboard layout: 'en-us' (default)" - echo " --mouse : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio'" - echo " --usb-controller : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none'" - echo " --sound-card : Set sound card. @Options: 'intel-hda' (default), 'ac97', 'es1370', 'sb16', 'usb-audio', 'none'" - echo " --sound-duplex : Set sound card duplex. @Options: 'hda-micro' (default: speaker/mic), 'hda-duplex' (line-in/line-out), 'hda-output' (output-only)" - echo " --extra_args : Pass additional arguments to qemu" - echo " --version : Print version" + echo $"Arguments" + echo $" --access : Enable remote spice access support. 'local' (default), 'remote', 'clientipaddress'" + echo $" --braille : Enable braille support. Requires SDL." + echo $" --delete-disk : Delete the disk image and EFI variables" + echo $" --delete-vm : Delete the entire VM and its configuration" + echo $" --display : Select display backend. 'sdl' (default), 'cocoa', 'gtk', 'none', 'spice' or 'spice-app'" + echo $" --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit)" + echo $" --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers" + echo $" --kill : Kill the VM process if it is running" + echo $" --offline : Override all network settings and start the VM offline" + echo $" --shortcut : Create a desktop shortcut" + echo $" --snapshot apply : Apply/restore a snapshot." + echo $" --snapshot create : Create a snapshot." + echo $" --snapshot delete : Delete a snapshot." + echo $" --snapshot info : Show disk/snapshot info." + echo $" --status-quo : Do not commit any changes to disk/snapshot." + echo $" --viewer : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none'" + echo $" --width : Set VM screen width; requires '--height'" + echo $" --height : Set VM screen height; requires '--width'" + echo $" --ssh-port : Set SSH port manually" + echo $" --spice-port : Set SPICE port manually" + echo $" --public-dir : Expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '', 'none'" + echo $" --monitor : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'" + echo $" --monitor-telnet-host : Set telnet host for monitor. (default: 'localhost')" + echo $" --monitor-telnet-port : Set telnet port for monitor. (default: '4440')" + echo $" --monitor-cmd : Send command to monitor if available. (Example: system_powerdown)" + echo $" --serial : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none'" + echo $" --serial-telnet-host : Set telnet host for serial. (default: 'localhost')" + echo $" --serial-telnet-port : Set telnet port for serial. (default: '6660')" + echo $" --keyboard : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio'" + echo $" --keyboard_layout : Set keyboard layout: 'en-us' (default)" + echo $" --mouse : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio'" + echo $" --usb-controller : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none'" + echo $" --sound-card : Set sound card. @Options: 'intel-hda' (default), 'ac97', 'es1370', 'sb16', 'usb-audio', 'none'" + echo $" --sound-duplex : Set sound card duplex. @Options: 'hda-micro' (default: speaker/mic), 'hda-duplex' (line-in/line-out), 'hda-output' (output-only)" + echo $" --extra_args : Pass additional arguments to qemu" + echo $" --version : Print version" } function display_param_check() { @@ -1675,12 +1683,12 @@ function display_param_check() { if [ "${OS_KERNEL}" == "Darwin" ]; then if [ "${display}" != "cocoa" ] && [ "${display}" != "none" ]; then - echo "ERROR! Requested output '${display}' but only 'cocoa' and 'none' are avalible on macOS." + echo $"ERROR! Requested output '${display}' but only 'cocoa' and 'none' are avalible on macOS." exit 1 fi else if [ "${display}" != "gtk" ] && [ "${display}" != "none" ] && [ "${display}" != "sdl" ] && [ "${display}" != "spice" ] && [ "${display}" != "spice-app" ]; then - echo "ERROR! Requested output '${display}' is not recognised." + echo $"ERROR! Requested output '${display}' is not recognised." exit 1 fi fi @@ -1708,29 +1716,29 @@ function display_param_check() { function ports_param_check() { if [ -n "${ssh_port}" ] && ! is_numeric "${ssh_port}"; then - echo "ERROR: ssh_port must be a number!" + echo $"ERROR: ssh_port must be a number!" exit 1 fi if [ -n "${spice_port}" ] && ! is_numeric "${spice_port}"; then - echo "ERROR: spice_port must be a number!" + echo $"ERROR: spice_port must be a number!" exit 1 fi if [ -n "${monitor_telnet_port}" ] && ! is_numeric "${monitor_telnet_port}"; then - echo "ERROR: telnet port must be a number!" + echo $"ERROR: telnet port must be a number!" exit 1 fi if [ -n "${serial_telnet_port}" ] && ! is_numeric "${serial_telnet_port}"; then - echo "ERROR: serial port must be a number!" + echo $"ERROR: serial port must be a number!" exit 1 fi } function sound_card_param_check() { if [ "${sound_card}" != "ac97" ] && [ "${sound_card}" != "es1370" ] && [ "${sound_card}" != "ich9-intel-hda" ] && [ "${sound_card}" != "intel-hda" ] && [ "${sound_card}" != "sb16" ] && [ "${sound_card}" != "usb-audio" ] && [ "${sound_card}" != "none" ]; then - echo "ERROR! Requested sound card '${sound_card}' is not recognised." + echo $"ERROR! Requested sound card '${sound_card}' is not recognised." exit 1 fi @@ -1743,7 +1751,7 @@ function sound_card_param_check() { #name "hda-micro", bus HDA, desc "HDA Audio Codec, duplex (speaker, microphone)" #name "hda-output", bus HDA, desc "HDA Audio Codec, output-only (line-out)" if [ "${sound_duplex}" != "hda-duplex" ] && [ "${sound_duplex}" != "hda-micro" ] && [ "${sound_duplex}" != "hda-output" ]; then - echo "ERROR! Requested sound duplex '${sound_duplex}' is not recognised." + echo $"ERROR! Requested sound duplex '${sound_duplex}' is not recognised." exit 1 fi } @@ -1752,7 +1760,7 @@ function tpm_param_check() { if [ "${tpm}" == "on" ]; then SWTPM=$(command -v swtpm) if [ ! -e "${SWTPM}" ]; then - echo "ERROR! TPM is enabled, but swtpm was not found." + echo $"ERROR! TPM is enabled, but swtpm was not found." exit 1 fi fi @@ -1764,14 +1772,14 @@ function viewer_param_check() { fi if [ "${viewer}" != "none" ] && [ "${viewer}" != "spicy" ] && [ "${viewer}" != "remote-viewer" ]; then - echo "ERROR! Requested viewer '${viewer}' is not recognised." + echo $"ERROR! Requested viewer '${viewer}' is not recognised." exit 1 fi if [ "${viewer}" == "spicy" ] && ! command -v spicy &>/dev/null; then - echo "ERROR! Requested 'spicy' as viewer, but 'spicy' is not installed." + echo $"ERROR! Requested 'spicy' as viewer, but 'spicy' is not installed." exit 1 elif [ "${viewer}" == "remote-viewer" ] && ! command -v remote-viewer &>/dev/null; then - echo "ERROR! Requested 'remote-viewer' as viewer, but 'remote-viewer' is not installed." + echo $"ERROR! Requested 'remote-viewer' as viewer, but 'remote-viewer' is not installed." exit 1 fi } @@ -1791,7 +1799,7 @@ function fileshare_param_check() { fi if [ ! -d "${PUBLIC}" ]; then - echo " - WARNING! Public directory: '${PUBLIC}' doesn't exist!" + echo $" - WARNING! Public directory: '${PUBLIC}' doesn't exist!" else PUBLIC_TAG="Public-${USER,,}" PUBLIC_PERMS=$(${STAT} -c "%A" "${PUBLIC}") @@ -1834,19 +1842,19 @@ function monitor_send_cmd { local MSG="${1}" if [ -z "${MSG}" ]; then - echo "WARNING! Send to QEMU-Monitor: Message empty!" + echo $"WARNING! Send to QEMU-Monitor: Message empty!" return 1 fi case "${monitor}" in socket) - echo -e " - Sending: via socket ${MSG}" + echo $-e " - Sending: via socket ${MSG}" echo -e "${MSG}" | socat -,shut-down unix-connect:"${SOCKET_MONITOR}" > /dev/null 2>&1;; telnet) - echo -e " - Sending: via telnet ${MSG}" + echo $-e " - Sending: via telnet ${MSG}" echo -e "${MSG}" | socat - tcp:"${monitor_telnet_host}":"${monitor_telnet_port}" > /dev/null 2>&1;; *) - echo "WARNING! No qemu-monitor channel available - Couldn't send message to monitor!" + echo $"WARNING! No qemu-monitor channel available - Couldn't send message to monitor!" return 1;; esac @@ -1927,7 +1935,7 @@ ARCH_HOST=$(uname -m) QEMU=$(command -v qemu-system-${ARCH_VM}) QEMU_IMG=$(command -v qemu-img) if [ ! -x "${QEMU}" ] || [ ! -x "${QEMU_IMG}" ]; then - echo "ERROR! QEMU not found. Please make sure 'qemu-system-${ARCH_VM}' and 'qemu-img' are installed." + echo $"ERROR! QEMU not found. Please make sure 'qemu-system-${ARCH_VM}' and 'qemu-img' are installed." exit 1 fi @@ -1945,7 +1953,7 @@ fi QEMU_VER_LONG=$(${QEMU_IMG} --version | head -n 1 | awk '{print $3}') QEMU_VER_SHORT=$(echo "${QEMU_VER_LONG//./}" | cut -c1-2) if [ "${QEMU_VER_SHORT}" -lt 60 ]; then - echo "ERROR! QEMU 6.0.0 or newer is required, detected ${QEMU_VER_LONG}." + echo $"ERROR! QEMU 6.0.0 or newer is required, detected ${QEMU_VER_LONG}." exit 1 fi @@ -1991,12 +1999,12 @@ else shift;; -snapshot|--snapshot) if [ -z "${2}" ]; then - echo "ERROR! '--snapshot' needs an action to perform." + echo $"ERROR! '--snapshot' needs an action to perform." exit 1 fi SNAPSHOT_ACTION="${2}" if [ -z "${3}" ] && [ "${SNAPSHOT_ACTION}" != "info" ]; then - echo "ERROR! '--snapshot ${SNAPSHOT_ACTION}' needs a tag." + echo $"ERROR! '--snapshot ${SNAPSHOT_ACTION}' needs a tag." exit 1 fi SNAPSHOT_TAG="${3}" @@ -2101,7 +2109,7 @@ else usage exit 0;; *) - echo "ERROR! \"${1}\" is not a supported parameter." + echo $"ERROR! \"${1}\" is not a supported parameter." usage exit 1;; esac @@ -2163,17 +2171,17 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then snapshot_info exit;; info) - echo "Snapshot information ${disk_img}" + echo $"Snapshot information ${disk_img}" snapshot_info exit;; *) - echo "ERROR! \"${SNAPSHOT_ACTION}\" is not a supported snapshot action." + echo $"ERROR! \"${SNAPSHOT_ACTION}\" is not a supported snapshot action." usage exit 1;; esac fi else - echo "ERROR! Virtual machine configuration not found." + echo $"ERROR! Virtual machine configuration not found." usage exit 1 fi @@ -2198,7 +2206,7 @@ if [ -z "${VM_PID}" ]; then fi else echo "${VMNAME}" - echo " - Process: Already running ${VM} as ${VMNAME} (${VM_PID})" + echo $" - Process: Already running ${VM} as ${VMNAME} (${VM_PID})" parse_ports_from_file start_viewer fi diff --git a/quickemu.pot b/quickemu.pot new file mode 100644 index 0000000..8efad1f --- /dev/null +++ b/quickemu.pot @@ -0,0 +1,570 @@ +#: quickemu:5 +msgid "Sorry, you need bash 4.0 or newer to run this script." +msgstr "" +#: quickemu:18 +msgid "ERROR! /etc/modprobe.d was not found, I don't know how to configure this system." +msgstr "" +#: quickemu:30 +msgid " - MSR: WARNING! Ignoring unhandled Model-Specific Registers is disabled." +msgstr "" +#: quickemu:34 +msgid " If you are unable to run macOS or Windows VMs then run the above 👆" +msgstr "" +#: quickemu:35 +msgid " This will enable ignoring of unhandled MSRs until you reboot the host." +msgstr "" +#: quickemu:36 +msgid " You can make this change permanent by running: 'quickemu --ignore-msrs-always'" +msgstr "" +#: quickemu:45 +msgid " - Deleted ${SHORTCUT_DIR}/${VMNAME}.desktop" +msgstr "" +#: quickemu:50 +msgid "Deleting ${VMNAME} virtual hard disk" +msgstr "" +#: quickemu:56 +msgid " - Deleted ${disk_img}" +msgstr "" +#: quickemu:59 +msgid " - ${disk_img} not found. Doing nothing." +msgstr "" +#: quickemu:64 +msgid "Deleting ${VMNAME} completely" +msgstr "" +#: quickemu:68 +msgid " - Deleted ${VM} and ${VMDIR}/" +msgstr "" +#: quickemu:71 +msgid " - ${VMDIR} not found. Doing nothing." +msgstr "" +#: quickemu:76 +msgid "Killing ${VMNAME}" +msgstr "" +#: quickemu:78 +msgid " - ${VMNAME} is not running." +msgstr "" +#: quickemu:82 +msgid " - ${VMNAME} (${VM_PID}) killed." +msgstr "" +#: quickemu:85 +msgid " - ${VMNAME} (${VM_PID}) was not killed." +msgstr "" +#: quickemu:88 +msgid " - ${VMNAME} has no ${VMDIR}/${VMNAME}.pid" +msgstr "" +#: quickemu:93 +msgid "Snapshot apply to ${disk_img}" +msgstr "" +#: quickemu:96 +msgid " - ERROR! No snapshot tag provided." +msgstr "" +#: quickemu:102 +msgid " - Applied snapshot '${TAG}' to ${disk_img}" +msgstr "" +#: quickemu:104 +msgid " - ERROR! Failed to apply snapshot '${TAG}' to ${disk_img}" +msgstr "" +#: quickemu:107 +msgid " - NOTE! ${disk_img} not found. Doing nothing." +msgstr "" +#: quickemu:112 +msgid "Snapshotting ${disk_img}" +msgstr "" +#: quickemu:115 +msgid "- ERROR! No snapshot tag provided." +msgstr "" +#: quickemu:121 +msgid " - Created snapshot '${TAG}' for ${disk_img}" +msgstr "" +#: quickemu:123 +msgid " - ERROR! Failed to create snapshot '${TAG}' for ${disk_img}" +msgstr "" +#: quickemu:126 +msgid " - NOTE! ${disk_img} not found. Doing nothing." +msgstr "" +#: quickemu:131 +msgid "Snapshot removal ${disk_img}" +msgstr "" +#: quickemu:134 +msgid " - ERROR! No snapshot tag provided." +msgstr "" +#: quickemu:140 +msgid " - Deleted snapshot '${TAG}' from ${disk_img}" +msgstr "" +#: quickemu:142 +msgid " - ERROR! Failed to delete snapshot '${TAG}' from ${disk_img}" +msgstr "" +#: quickemu:145 +msgid " - NOTE! ${disk_img} not found. Doing nothing." +msgstr "" +#: quickemu:181 +msgid " - USB: Host pass-through requested:" +msgstr "" +#: quickemu:189 +msgid " ! USB device ${VENDOR_ID}:${PRODUCT_ID} not found. Check your configuration" +msgstr "" +#: quickemu:192 +msgid " o ${USB_NAME} on bus ${USB_BUS} device ${USB_DEV} is accessible." +msgstr "" +#: quickemu:194 +msgid " x ${USB_NAME} on bus ${USB_BUS} device ${USB_DEV} needs permission changes:" +msgstr "" +#: quickemu:202 +msgid " ERROR! USB permission changes are required 👆" +msgstr "" +#: quickemu:215 +msgid "ERROR! Unable to determine the number of processing units." +msgstr "" +#: quickemu:236 +msgid "ERROR! Could not find macOS translation for ${INFO_NAME}" +msgstr "" +#: quickemu:314 +msgid "ERROR! ${VARS_IN} was not found. Please install edk2." +msgstr "" +#: quickemu:377 +msgid "ERROR! Intel VT-x support is required." +msgstr "" +#: quickemu:382 +msgid "ERROR! AMD SVM support is required." +msgstr "" +#: quickemu:424 +msgid "ERROR! macOS ${macos_release} requires a CPU with SSE 4.2 and AVX2 support." +msgstr "" +#: quickemu:425 +msgid " Try macOS Monterey or Big Sur." +msgstr "" +#: quickemu:435 +msgid "ERROR! macOS ${macos_release} requires a CPU with SSE 4.2 support." +msgstr "" +#: quickemu:445 +msgid "ERROR! macOS ${macos_release} requires a CPU with SSE 4.1 support." +msgstr "" +#: quickemu:550 +msgid " - CPU: ${HOST_CPU_MODEL}" +msgstr "" +#: quickemu:551 +msgid " - CPU VM: ${CPU_MODEL%%,*}, ${HOST_CPU_SOCKETS} Socket(s), ${GUEST_CPU_LOGICAL_CORES} Core(s), ${GUEST_CPU_THREADS} Thread(s)" +msgstr "" +#: quickemu:583 +msgid " - RAM VM: ${RAM_VM} RAM" +msgstr "" +#: quickemu:598 +msgid " ERROR! The guest virtual machine has been allocated insufficient RAM to run ${OS_PRETTY_NAME}." +msgstr "" +#: quickemu:599 +msgid " You can override the guest RAM allocation by adding 'ram=${min_ram}G' to ${VM}" +msgstr "" +#: quickemu:602 +msgid " WARNING! You have allocated less than the recommended amount of RAM to run ${OS_PRETTY_NAME}." +msgstr "" +#: quickemu:631 +msgid "ERROR! macOS ${MAC_MISSING} was not found." +msgstr "" +#: quickemu:632 +msgid " Use 'quickget' to download the required files." +msgstr "" +#: quickemu:703 +msgid "ERROR! SecureBoot was requested but no SecureBoot capable firmware was found." +msgstr "" +#: quickemu:705 +msgid "ERROR! EFI boot requested but no EFI firmware found." +msgstr "" +#: quickemu:707 +msgid " Please install OVMF firmware." +msgstr "" +#: quickemu:712 +msgid " - EFI: ERROR! EFI_EXTRA_VARS file ${EFI_EXTRA_VARS} does not exist." +msgstr "" +#: quickemu:720 +msgid " - EFI: ERROR! ${EFI_VARS} is not a regular file or not writeable." +msgstr "" +#: quickemu:721 +msgid " Deleting ${EFI_VARS}. Please re-run quickemu." +msgstr "" +#: quickemu:728 +msgid " - EFI: WARNING! ${EFI_CODE} is a symlink." +msgstr "" +#: quickemu:740 +msgid " - BOOT: ${BOOT_STATUS}" +msgstr "" +#: quickemu:796 +msgid " - Disk: ${disk_img} (${disk_size})" +msgstr "" +#: quickemu:802 +msgid "ERROR! ${preallocation} is an unsupported disk preallocation option." +msgstr "" +#: quickemu:814 +msgid "ERROR! Failed to create ${disk_img} using ${disk_format} format." +msgstr "" +#: quickemu:819 +msgid "ERROR! You haven't specified a .iso or .img image to boot from." +msgstr "" +#: quickemu:822 +msgid " Just created, booting from ${iso}${img}" +msgstr "" +#: quickemu:829 +msgid " Failed to get \\\"write\\\" lock. Is another process using the disk?" +msgstr "" +#: quickemu:834 +msgid " Disk integrity check failed. Please run qemu-img check --help." +msgstr "" +#: quickemu:845 +msgid " Looks unused, booting from ${iso}${img}" +msgstr "" +#: quickemu:847 +msgid "ERROR! You haven't specified a .iso or .img image to boot from." +msgstr "" +#: quickemu:867 +msgid " Existing disk state will be preserved, no writes will be committed." +msgstr "" +#: quickemu:872 +msgid " - Boot ISO: ${iso}" +msgstr "" +#: quickemu:874 +msgid " - Recovery: ${img}" +msgstr "" +#: quickemu:878 +msgid " - CD-ROM: ${fixed_iso}" +msgstr "" +#: quickemu:950 +msgid " - Display: ${display^^}, ${DISPLAY_DEVICE}, GL (${gl}), VirGL (on)" +msgstr "" +#: quickemu:952 +msgid " - Display: ${display^^}, ${DISPLAY_DEVICE}, GL (${gl}), VirGL (off)" +msgstr "" +#: quickemu:997 +msgid " - Sound: ${sound_card} (${sound_duplex})" +msgstr "" +#: quickemu:1011 +msgid " - ssh: On host: ssh user@localhost -p ${ssh_port}" +msgstr "" +#: quickemu:1013 +msgid " - ssh: All ssh ports have been exhausted." +msgstr "" +#: quickemu:1018 +msgid " - PORTS: Port forwards requested:" +msgstr "" +#: quickemu:1055 +msgid " - SPICE: All SPICE ports have been exhausted." +msgstr "" +#: quickemu:1057 +msgid " ERROR! Requested SPICE display, but no SPICE ports are free." +msgstr "" +#: quickemu:1062 +msgid " - SPICE: Enabled" +msgstr "" +#: quickemu:1083 +msgid " - WebDAV: On guest: build spice-webdavd (https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24)" +msgstr "" +#: quickemu:1084 +msgid " - WebDAV: On guest: Finder -> Connect to Server -> http://localhost:9843/" +msgstr "" +#: quickemu:1086 +msgid " - WebDAV: On guest: dav://localhost:9843/" +msgstr "" +#: quickemu:1091 +msgid " - 9P: On guest: " +msgstr "" +#: quickemu:1099 +msgid " - 9P: On host: chmod 777 ${PUBLIC}" +msgstr "" +#: quickemu:1100 +msgid " Required for macOS integration 👆" +msgstr "" +#: quickemu:1110 +msgid " - smbd: On guest: smb://10.0.2.4/qemu" +msgstr "" +#: quickemu:1127 +msgid " - TPM: ${VMDIR}/${VMNAME}.swtpm-sock (${!})" +msgstr "" +#: quickemu:1180 +msgid "Quickemu ${VERSION} using ${QEMU} v${QEMU_VER_LONG}" +msgstr "" +#: quickemu:1181 +msgid " - Host: ${OS_RELEASE} running ${KERNEL_NAME} ${KERNEL_VER} ${KERNEL_NODE}" +msgstr "" +#: quickemu:1259 +msgid " - WARNING! ${QEMU} or SPICE was not compiled with support for smartcard devices" +msgstr "" +#: quickemu:1274 +msgid " - WARNING! Unknown usb-controller value: '${usb_controller}'" +msgstr "" +#: quickemu:1289 +msgid " - WARNING! Unknown keyboard value: '${keyboard}'; Fallback to ps2" +msgstr "" +#: quickemu:1306 +msgid " - WARNING! ${QEMU} does not support -chardev braille " +msgstr "" +#: quickemu:1325 +msgid " - WARNING! Unknown mouse value: '${mouse}'; Falling back to ps2" +msgstr "" +#: quickemu:1340 +msgid " - Network: Disabled" +msgstr "" +#: quickemu:1343 +msgid " - Network: Restricted (${NET_DEVICE})" +msgstr "" +#: quickemu:1348 +msgid " - Network: Bridged (${network})" +msgstr "" +#: quickemu:1359 +msgid " - Network: User (${NET_DEVICE})" +msgstr "" +#: quickemu:1476 +msgid " - Monitor: (off)" +msgstr "" +#: quickemu:1481 +msgid " - Monitor: All Monitor-Telnet ports have been exhausted." +msgstr "" +#: quickemu:1486 +msgid " - Monitor: On host: telnet ${monitor_telnet_host} ${monitor_telnet_port}" +msgstr "" +#: quickemu:1493 +msgid " - Monitor: On host: socat -,echo=0,icanon=0 unix-connect:${SOCKET_MONITOR}" +msgstr "" +#: quickemu:1495 +msgid " - Monitor: On host: nc -U \\\"${SOCKET_MONITOR}\\\"" +msgstr "" +#: quickemu:1498 +msgid "ERROR! \\\"${monitor}\\\" is an unknown monitor option." +msgstr "" +#: quickemu:1504 +msgid " - Serial: (off)" +msgstr "" +#: quickemu:1509 +msgid " - Serial: All Serial Telnet ports have been exhausted." +msgstr "" +#: quickemu:1514 +msgid " - Serial: On host: telnet ${serial_telnet_host} ${serial_telnet_port}" +msgstr "" +#: quickemu:1521 +msgid " - Serial: On host: socat -,echo=0,icanon=0 unix-connect:${SOCKET_SERIAL}" +msgstr "" +#: quickemu:1523 +msgid " - Serial: On host: nc -U \\\"${SOCKET_SERIAL}\\\"" +msgstr "" +#: quickemu:1526 +msgid "ERROR! \\\"${serial}\\\" is an unknown serial option." +msgstr "" +#: quickemu:1550 +msgid " - Process: Started ${VM} as ${VMNAME} (${VM_PID})" +msgstr "" +#: quickemu:1552 +msgid " - Process: ERROR! Failed to start ${VM} as ${VMNAME}" +msgstr "" +#: quickemu:1568 +msgid " - Viewer: ${viewer} --title \\\"${VMNAME}\\\" --spice-shared-dir \\\"${PUBLIC}\\\" ${FULLSCREEN} \\\"spice://localhost:${spice_port}\\\" >/dev/null 2>&1 &" +msgstr "" +#: quickemu:1572 +msgid " - Viewer: ${viewer} --title \\\"${VMNAME}\\\" ${FULLSCREEN} \\\"spice://localhost:${spice_port}\\\" >/dev/null 2>&1 &" +msgstr "" +#: quickemu:1579 +msgid " - Viewer: ${viewer} --title \\\"${VMNAME}\\\" --port \\\"${spice_port}\\\" --spice-shared-dir \\\"${PUBLIC}\\\" \\\"${FULLSCREEN}\\\" >/dev/null 2>&1 &" +msgstr "" +#: quickemu:1583 +msgid " - Viewer: ${viewer} --title \\\"${VMNAME}\\\" --port \\\"${spice_port}\\\" \\\"${FULLSCREEN}\\\" >/dev/null 2>&1 &" +msgstr "" +#: quickemu:1589 +msgid "WARNING! Could not start viewer (${viewer}) Err: ${errno}" +msgstr "" +#: quickemu:1598 +msgid "Creating ${VMNAME} desktop shortcut file" +msgstr "" +#: quickemu:1613 +msgid " - ${filename} created." +msgstr "" +#: quickemu:1622 +msgid " |_| v${VERSION}, using qemu ${QEMU_VER_LONG}" +msgstr "" +#: quickemu:1624 +msgid " Project - https://github.com/quickemu-project/quickemu" +msgstr "" +#: quickemu:1628 +msgid "Usage" +msgstr "" +#: quickemu:1629 +msgid " ${LAUNCHER} --vm ubuntu.conf " +msgstr "" +#: quickemu:1631 +msgid "Arguments" +msgstr "" +#: quickemu:1632 +msgid " --access : Enable remote spice access support. 'local' (default), 'remote', 'clientipaddress'" +msgstr "" +#: quickemu:1633 +msgid " --braille : Enable braille support. Requires SDL." +msgstr "" +#: quickemu:1634 +msgid " --delete-disk : Delete the disk image and EFI variables" +msgstr "" +#: quickemu:1635 +msgid " --delete-vm : Delete the entire VM and its configuration" +msgstr "" +#: quickemu:1636 +msgid " --display : Select display backend. 'sdl' (default), 'cocoa', 'gtk', 'none', 'spice' or 'spice-app'" +msgstr "" +#: quickemu:1637 +msgid " --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit)" +msgstr "" +#: quickemu:1638 +msgid " --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers" +msgstr "" +#: quickemu:1639 +msgid " --kill : Kill the VM process if it is running" +msgstr "" +#: quickemu:1640 +msgid " --offline : Override all network settings and start the VM offline" +msgstr "" +#: quickemu:1641 +msgid " --shortcut : Create a desktop shortcut" +msgstr "" +#: quickemu:1642 +msgid " --snapshot apply : Apply/restore a snapshot." +msgstr "" +#: quickemu:1643 +msgid " --snapshot create : Create a snapshot." +msgstr "" +#: quickemu:1644 +msgid " --snapshot delete : Delete a snapshot." +msgstr "" +#: quickemu:1645 +msgid " --snapshot info : Show disk/snapshot info." +msgstr "" +#: quickemu:1646 +msgid " --status-quo : Do not commit any changes to disk/snapshot." +msgstr "" +#: quickemu:1647 +msgid " --viewer : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none'" +msgstr "" +#: quickemu:1648 +msgid " --width : Set VM screen width; requires '--height'" +msgstr "" +#: quickemu:1649 +msgid " --height : Set VM screen height; requires '--width'" +msgstr "" +#: quickemu:1650 +msgid " --ssh-port : Set SSH port manually" +msgstr "" +#: quickemu:1651 +msgid " --spice-port : Set SPICE port manually" +msgstr "" +#: quickemu:1652 +msgid " --public-dir : Expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '', 'none'" +msgstr "" +#: quickemu:1653 +msgid " --monitor : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'" +msgstr "" +#: quickemu:1654 +msgid " --monitor-telnet-host : Set telnet host for monitor. (default: 'localhost')" +msgstr "" +#: quickemu:1655 +msgid " --monitor-telnet-port : Set telnet port for monitor. (default: '4440')" +msgstr "" +#: quickemu:1656 +msgid " --monitor-cmd : Send command to monitor if available. (Example: system_powerdown)" +msgstr "" +#: quickemu:1657 +msgid " --serial : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none'" +msgstr "" +#: quickemu:1658 +msgid " --serial-telnet-host : Set telnet host for serial. (default: 'localhost')" +msgstr "" +#: quickemu:1659 +msgid " --serial-telnet-port : Set telnet port for serial. (default: '6660')" +msgstr "" +#: quickemu:1660 +msgid " --keyboard : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio'" +msgstr "" +#: quickemu:1661 +msgid " --keyboard_layout : Set keyboard layout: 'en-us' (default)" +msgstr "" +#: quickemu:1662 +msgid " --mouse : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio'" +msgstr "" +#: quickemu:1663 +msgid " --usb-controller : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none'" +msgstr "" +#: quickemu:1664 +msgid " --sound-card : Set sound card. @Options: 'intel-hda' (default), 'ac97', 'es1370', 'sb16', 'usb-audio', 'none'" +msgstr "" +#: quickemu:1665 +msgid " --sound-duplex : Set sound card duplex. @Options: 'hda-micro' (default: speaker/mic), 'hda-duplex' (line-in/line-out), 'hda-output' (output-only)" +msgstr "" +#: quickemu:1666 +msgid " --extra_args : Pass additional arguments to qemu" +msgstr "" +#: quickemu:1667 +msgid " --version : Print version" +msgstr "" +#: quickemu:1678 +msgid "ERROR! Requested output '${display}' but only 'cocoa' and 'none' are avalible on macOS." +msgstr "" +#: quickemu:1683 +msgid "ERROR! Requested output '${display}' is not recognised." +msgstr "" +#: quickemu:1711 +msgid "ERROR: ssh_port must be a number!" +msgstr "" +#: quickemu:1716 +msgid "ERROR: spice_port must be a number!" +msgstr "" +#: quickemu:1721 +msgid "ERROR: telnet port must be a number!" +msgstr "" +#: quickemu:1726 +msgid "ERROR: serial port must be a number!" +msgstr "" +#: quickemu:1733 +msgid "ERROR! Requested sound card '${sound_card}' is not recognised." +msgstr "" +#: quickemu:1746 +msgid "ERROR! Requested sound duplex '${sound_duplex}' is not recognised." +msgstr "" +#: quickemu:1755 +msgid "ERROR! TPM is enabled, but swtpm was not found." +msgstr "" +#: quickemu:1767 +msgid "ERROR! Requested viewer '${viewer}' is not recognised." +msgstr "" +#: quickemu:1771 +msgid "ERROR! Requested 'spicy' as viewer, but 'spicy' is not installed." +msgstr "" +#: quickemu:1774 +msgid "ERROR! Requested 'remote-viewer' as viewer, but 'remote-viewer' is not installed." +msgstr "" +#: quickemu:1794 +msgid " - WARNING! Public directory: '${PUBLIC}' doesn't exist!" +msgstr "" +#: quickemu:1837 +msgid "WARNING! Send to QEMU-Monitor: Message empty!" +msgstr "" +#: quickemu:1849 +msgid "WARNING! No qemu-monitor channel available - Couldn't send message to monitor!" +msgstr "" +#: quickemu:1930 +msgid "ERROR! QEMU not found. Please make sure 'qemu-system-${ARCH_VM}' and 'qemu-img' are installed." +msgstr "" +#: quickemu:1948 +msgid "ERROR! QEMU 6.0.0 or newer is required, detected ${QEMU_VER_LONG}." +msgstr "" +#: quickemu:1994 +msgid "ERROR! '--snapshot' needs an action to perform." +msgstr "" +#: quickemu:1999 +msgid "ERROR! '--snapshot ${SNAPSHOT_ACTION}' needs a tag." +msgstr "" +#: quickemu:2104 +msgid "ERROR! \\\"${1}\\\" is not a supported parameter." +msgstr "" +#: quickemu:2166 +msgid "Snapshot information ${disk_img}" +msgstr "" +#: quickemu:2170 +msgid "ERROR! \\\"${SNAPSHOT_ACTION}\\\" is not a supported snapshot action." +msgstr "" +#: quickemu:2176 +msgid "ERROR! Virtual machine configuration not found." +msgstr "" +#: quickemu:2201 +msgid " - Process: Already running ${VM} as ${VMNAME} (${VM_PID})" +msgstr "" diff --git a/quickget b/quickget index 5b03708..f4b388a 100755 --- a/quickget +++ b/quickget @@ -3,6 +3,14 @@ # - https://www.shellcheck.net/wiki/SC2317 # - Disable globally because many functions are called indirectly # shellcheck disable=SC2317 + +export TEXTDOMAIN=quickget +if [[ -n $Q_DEBUG ]]; then + export TEXTDOMAINDIR="${PWD}/locale" +else + export TEXTDOMAINDIR=/usr/share/locale +fi + export LC_ALL=C function cleanup() { @@ -16,13 +24,13 @@ function show_os_info() { . "public/${1}" echo echo " ${PRETTY}" - echo " Website: ${HOMEPAGE}" - echo " Based of: ${BASEDOF}" - echo "Description: ${DESCRIPTION}" - echo "Credentials: ${CREDENTIALS}" - echo "Releases: ${RELEASES}" | fmt -w 80 + echo $" Website: ${HOMEPAGE}" + echo $" Based of: ${BASEDOF}" + echo $"Description: ${DESCRIPTION}" + echo $"Credentials: ${CREDENTIALS}" + echo $"Releases: ${RELEASES}" | fmt -w 80 if [[ $(type -t "editions_") == function ]]; then - echo -n "Editions: ${EDITIONS}" | fmt -w 80 + echo -n $"Editions: ${EDITIONS}" | fmt -w 80 fi } @@ -37,16 +45,16 @@ function os_support() { } function error_specify_os() { - echo "ERROR! You must specify an operating system." - echo "- Supported Operating Systems:" + echo $"ERROR! You must specify an operating system." + echo $"- Supported Operating Systems:" os_support | fmt -w 80 - echo -e "\nTo see all possible arguments, use:\n quickget -h or quickget --help" + echo -e $"\nTo see all possible arguments, use:\n quickget -h or quickget --help" exit 1 } function os_supported() { if [[ ! "$(os_support)" =~ ${OS} ]]; then - echo -e "ERROR! ${OS} is not a supported OS.\n" + echo -e $"ERROR! ${OS} is not a supported OS.\n" os_support | fmt -w 80 exit 1 fi @@ -54,22 +62,22 @@ function os_supported() { function error_specify_release() { show_os_info "${OS}" - echo -e "\nERROR! You must specify a release." + echo -e $"\nERROR! You must specify a release." exit 1 } function error_not_supported_release() { if [[ ! "${RELEASES[*]}" =~ ${RELEASE} ]]; then - echo -e "ERROR! ${DISPLAY_NAME} ${RELEASE} is not a supported release.\n" - echo -n ' - Supported releases: ' + echo -e $"ERROR! ${DISPLAY_NAME} ${RELEASE} is not a supported release.\n" + echo -n $' - Supported releases: ' releases_ exit 1 fi } function error_not_supported_lang() { - echo -e "ERROR! ${I18N} is not a supported ${PRETTY} language\n" - echo -n ' - Editions: ' + echo -e $"ERROR! ${I18N} is not a supported ${PRETTY} language\n" + echo -n $' - Editions: ' for I18N in "${I18NS[@]}"; do echo -n "${I18N} " done @@ -77,12 +85,22 @@ function error_not_supported_lang() { } function error_not_supported_argument() { - echo "ERROR! Not supported argument" - echo "To see all possible arguments, use:" + echo $"ERROR! Not supported argument" + echo $"To see all possible arguments, use:" echo " quickget -h or quickget --help" exit 1 } +function error_unable_to_create_dir() { + echo $"ERROR! Unable to create directory ${DIR}" + exit 1 +} + +function error_not_supported_image() { + echo $"ERROR! Only ISO,IMG and QCOW2 file types are supported for --create-config" + exit 1 +} + function is_valid_language() { local I18N="" local PASSED_I18N="${1}" @@ -105,8 +123,8 @@ function handle_missing() { NRELEASE="${RELEASE}" fi if [[ "${NRELEASE}" -lt 40 && "${EDITION}" == "Onyx" ]] || [[ "${NRELEASE}" -lt 40 && "${EDITION}" == "Sericea" ]]; then - echo "ERROR! Unsupported combination" - echo " Fedora ${RELEASE} ${EDITION} is not available, please choose another Release or Edition" + echo $"ERROR! Unsupported combination" + echo $" Fedora ${RELEASE} ${EDITION} is not available, please choose another Release or Edition" exit 1 fi;; esac @@ -205,7 +223,7 @@ list_isos() { if [ -n "${URL}" ]; then echo "${OS}|${RELEASE}|${OPTION}|" else - echo "${OS}|${RELEASE}|${OPTION}|Strange!" + echo "${OS}|${RELEASE}|${OPTION}|Strange!" #TODO fi done elif [[ "${OS}" == "macos" ]]; then @@ -338,6 +356,7 @@ function test_all() { fi done elif [[ "${OS}" == "windows"* ]]; then + . "actions/${OS}" languages_ for I18N in "${I18NS[@]}"; do validate_release releases_ @@ -385,16 +404,16 @@ function check_hash() { 40) hash_algo=sha1sum;; 64) hash_algo=sha256sum;; 128) hash_algo=sha512sum;; - *) echo "WARNING! Can't guess hash algorithm, not checking ${iso} hash." + *) echo $"WARNING! Can't guess hash algorithm, not checking ${iso} hash." return;; esac - echo -n "Checking ${iso} with ${hash_algo}... " + echo -n $"Checking ${iso} with ${hash_algo}... " if ! echo "${hash} ${iso}" | ${hash_algo} --check --status; then - echo "ERROR!" - echo "${iso} doesn't match ${hash}. Try running 'quickget' again." + echo $"ERROR!" + echo $"${iso} doesn't match ${hash}. Try running 'quickget' again." exit 1 else - echo "Good!" + echo $"Good!" fi } @@ -449,17 +468,16 @@ function web_get() { fi if [ "${DIR}" != "$(pwd)" ] && ! mkdir -p "${DIR}" 2>/dev/null; then - echo "ERROR! Unable to create directory ${DIR}" - exit 1 + error_unable_to_create_dir fi if [[ ${OS} != windows && ${OS} != macos && ${OS} != windows-server ]]; then - echo "Downloading ${PRETTY} ${RELEASE} ${EDITION}" - echo "- URL: ${URL}" + echo $"Downloading ${PRETTY} ${RELEASE} ${EDITION}" + echo $"- URL: ${URL}" fi if ! curl --disable --progress-bar --location --output "${DIR}/${FILE}" --continue-at - --user-agent "${USER_AGENT}" "${HEADERS[@]}" -- "${URL}"; then - echo "ERROR! Failed to download ${URL} with curl." + echo $"ERROR! Failed to download ${URL} with curl." rm -f "${DIR}/${FILE}" fi } @@ -516,13 +534,12 @@ function zsync_get() { fi if ! mkdir -p "${DIR}" 2>/dev/null; then - echo "ERROR! Unable to create directory ${DIR}" - exit 1 + error_unable_to_create_dir fi - echo "Downloading ${PRETTY} ${RELEASE} ${EDITION} from ${URL}" + echo $"Downloading ${PRETTY} ${RELEASE} ${EDITION} from ${URL}" # Only force http for zsync - not earlier because we might fall through here if ! zsync "${URL/https/http}.zsync" -i "${DIR}/${OUT}" -o "${DIR}/${OUT}" 2>/dev/null; then - echo "ERROR! Failed to download ${URL/https/http}.zsync" + echo $"ERROR! Failed to download ${URL/https/http}.zsync" exit 1 fi @@ -530,7 +547,7 @@ function zsync_get() { rm "${DIR}/${OUT}.zs-old" fi else - echo "INFO: zsync not found, falling back to curl" + echo $"INFO: zsync not found, falling back to curl" if [ -n "${3}" ]; then web_get "${1}" "${2}" "${3}" else @@ -617,14 +634,14 @@ function make_vm_config() { CONF_FILE="${VM_PATH}.conf" if [ ! -e "${CONF_FILE}" ]; then - echo "Making ${CONF_FILE}" + echo $"Making ${CONF_FILE}" cat << EOF > "${CONF_FILE}" #!${QUICKEMU} --vm guest_os="${GUEST}" disk_img="${VM_PATH}/disk.qcow2" ${IMAGE_TYPE}="${VM_PATH}/${IMAGE_FILE}" EOF - echo " - Setting ${CONF_FILE} executable" + echo $" - Setting ${CONF_FILE} executable" chmod u+x "${CONF_FILE}" if [ -n "${ISO_FILE}" ]; then echo "fixed_iso=\"${VM_PATH}/${ISO_FILE}\"" >> "${CONF_FILE}" @@ -724,12 +741,12 @@ EOF fi if [ "${OPERATION}" == ui ]; then echo - gum confirm "Run new ${OS} VM?" && quickemu --vm "${CONF_FILE}" + gum confirm $"Run new ${OS} VM?" && quickemu --vm "${CONF_FILE}" fi fi - echo -e "\nTo start your ${PRETTY} virtual machine run:" + echo -e $"\nTo start your ${PRETTY} virtual machine run:" if [ "${OS}" == "slint" ]; then - echo -e " quickemu --vm ${CONF_FILE}\nTo start Slint with braille support run:\n quickemu --vm --braille --display sdl ${CONF_FILE}" + echo -e $" quickemu --vm ${CONF_FILE}\nTo start Slint with braille support run:\n quickemu --vm --braille --display sdl ${CONF_FILE}" else echo " quickemu --vm ${CONF_FILE}" fi @@ -792,7 +809,7 @@ function create_vm() { fi;; kolibrios) if [[ ${ISO} = *".7z" ]]; then - if [ -z "$(command -v 7z)" ]; then echo "ERROR! '7zip' needs installing. Unable to extract file." + if [ -z "$(command -v 7z)" ]; then echo $"ERROR! '7zip' needs installing. Unable to extract file." else 7z e "${VM_PATH}/${ISO}" -o"${VM_PATH}" >/dev/null 2>&1 rm -f "${VM_PATH}/${ISO}" @@ -815,7 +832,7 @@ function create_vm() { if [[ ${ISO} =~ ".img" ]]; then QEMU_IMG=$(command -v qemu-img) if [ ! -x "${QEMU_IMG}" ]; then - echo "ERROR! qemu-img not found. Please make sure qemu-img is installed." + echo $"ERROR! qemu-img not found. Please make sure qemu-img is installed." exit 1 fi qemu-img convert -f raw -O qcow2 "${VM_PATH}/${ISO}" "${VM_PATH}/disk.qcow2" @@ -835,7 +852,7 @@ function create_config() { OS="custom" if ! mkdir "${VM_PATH}" 2>/dev/null; then - echo "WARNING! This will overwrite content of directory: ${VM_PATH}" + echo $"WARNING! This will overwrite content of directory: ${VM_PATH}" fi if [[ "${INPUT}" == "http://"* ]] || [[ "${INPUT}" == "https://"* ]]; then INPUT="$(web_redirect "${INPUT}")" @@ -843,30 +860,30 @@ function create_config() { web_get "${INPUT}" "${VM_PATH}" INPUT="${INPUT##*/}" else - echo "ERROR! Only ISO,IMG and QCOW2 file types are supported for --create-config" - exit 1 + error_not_supported_image fi fi - + function moving_image() { + echo $"Moving image to VM dir" + } if [ ! -f "${INPUT}" ]; then - echo "ERROR! The input must be a valid URL or path to an ISO, IMG, or QCOW2 file." + echo $"ERROR! The input must be a valid URL or path to an ISO, IMG, or QCOW2 file." echo "#TODO exit 1" elif [[ "${INPUT}" == *".iso" ]]; then - echo "Moving image to VM dir" && mv "${INPUT}" "${VM_PATH}" + moving_image && mv "${INPUT}" "${VM_PATH}" CUSTOM_IMAGE_TYPE="iso" elif [[ "${INPUT}" == *".img" ]]; then - echo "Moving image to VM dir" && mv "${INPUT}" "${VM_PATH}" + moving_image && mv "${INPUT}" "${VM_PATH}" CUSTOM_IMAGE_TYPE="img" elif [[ "${INPUT}" == *".qcow2" ]]; then - echo "Moving image to VM dir" && mv "${INPUT}" "${VM_PATH}/disk.qcow2" + moving_image && mv "${INPUT}" "${VM_PATH}/disk.qcow2" CUSTOM_IMAGE_TYPE="qcow2" else - echo "ERROR! Only ISO,IMG and QCOW2 file types are supported for --create-config" - exit 1 + error_not_supported_image fi INPUT="$(basename "${INPUT}")" - echo "Creating custom VM config for ${INPUT##*/}." + echo $"Creating custom VM config for ${INPUT##*/}." case "${INPUT,,}" in *freebsd*) CUSTOM_OS="freebsd";; *kolibrios*) CUSTOM_OS="kolibrios";; @@ -876,9 +893,9 @@ function create_config() { CUSTOM_OS="windows" # Older windows 10 ISOs use the year followed by the month rather than the year & half). Match any text for language. if [ "${3}" != "--disable-unattended" ] && ( [ "${3}" == "--unattended" ] || grep -E -q 'Win(10|11)_([0-9]{2}H(1|2)|[0-9]{4})_[^.]*?(x64|x32)(v[0-9])?.iso' <<< "${INPUT}" ); then - echo "Creating unattended Windows installation files. To disable, pass --disable-unattended" + echo $"Creating unattended Windows installation files. To disable, pass --disable-unattended" echo - echo "Downloading VirtIO drivers..." + echo $"Downloading VirtIO drivers..." web_get "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso" "${VM_PATH}" FIXED_ISO="virtio-win.iso" rm -f "${VM_PATH}/unattended.iso" @@ -887,7 +904,7 @@ function create_config() { ;; *) CUSTOM_OS="linux";; esac - echo -e "Selecting OS: ${CUSTOM_OS}. If this is incorrect, please modify the config file to include the correct OS.\n" + echo -e $"Selecting OS: ${CUSTOM_OS}. If this is incorrect, please modify the config file to include the correct OS.\n" make_vm_config "${INPUT}" "${FIXED_ISO}" } @@ -898,7 +915,7 @@ function resolve_quickemu() { if [ -x "./quickemu" ]; then echo "$(pwd)/quickemu" else - echo "quickemu not found" >&2 + echo $"quickemu not found" >&2 exit 1 fi } @@ -924,8 +941,8 @@ run_itself() { if [ -n "${3}" ]; then EDITION="${3}" if [[ ! "${EDITIONS[*]}" = *"${EDITION}"* ]]; then - echo -e "ERROR! ${EDITION} is not a supported ${PRETTY} edition\n" - echo -n ' - Supported editions: ' + echo -e $"ERROR! ${EDITION} is not a supported ${PRETTY} edition\n" + echo -n $' - Supported editions: ' for EDITION in "${EDITIONS[@]}"; do echo -n "${EDITION} " done @@ -934,7 +951,7 @@ run_itself() { fi else show_os_info "${OS}" - echo -e "\nERROR! You must specify an edition." + echo -e $"\nERROR! You must specify an edition." exit 1 fi handle_missing @@ -955,7 +972,7 @@ run_itself() { get_ elif [[ "${OS}" == "windows"* ]]; then I18N="English International" - languages_ + languages_"${OS}" if [ -n "${3}" ]; then I18N="${3}" if [[ ! "${I18NS[*]}" = *"${I18N}"* ]]; then @@ -977,7 +994,7 @@ run_itself() { # shellcheck disable=SC2046 function run_ui() { if ! command -v gum &> /dev/null; then - echo "gum could not be found, please install it first" + echo $"gum could not be found, please install it first" exit 1 fi OS=$(gum filter --height=17 --header="Select an OS:" $(os_support)) @@ -1043,7 +1060,7 @@ Supported Operating Systems:\n\n' "$(${QUICKEMU} --version)" "${CURL_VERSION}" trap cleanup EXIT if ((BASH_VERSINFO[0] < 4)); then - echo "Sorry, you need bash 4.0 or newer to run this script." + echo $"Sorry, you need bash 4.0 or newer to run this script." exit 1 fi @@ -1052,7 +1069,7 @@ I18NS=() OPERATION="" CURL=$(command -v curl) if [ ! -x "${CURL}" ]; then - echo "ERROR! curl not found. Please install curl" + echo $"ERROR! curl not found. Please install curl" exit 1 fi CURL_VERSION=$("${CURL}" --version | head -n 1 | cut -d' ' -f2) diff --git a/quickget.pot b/quickget.pot new file mode 100644 index 0000000..a33af9c --- /dev/null +++ b/quickget.pot @@ -0,0 +1,162 @@ +#: quickget:19 +msgid " Website: ${HOMEPAGE}" +msgstr "" +#: quickget:20 +msgid " Based of: ${BASEDOF}" +msgstr "" +#: quickget:21 +msgid "Description: ${DESCRIPTION}" +msgstr "" +#: quickget:22 +msgid "Credentials: ${CREDENTIALS}" +msgstr "" +#: quickget:23 +msgid "Releases: ${RELEASES}" +msgstr "" +#: quickget:25 +msgid "Editions: ${EDITIONS}" +msgstr "" +#: quickget:40 +msgid "ERROR! You must specify an operating system." +msgstr "" +#: quickget:41 +msgid "- Supported Operating Systems:" +msgstr "" +#: quickget:43 +msgid "\\nTo see all possible arguments, use:\\n quickget -h or quickget --help" +msgstr "" +#: quickget:49 +msgid "ERROR! ${OS} is not a supported OS.\\n" +msgstr "" +#: quickget:57 +msgid "\\nERROR! You must specify a release." +msgstr "" +#: quickget:63 +msgid "ERROR! ${DISPLAY_NAME} ${RELEASE} is not a supported release.\\n" +msgstr "" +#: quickget:71 +msgid "ERROR! ${I18N} is not a supported ${PRETTY} language\\n" +msgstr "" +#: quickget:80 +msgid "ERROR! Not supported argument" +msgstr "" +#: quickget:81 +msgid "To see all possible arguments, use:" +msgstr "" +#: quickget:108 +msgid "ERROR! Unsupported combination" +msgstr "" +#: quickget:109 +msgid " Fedora ${RELEASE} ${EDITION} is not available, please choose another Release or Edition" +msgstr "" +#: quickget:389 +msgid "WARNING! Can't guess hash algorithm, not checking ${iso} hash." +msgstr "" +#: quickget:392 +msgid "Checking ${iso} with ${hash_algo}... " +msgstr "" +#: quickget:394 +msgid "ERROR!" +msgstr "" +#: quickget:395 +msgid "${iso} doesn't match ${hash}. Try running 'quickget' again." +msgstr "" +#: quickget:398 +msgid "Good!" +msgstr "" +#: quickget:453 +msgid "ERROR! Unable to create directory ${DIR}" +msgstr "" +#: quickget:458 +msgid "Downloading ${PRETTY} ${RELEASE} ${EDITION}" +msgstr "" +#: quickget:459 +msgid "- URL: ${URL}" +msgstr "" +#: quickget:463 +msgid "ERROR! Failed to download ${URL} with curl." +msgstr "" +#: quickget:520 +msgid "ERROR! Unable to create directory ${DIR}" +msgstr "" +#: quickget:523 +msgid "Downloading ${PRETTY} ${RELEASE} ${EDITION} from ${URL}" +msgstr "" +#: quickget:526 +msgid "ERROR! Failed to download ${URL/https/http}.zsync" +msgstr "" +#: quickget:534 +msgid "INFO: zsync not found, falling back to curl" +msgstr "" +#: quickget:621 +msgid "Making ${CONF_FILE}" +msgstr "" +#: quickget:628 +msgid " - Setting ${CONF_FILE} executable" +msgstr "" +#: quickget:728 +msgid "Run new ${OS} VM?" +msgstr "" +#: quickget:731 +msgid "\\nTo start your ${PRETTY} virtual machine run:" +msgstr "" +#: quickget:733 +msgid " quickemu --vm ${CONF_FILE}\\nTo start Slint with braille support run:\\n quickemu --vm --braille --display sdl ${CONF_FILE}" +msgstr "" +#: quickget:796 +msgid "ERROR! '7zip' needs installing. Unable to extract file." +msgstr "" +#: quickget:819 +msgid "ERROR! qemu-img not found. Please make sure qemu-img is installed." +msgstr "" +#: quickget:839 +msgid "WARNING! This will overwrite content of directory: ${VM_PATH}" +msgstr "" +#: quickget:847 +msgid "ERROR! Only ISO,IMG and QCOW2 file types are supported for --create-config" +msgstr "" +#: quickget:853 +msgid "ERROR! The input must be a valid URL or path to an ISO, IMG, or QCOW2 file." +msgstr "" +#: quickget:856 +msgid "Moving image to VM dir" +msgstr "" +#: quickget:859 +msgid "Moving image to VM dir" +msgstr "" +#: quickget:862 +msgid "Moving image to VM dir" +msgstr "" +#: quickget:865 +msgid "ERROR! Only ISO,IMG and QCOW2 file types are supported for --create-config" +msgstr "" +#: quickget:870 +msgid "Creating custom VM config for ${INPUT##*/}." +msgstr "" +#: quickget:880 +msgid "Creating unattended Windows installation files. To disable, pass --disable-unattended" +msgstr "" +#: quickget:882 +msgid "Downloading VirtIO drivers..." +msgstr "" +#: quickget:891 +msgid "Selecting OS: ${CUSTOM_OS}. If this is incorrect, please modify the config file to include the correct OS.\\n" +msgstr "" +#: quickget:902 +msgid "quickemu not found" +msgstr "" +#: quickget:928 +msgid "ERROR! ${EDITION} is not a supported ${PRETTY} edition\\n" +msgstr "" +#: quickget:938 +msgid "\\nERROR! You must specify an edition." +msgstr "" +#: quickget:981 +msgid "gum could not be found, please install it first" +msgstr "" +#: quickget:1047 +msgid "Sorry, you need bash 4.0 or newer to run this script." +msgstr "" +#: quickget:1056 +msgid "ERROR! curl not found. Please install curl" +msgstr ""