diff --git a/.travis.yml b/.travis.yml index a9fcbb28b388d256c9af2590d414b253af3a8ee0..9f52226bf07c739ba6bcecacf09d747d5962757a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,5 +19,5 @@ install: - docker build -t calamares . script: - - docker run -v $PWD:/src --tmpfs /build:rw,size=81920k -e SRCDIR=/src -e BUILDDIR=/build calamares "/src/ci/travis.sh" + - docker run -v $PWD:/src --tmpfs /build:rw,size=112M -e SRCDIR=/src -e BUILDDIR=/build calamares "/src/ci/travis.sh" diff --git a/CHANGES b/CHANGES index 911f7156e599ae228cf8a092d6defdc48fe9dbfe..73c99cf9bf469c4ba8f37bfc53606d6c4885ce5b 100644 --- a/CHANGES +++ b/CHANGES @@ -10,13 +10,22 @@ website will have to do for older versions. # 3.2.33 (unreleased) # This release contains contributions from (alphabetically by first name): - - No external contributors yet + - Anke Boersma + - Andrius Å tikonas + - Artem Grinev + - Gaël PORTAY + - TTran Me ## Core ## - - No core changes yet + - Calamares now sets the C++ standard for compilation to C++17; this + is for better compatibility and fewer warnings when building with + modern KDE Frameworks and KPMcore 4.2.0. + - Vietnamese translations have been added. Welcome! ## Modules ## - - No module changes yet + - The *keyboard* and *keyboardq* modules now share backend code + and handle non-ASCII layouts better (for setting passwords + and usernames). # 3.2.32.1 (2020-10-17) # diff --git a/CMakeLists.txt b/CMakeLists.txt index 99f6cd42a295fd161eb4921b4b8b6974f1c7b954..b20ce50d9d9e6f8ec72ac0b2a7a977dbe0b45eb0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,12 +140,13 @@ set( CALAMARES_DESCRIPTION_SUMMARY # NOTE: update these lines by running `txstats.py`, or for full automation # `txstats.py -e`. See also # -# Total 70 languages -set( _tx_complete ca cs_CZ he hr sq tr_TR uk ) -set( _tx_good as ast az az_AZ be da de es fa fi_FI fr hi hu it_IT - ja ko lt ml nl pt_BR pt_PT ru sk sv tg zh_CN zh_TW ) -set( _tx_ok ar bg bn el en_GB es_MX es_PR et eu fur gl id is mr nb - pl ro sl sr sr@latin th ) +# Total 71 languages +set( _tx_complete be ca cs_CZ da fi_FI fur he hi hr ja pt_BR sq sv + tg uk vi zh_TW ) +set( _tx_good as ast az az_AZ de es fa fr hu it_IT ko lt ml nl + pt_PT ru sk tr_TR zh_CN ) +set( _tx_ok ar bg bn el en_GB es_MX es_PR et eu gl id is mr nb pl + ro sl sr sr@latin th ) set( _tx_incomplete ca@valencia eo fr_CH gu ie kk kn lo lv mk ne_NP te ur uz ) @@ -190,23 +191,30 @@ include( CMakeColors ) ### C++ SETUP # -set( CMAKE_CXX_STANDARD 14 ) +set( CMAKE_CXX_STANDARD 17 ) set( CMAKE_CXX_STANDARD_REQUIRED ON ) +set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror=return-type" ) +set( CMAKE_CXX_FLAGS_DEBUG "-g ${CMAKE_CXX_FLAGS_DEBUG}" ) +set( CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG" ) +set( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" ) +set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g" ) + set( CMAKE_C_STANDARD 99 ) set( CMAKE_C_STANDARD_REQUIRED ON ) - set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall" ) +set( CMAKE_C_FLAGS_DEBUG "-g" ) +set( CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" ) +set( CMAKE_C_FLAGS_RELEASE "-O4 -DNDEBUG" ) +set( CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g" ) + +set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined -Wl,--fatal-warnings" ) + if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" ) message( STATUS "Found Clang ${CMAKE_CXX_COMPILER_VERSION}, setting up Clang-specific compiler flags." ) - set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall" ) - set( CMAKE_C_FLAGS_DEBUG "-g" ) - set( CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" ) - set( CMAKE_C_FLAGS_RELEASE "-O4 -DNDEBUG" ) - set( CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g" ) # Clang warnings: doing *everything* is counter-productive, since it warns # about things which we can't fix (e.g. C++98 incompatibilities, but - # Calamares is C++14). + # Calamares is C++17). foreach( CLANG_WARNINGS -Weverything -Wno-c++98-compat @@ -218,40 +226,26 @@ if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" ) -Wno-missing-prototypes -Wno-documentation-unknown-command -Wno-unknown-warning-option - -Werror=return-type ) string( APPEND CMAKE_CXX_FLAGS " ${CLANG_WARNINGS}" ) endforeach() - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOTREACHED='//' -DFALLTHRU='[[clang::fallthrough]]'") # Third-party code where we don't care so much about compiler warnings # (because it's uncomfortable to patch) get different flags; use # mark_thirdparty_code( <file> [<file>...] ) # to switch off warnings for those sources. set( SUPPRESS_3RDPARTY_WARNINGS "-Wno-everything" ) - set( SUPPRESS_BOOST_WARNINGS " -Wno-zero-as-null-pointer-constant -Wno-disabled-macro-expansion" ) - - set( CMAKE_CXX_FLAGS_DEBUG "-g ${CMAKE_CXX_FLAGS_DEBUG}" ) - set( CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG" ) - set( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" ) - set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g" ) set( CMAKE_TOOLCHAIN_PREFIX "llvm-" ) - set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" ) - # The path prefix is only relevant for CMake 3.16 and later, fixes #1286 set( CMAKE_AUTOMOC_PATH_PREFIX OFF ) set( CALAMARES_AUTOMOC_OPTIONS "-butils/moc-warnings.h" ) set( CALAMARES_AUTOUIC_OPTIONS --include utils/moc-warnings.h ) else() - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--no-undefined" ) - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--fatal-warnings -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type" ) + set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Woverloaded-virtual" ) set( SUPPRESS_3RDPARTY_WARNINGS "" ) - set( SUPPRESS_BOOST_WARNINGS "" ) - - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOTREACHED='__builtin_unreachable();' -DFALLTHRU='/* */'" ) endif() # Use mark_thirdparty_code() to reduce warnings from the compiler diff --git a/README.md b/README.md index 3049fbabc28720115625f2a0c176afb1f8eb90e0..7ad26e2c5f9631ce7fbacd36389e83d26764a777 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ Clone Calamares from GitHub. The default branch is called *calamares*. git clone https://github.com/calamares/calamares.git ``` -Calamares is a KDE-Frameworks and Qt-based, C++14, CMake-built application. +Calamares is a KDE-Frameworks and Qt-based, C++17, CMake-built application. The dependencies are explainged in [CONTRIBUTING.md](CONTRIBUTING.md). ## Contributing to Calamares diff --git a/calamares.desktop b/calamares.desktop index b6cafe61271dc2ccba99f8c75d0b8ab3c3a8cda6..834c4a518218f0078422aee07b6950396898fd96 100644 --- a/calamares.desktop +++ b/calamares.desktop @@ -201,6 +201,10 @@ Name[uk]=Ð’Ñтановити СиÑтему Icon[uk]=calamares GenericName[uk]=Ð’Ñтановлювач ÑиÑтеми Comment[uk]=Calamares - Ð’Ñтановлювач ÑиÑтеми +Name[vi]=Cà i đặt hệ thống +Icon[vi]=calamares +GenericName[vi]=Bá»™ cà i đặt hệ thống +Comment[vi]=Calamares — Bá»™ cà i đặt hệ thống Name[zh_CN]=安装系统 Icon[zh_CN]=calamares GenericName[zh_CN]=ç³»ç»Ÿå®‰è£…ç¨‹åº diff --git a/ci/calamaresstyle b/ci/calamaresstyle index bd715eee185d41edb185462f2c03357536117d33..42adc33cc38e35e8b96cec29515217f1dc34c966 100755 --- a/ci/calamaresstyle +++ b/ci/calamaresstyle @@ -22,7 +22,7 @@ export LANG LC_ALL LC_NUMERIC AS=$( which astyle ) -CF_VERSIONS="clang-format-7 clang-format-8 clang-format70 clang-format80 clang-format-9.0.1 clang-format" +CF_VERSIONS="clang-format-7 clang-format-8 clang-format70 clang-format80 clang-format90 clang-format-9.0.1 clang-format" for _cf in $CF_VERSIONS do # Not an error if this particular clang-format isn't found diff --git a/lang/calamares_be.ts b/lang/calamares_be.ts index 27c5422ae0a55fda0b8353676d17edbc1ca57c39..41502ddfcc4041f8ffbce859a4f25f28cbd11135 100644 --- a/lang/calamares_be.ts +++ b/lang/calamares_be.ts @@ -532,7 +532,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="305"/> <source><strong>Manual partitioning</strong><br/>You can create or resize partitions yourself.</source> - <translation type="unfinished"/> + <translation><strong>УлаÑÐ½Ð°Ñ€ÑƒÑ‡Ð½Ð°Ñ Ñ€Ð°Ð·Ð¼ÐµÑ‚ÐºÐ°</strong><br/>Ð’Ñ‹ можаце ÑамаÑтойна Ñтвараць раздзелы або змÑнÑць Ñ–Ñ… памеры.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="831"/> @@ -621,17 +621,17 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>Ðа гÑтай прыладзе ўжо ÑžÑталÑÐ²Ð°Ð½Ð°Ñ Ð°Ð¿ÐµÑ€Ð°Ñ†Ñ‹Ð¹Ð½Ð°Ñ ÑÑ–ÑÑ‚Ñма, але табліца раздзелаў <strong>%1</strong> не такаÑ, Ñк патрÑбна <strong>%2</strong>.<br/></translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> <source>This storage device has one of its partitions <strong>mounted</strong>.</source> - <translation type="unfinished"/> + <translation>Ðдзін з раздзелаў гÑтай назапашвальнай прылады<strong>прымантаваны</strong>.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/> <source>This storage device is a part of an <strong>inactive RAID</strong> device.</source> - <translation type="unfinished"/> + <translation>ГÑÑ‚Ð°Ñ Ð½Ð°Ð·Ð°Ð¿Ð°ÑˆÐ²Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ñ‹Ð»Ð°Ð´Ð° Ñ‘Ñць чаÑткай<strong>неактыўнага RAID</strong>.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/> @@ -734,7 +734,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/locale/Config.cpp" line="334"/> <source>Set timezone to %1/%2.</source> - <translation type="unfinished"/> + <translation>Вызначыць чаÑавы поÑÑ %1/%2.</translation> </message> <message> <location filename="../src/modules/locale/Config.cpp" line="372"/> @@ -794,22 +794,22 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/welcome/Config.cpp" line="244"/> <source><h1>Welcome to the Calamares setup program for %1</h1></source> - <translation type="unfinished"/> + <translation><h1>Вітаем у праграме ÑžÑталёўкі Calamares Ð´Ð»Ñ %1</h1></translation> </message> <message> <location filename="../src/modules/welcome/Config.cpp" line="245"/> <source><h1>Welcome to %1 setup</h1></source> - <translation type="unfinished"/> + <translation><h1>Вітаем у праграме ÑžÑталёўкі %1</h1></translation> </message> <message> <location filename="../src/modules/welcome/Config.cpp" line="250"/> <source><h1>Welcome to the Calamares installer for %1</h1></source> - <translation type="unfinished"/> + <translation><h1>Вітаем у праграме ÑžÑталёўкі Calamares Ð´Ð»Ñ %1</h1></translation> </message> <message> <location filename="../src/modules/welcome/Config.cpp" line="251"/> <source><h1>Welcome to the %1 installer</h1></source> - <translation type="unfinished"/> + <translation><h1>Вітаем у праграме ÑžÑталёўкі %1</h1></translation> </message> <message> <location filename="../src/modules/users/Config.cpp" line="164"/> @@ -819,7 +819,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/users/Config.cpp" line="170"/> <source>'%1' is not allowed as username.</source> - <translation type="unfinished"/> + <translation>'%1' немагчыма выкарыÑтаць Ñк Ñ–Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка.</translation> </message> <message> <location filename="../src/modules/users/Config.cpp" line="177"/> @@ -844,7 +844,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/users/Config.cpp" line="237"/> <source>'%1' is not allowed as hostname.</source> - <translation type="unfinished"/> + <translation>'%1' немагчыма выкарыÑтаць Ñк назву хоÑта.</translation> </message> <message> <location filename="../src/modules/users/Config.cpp" line="243"/> @@ -1817,14 +1817,16 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/localeq/Map.qml" line="243"/> <source>Timezone: %1</source> - <translation type="unfinished"/> + <translation>ЧаÑавы поÑÑ: %1</translation> </message> <message> <location filename="../src/modules/localeq/Map.qml" line="264"/> <source>Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.</source> - <translation type="unfinished"/> + <translation>Калі лаÑка, абÑрыце неабходнае меÑца на мапе, каб праграма прапанавала мову + Ñ– налады чаÑавога поÑÑа. Ð’Ñ‹ можаце дакладна наладзіць Ð¿Ñ€Ð°Ð¿Ð°Ð½Ð°Ð²Ð°Ð½Ñ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹ ніжÑй. МеÑца на мапе можна абраць перацÑгваючы + Ñе пры дапамозе мышы. Ð”Ð»Ñ Ð¿Ð°Ð²ÐµÐ»Ñ–Ñ‡ÑÐ½Ð½Ñ Ñ– памÑншÑÐ½Ð½Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹Ñтоўвайце кнопкі +/- Ñ– кола мышы.</translation> </message> </context> <context> @@ -1944,7 +1946,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/oemid/OEMPage.ui" line="42"/> <source><html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html></source> - <translation><html><head/><body><p>УвÑдзіце Ñюды маÑавы ідÑнтыфікатар. Ðн захавецца Ñž мÑтавай ÑÑ–ÑÑ‚Ñме.</p></body></html></translation> + <translation><html><head/><body><p>УвÑдзіце Ñюды маÑавы ідÑнтыфікатар. Ðн захаваецца Ñž мÑтавай ÑÑ–ÑÑ‚Ñме.</p></body></html></translation> </message> <message> <location filename="../src/modules/oemid/OEMPage.ui" line="52"/> @@ -1970,29 +1972,29 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/localeq/Offline.qml" line="37"/> <source>Select your preferred Region, or use the default one based on your current location.</source> - <translation type="unfinished"/> + <translation>ÐбÑрыце пераважны Ñ€Ñгіён альбо выкарыÑтоўвайце прадвызначаны Ñž залежнаÑці ад вашага бÑгучага меÑцазнаходжаннÑ.</translation> </message> <message> <location filename="../src/modules/localeq/Offline.qml" line="94"/> <location filename="../src/modules/localeq/Offline.qml" line="169"/> <location filename="../src/modules/localeq/Offline.qml" line="213"/> <source>Timezone: %1</source> - <translation type="unfinished"/> + <translation>ЧаÑавы поÑÑ: %1</translation> </message> <message> <location filename="../src/modules/localeq/Offline.qml" line="111"/> <source>Select your preferred Zone within your Region.</source> - <translation type="unfinished"/> + <translation>ÐбÑрыце чаÑавы поÑÑ Ð´Ð»Ñ Ð²Ð°ÑˆÐ°Ð³Ð° Ñ€Ñгіёна.</translation> </message> <message> <location filename="../src/modules/localeq/Offline.qml" line="182"/> <source>Zones</source> - <translation type="unfinished"/> + <translation>ЧаÑÐ°Ð²Ñ‹Ñ Ð¿Ð°ÑÑÑ‹</translation> </message> <message> <location filename="../src/modules/localeq/Offline.qml" line="229"/> <source>You can fine-tune Language and Locale settings below.</source> - <translation type="unfinished"/> + <translation>ÐіжÑй вы можаце наладзіць мову Ñ– мÑÑцоваÑць.</translation> </message> </context> <context> @@ -2644,12 +2646,12 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="427"/> <source>An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start.</source> - <translation type="unfinished"/> + <translation>Ð”Ð»Ñ Ñ‚Ð°Ð³Ð¾, каб пачаць %1, патрабуецца ÑÑ–ÑÑ‚Ñмны раздзел EFI.<br/><br/> Каб наладзіць ÑÑ–ÑÑ‚Ñмны раздзел EFI, вÑрніцеÑÑ Ð½Ð°Ð·Ð°Ð´, абÑрыце альбо Ñтварыце файлавую ÑÑ–ÑÑ‚Ñму FAT32 Ñа ÑцÑгам <strong>%3</strong> Ñ– пунктам Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ <strong>%2</strong>.<br/><br/>Ð’Ñ‹ можаце працÑгнуць Ñ– без наладкі ÑÑ–ÑÑ‚Ñмнага раздзела EFI, але ваша ÑÑ–ÑÑ‚Ñма можа не загрузіцца.</translation> </message> <message> <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="441"/> <source>An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start.</source> - <translation type="unfinished"/> + <translation>Ð”Ð»Ñ Ñ‚Ð°Ð³Ð¾, каб пачаць %1, патрабуецца ÑÑ–ÑÑ‚Ñмны раздзел EFI.<br/><br/>Быў наладжаны раздзел з пунктам мантаваннÑ<strong>%2</strong> але Ñго ÑцÑг <strong>%3</strong> не вызначаны.<br/>Каб вызначыць ÑцÑг, вÑрніцеÑÑ Ð½Ð°Ð·Ð°Ð´ Ñ– адрÑдагуйце раздзел.<br/><br/> Ð’Ñ‹ можаце працÑгнуць без наладкі раздзела, але ваша ÑÑ–ÑÑ‚Ñма можа не загрузіцца.</translation> </message> <message> <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="440"/> @@ -2868,7 +2870,7 @@ Output: <message> <location filename="../src/modules/machineid/MachineIdJob.cpp" line="83"/> <source>Directory not found</source> - <translation type="unfinished"/> + <translation>Каталог не знойдзены</translation> </message> <message> <location filename="../src/modules/machineid/MachineIdJob.cpp" line="84"/> @@ -2903,7 +2905,8 @@ Output: <location filename="../src/modules/welcomeq/Recommended.qml" line="40"/> <source><p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p></source> - <translation type="unfinished"/> + <translation><p>ГÑÑ‚Ñ‹ камп’ютар адпавÑдае не ÑžÑім патрÑбам Ð´Ð»Ñ ÑžÑталёўкі %1.<br/> + Можна працÑгнуць уÑталёўку, але Ð½ÐµÐºÐ°Ñ‚Ð¾Ñ€Ñ‹Ñ Ð¼Ð°Ð³Ñ‡Ñ‹Ð¼Ð°Ñці могуць быць недаÑтупнымі.</p></translation> </message> </context> <context> @@ -3014,13 +3017,15 @@ Output: <location filename="../src/modules/welcomeq/Requirements.qml" line="38"/> <source><p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p></source> - <translation type="unfinished"/> + <translation><p>ГÑÑ‚Ñ‹ камп’ютар не адпавÑдае мінімальным патрÑбам Ð´Ð»Ñ ÑžÑталёўкі %1.<p> + Ðемагчыма працÑгнуць. <br/></translation> </message> <message> <location filename="../src/modules/welcomeq/Requirements.qml" line="40"/> <source><p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p></source> - <translation type="unfinished"/> + <translation><p>ГÑÑ‚Ñ‹ камп’ютар адпавÑдае не ÑžÑім патрÑбам Ð´Ð»Ñ ÑžÑталёўкі %1.<br/> + Можна працÑгнуць уÑталёўку, але Ð½ÐµÐºÐ°Ñ‚Ð¾Ñ€Ñ‹Ñ Ð¼Ð°Ð³Ñ‡Ñ‹Ð¼Ð°Ñці могуць быць недаÑтупнымі.</p></translation> </message> </context> <context> @@ -3038,7 +3043,7 @@ Output: <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="170"/> <source>The file-system resize job has an invalid configuration and will not run.</source> - <translation>У задачы па змене памеру файлавай ÑÑ–ÑÑ‚Ñмы Ñ…Ñ–Ð±Ð½Ð°Ñ ÐºÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ„Ñ‹Ñ, таму Ñна не будзе выконвацца.</translation> + <translation>У задачы па змене памеру файлавай ÑÑ–ÑÑ‚Ñмы Ñ…Ñ–Ð±Ð½Ð°Ñ ÐºÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ‹Ñ, таму Ñна не будзе выконвацца.</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="175"/> @@ -3486,28 +3491,28 @@ Output: <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="122"/> <source>KDE user feedback</source> - <translation type="unfinished"/> + <translation>Ð—Ð²Ð°Ñ€Ð¾Ñ‚Ð½Ð°Ñ ÑувÑзь KDE</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="128"/> <source>Configuring KDE user feedback.</source> - <translation type="unfinished"/> + <translation>Ðаладка зваротнай ÑувÑзі KDE.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="150"/> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="156"/> <source>Error in KDE user feedback configuration.</source> - <translation type="unfinished"/> + <translation>ÐŸÐ°Ð´Ñ‡Ð°Ñ Ð½Ð°Ð»Ð°Ð´ÐºÑ– зваротнай ÑувÑзі KDE адбылаÑÑ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="151"/> <source>Could not configure KDE user feedback correctly, script error %1.</source> - <translation type="unfinished"/> + <translation>Ðе атрымалаÑÑ Ð½Ð°Ð»Ð°Ð´Ð·Ñ–Ñ†ÑŒ зваротную ÑувÑзь KDE, памылка Ñкрыпта %1.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="157"/> <source>Could not configure KDE user feedback correctly, Calamares error %1.</source> - <translation type="unfinished"/> + <translation>Ðе атрымалаÑÑ Ð½Ð°Ð»Ð°Ð´Ð·Ñ–Ñ†ÑŒ зваротную ÑувÑзь KDE, памылка Calamares %1.</translation> </message> </context> <context> @@ -3554,7 +3559,7 @@ Output: <message> <location filename="../src/modules/tracking/page_trackingstep.ui" line="76"/> <source><html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html></source> - <translation type="unfinished"/> + <translation><html><head/><body><p>ПÑтрыкніце Ñюды, каб не адпраўлÑць <span style=" font-weight:600;">ніÑкіх звеÑтак</span> пра вашу ÑžÑталёўку.</p></body></html></translation> </message> <message> <location filename="../src/modules/tracking/page_trackingstep.ui" line="275"/> @@ -3564,22 +3569,22 @@ Output: <message> <location filename="../src/modules/tracking/TrackingPage.cpp" line="86"/> <source>Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area.</source> - <translation type="unfinished"/> + <translation>ÐдÑочванне дапамагае праекту %1 бачыць, Ñк чаÑта ён уÑталёўваецца, на Ñкім абÑталÑванні ён уÑталёўваецца, ÑÐºÑ–Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ñ‹ выкарыÑтоўваюцца. Каб убачыць, што будзе адпраўлена, пÑтрыкніце па значку Ð»Ñ ÐºÐ¾Ð¶Ð½Ð°Ð¹ воблаÑці.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingPage.cpp" line="91"/> <source>By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes.</source> - <translation type="unfinished"/> + <translation>Ðбраўшы гÑÑ‚Ñ‹ пункт вы адправіце звеÑткі пра Ñваю канфігурацыю ÑžÑталёўкі Ñ– ваша абÑталÑванне. ЗвеÑткі адправÑцца <b>адзін раз</b> паÑÐ»Ñ Ð·Ð°Ð²ÑршÑÐ½Ð½Ñ ÑžÑталёўкі.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingPage.cpp" line="94"/> <source>By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1.</source> - <translation type="unfinished"/> + <translation>Ðбраўшы гÑÑ‚Ñ‹ пункт вы будзеце перыÑдычна адпраўлÑць звеÑткі пра уÑталёўку, абÑталÑванне Ñ– праграмы вашага <b>камп'ютара</b> на %1.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingPage.cpp" line="98"/> <source>By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1.</source> - <translation type="unfinished"/> + <translation>Ðбраўшы гÑÑ‚Ñ‹ пункт вы будзеце перыÑдычна адпраўлÑць звеÑткі пра уÑталёўку, абÑталÑванне, праграмы <b>карыÑтальніка</b> Ñ– воблаÑці Ñ–Ñ… выкарыÑÑ‚Ð°Ð½Ð½Ñ Ð½Ð° %1.</translation> </message> </context> <context> @@ -3625,7 +3630,7 @@ Output: <location filename="../src/calamares/VariantModel.cpp" line="232"/> <source>Key</source> <comment>Column header for key/value</comment> - <translation>Клавіша</translation> + <translation>Ключ</translation> </message> <message> <location filename="../src/calamares/VariantModel.cpp" line="236"/> @@ -3783,7 +3788,7 @@ Output: <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="238"/> <source><h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.</source> - <translation type="unfinished"/> + <translation><h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>ÐўтарÑÐºÑ–Ñ Ð¿Ñ€Ð°Ð²Ñ‹ 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>ÐўтарÑÐºÑ–Ñ Ð¿Ñ€Ð°Ð²Ñ‹ 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Ð¨Ñ‡Ñ‹Ñ€Ñ‹Ñ Ð¿Ð°Ð´Ð·Ñкі <a href="https://calamares.io/team/">камандзе раÑпрацоўкі Calamares</a> Ñ– <a href="https://www.transifex.com/calamares/calamares/">камандзе перакладчыкаў Calamares</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> раÑпрацоўваецца пры падтрымцы<br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.</translation> </message> </context> <context> @@ -3818,7 +3823,17 @@ Output: development is sponsored by <br/> <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software.</source> - <translation type="unfinished"/> + <translation><h1>%1</h1><br/> + <strong>%2<br/> + for %3</strong><br/><br/> + ÐўтарÑÐºÑ–Ñ Ð¿Ñ€Ð°Ð²Ñ‹ 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> + ÐўтарÑÐºÑ–Ñ Ð¿Ñ€Ð°Ð²Ñ‹ 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> + Ð¨Ñ‡Ñ‹Ñ€Ñ‹Ñ Ð¿Ð°Ð´Ð·Ñкі <a href='https://calamares.io/team/'>камандзе раÑпрацоўкі Calamares </a> + Ñ– <a href='https://www.transifex.com/calamares/calamares/'> перакладчыкам Calamares</a>.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> + раÑпрацоўваецца пры падтрымцы <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software.</translation> </message> <message> <location filename="../src/modules/welcomeq/about.qml" line="96"/> @@ -3832,13 +3847,15 @@ Output: <location filename="../src/modules/localeq/i18n.qml" line="46"/> <source><h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>.</source> - <translation type="unfinished"/> + <translation><h1>Мовы</h1></br> + СіÑÑ‚ÑÐ¼Ð½Ñ‹Ñ Ñ€ÑгіÑÐ½Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹ вызначаюць мову Ñ– кадаванне Ð´Ð»Ñ Ð¿Ñўных Ñлементаў інтÑрфейÑу загаднага радка. БÑÐ³ÑƒÑ‡Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹ <strong>%1</strong>.</translation> </message> <message> <location filename="../src/modules/localeq/i18n.qml" line="106"/> <source><h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>.</source> - <translation type="unfinished"/> + <translation><h1>Ð ÑгіÑÐ½Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹</h1></br> + СіÑÑ‚ÑÐ¼Ð½Ñ‹Ñ Ñ€ÑгіÑÐ½Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹ вызначаюць фармат нумароў Ñ– датаў. БÑÐ³ÑƒÑ‡Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹ <strong>%1</strong>.</translation> </message> <message> <location filename="../src/modules/localeq/i18n.qml" line="158"/> @@ -3866,7 +3883,7 @@ Output: <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="60"/> <source>Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.</source> - <translation type="unfinished"/> + <translation>ПÑтрыкніце на пераважную мадÑль клавіÑтуры, каб абраць раÑкладку Ñ– варыÑнт, альбо выкарыÑтоўвайце прадвызначаную Ñž залежнаÑці ад выÑўленага абÑталÑваннÑ.</translation> </message> <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="253"/> @@ -3881,7 +3898,7 @@ Output: <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="276"/> <source>Keyboard Variant</source> - <translation type="unfinished"/> + <translation>ВарыÑнт клавіÑтуры</translation> </message> <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="386"/> @@ -3894,7 +3911,7 @@ Output: <message> <location filename="../src/modules/localeq/localeq.qml" line="81"/> <source>Change</source> - <translation type="unfinished"/> + <translation>ЗмÑніць</translation> </message> </context> <context> @@ -3932,7 +3949,28 @@ Output: </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p></source> - <translation type="unfinished"/> + <translation><h3>%1</h3> + <p>ГÑта прыклад файла QML, у Ñкім паказваюцца параметры RichText Ñа зменным змеÑцівам.</p> + + <p>QML з RichText можа выкарыÑтоўваць пазнакі HTML. Зменнае змеÑціва карыÑна Ð´Ð»Ñ ÑÑнÑарных Ñкранаў.</p> + + <p><b>ГÑта паўтлуÑÑ‚Ñ‹ Ñ‚ÑкÑÑ‚</b></p> + <p><i>ГÑта Ñ‚ÑкÑÑ‚ курÑівам</i></p> + <p><u>ГÑта падкрÑÑлены</u></p> + <p><center>ГÑта выраўнаваны па цÑнтры Ñ‚ÑкÑÑ‚.</center><s> + <p><s>ГÑта закрÑÑлены Ñ‚ÑкÑÑ‚</s></p> + + <p>Прыклад кода: + <code>ls -l / +/home</code></p> + + <p><b>СпіÑÑ‹:</b></p> + <ul> + <li>СіÑÑ‚Ñмы з Intel CPU</li> + <li>СіÑÑ‚Ñмы з AMD CPU</li> + </ul> + + <p>Ð’ÐµÑ€Ñ‚Ñ‹ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð°Ð»Ð°Ñа пракруткі наладжваецца. БÑÐ³ÑƒÑ‡Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ - 10.</p></translation> </message> <message> <location filename="../src/modules/welcomeq/release_notes.qml" line="76"/> @@ -3945,7 +3983,7 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="36"/> <source>Pick your user name and credentials to login and perform admin tasks</source> - <translation type="unfinished"/> + <translation>ÐбÑрыце Ñвае Ñ–Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка Ñ– ÑžÐ»Ñ–ÐºÐ¾Ð²Ñ‹Ñ Ð´Ð°Ð½Ñ‹Ñ Ð´Ð»Ñ ÑžÐ²Ð°Ñ…Ð¾Ð´Ñƒ Ñ– Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡ адмініÑтратара</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="52"/> @@ -3965,12 +4003,12 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="87"/> <source>Login Name</source> - <translation type="unfinished"/> + <translation>Лагін</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="103"/> <source>If more than one person will use this computer, you can create multiple accounts after installation.</source> - <translation type="unfinished"/> + <translation>Калі камп’ютарам карыÑтаецца некалькі чалавек, то вы можаце Ñтварыць Ð´Ð»Ñ Ñ–Ñ… акаўнты паÑÐ»Ñ Ð·Ð°Ð²ÑршÑÐ½Ð½Ñ ÑžÑталёўкі.</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="118"/> @@ -3985,7 +4023,7 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="140"/> <source>This name will be used if you make the computer visible to others on a network.</source> - <translation type="unfinished"/> + <translation>Ðазва будзе выкарыÑтоўвацца Ð´Ð»Ñ Ð¿Ð°Ð·Ð½Ð°Ñ‡ÑÐ½Ð½Ñ ÐºÐ°Ð¼Ð¿â€™ÑŽÑ‚Ð°Ñ€Ð° Ñž Ñетцы.</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="155"/> @@ -4005,12 +4043,12 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="204"/> <source>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</source> - <translation type="unfinished"/> + <translation>УвÑдзіце двойчы аднолькавы пароль. ГÑта неабходна Ð´Ð»Ñ Ñ‚Ð°Ð³Ð¾, каб пазбегнуць памылак. Ðадзейны пароль павінен Ñкладацца з літар, лічбаў, знакаў пунктуацыі. Ðн павінен змÑшчаць прынамÑÑ– 8 знакаў, Ñго перыÑдычна Ñ‚Ñ€Ñба змÑнÑць.</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="216"/> <source>Validate passwords quality</source> - <translation type="unfinished"/> + <translation>Праверка ÑкаÑці паролÑÑž</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="226"/> @@ -4020,12 +4058,12 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="234"/> <source>Log in automatically without asking for the password</source> - <translation type="unfinished"/> + <translation>Ðўтаматычна ўваходзіць без уводу паролÑ</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="243"/> <source>Reuse user password as root password</source> - <translation type="unfinished"/> + <translation>ВыкарыÑтоўваць пароль карыÑтальніка Ñк пароль адмініÑтратара</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="253"/> @@ -4035,22 +4073,22 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="268"/> <source>Choose a root password to keep your account safe.</source> - <translation type="unfinished"/> + <translation>ÐбÑрыце пароль адмініÑтратара Ð´Ð»Ñ Ð°Ð±Ð°Ñ€Ð¾Ð½Ñ‹ вашага акаўнта.</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="279"/> <source>Root Password</source> - <translation type="unfinished"/> + <translation>Пароль адмініÑтратара</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="298"/> <source>Repeat Root Password</source> - <translation type="unfinished"/> + <translation>Паўтарыце пароль адмініÑтратара</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="318"/> <source>Enter the same password twice, so that it can be checked for typing errors.</source> - <translation type="unfinished"/> + <translation>УвÑдзіце пароль двойчы, каб пазбегнуць памылак уводу.</translation> </message> </context> <context> @@ -4059,7 +4097,8 @@ Output: <location filename="../src/modules/welcomeq/welcomeq.qml" line="35"/> <source><h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p></source> - <translation type="unfinished"/> + <translation><h3>Вітаем у %1, праграме ÑžÑталёўкі<quote>%2</quote> </h3> + <p>ГÑÑ‚Ð°Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ð° дапаможа вам уÑталÑваць %1 на ваш камп'ютар.</p></translation> </message> <message> <location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/> diff --git a/lang/calamares_bg.ts b/lang/calamares_bg.ts index b2a6b2b02a9df79c35c26d3dd814496b04761069..cacab19d02b21e21f640b3b63b2efe7f4fe5e72e 100644 --- a/lang/calamares_bg.ts +++ b/lang/calamares_bg.ts @@ -6,7 +6,7 @@ <message> <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="61"/> <source>The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode.</source> - <translation><strong>Среда за начално зареждане</strong> на тази ÑиÑтема.<br><br>Старите x86 ÑиÑтеми поддържат Ñамо <strong>BIOS</strong>.<br>Модерните ÑиÑтеми обикновено използват <strong>EFI</strong>, но може Ñъщо така да използват BIOS, ако Ñа Ñтартирани в режим на ÑъвмеÑтимоÑÑ‚.</translation> + <translation><strong>Средата за начално зареждане</strong> на тази ÑиÑтема.<br><br>Старите x86 ÑиÑтеми поддържат Ñамо <strong>BIOS</strong>.<br>Модерните ÑиÑтеми обикновено използват <strong>EFI</strong>, но може Ñъщо така да използват BIOS, ако Ñа Ñтартирани в режим на ÑъвмеÑтимоÑÑ‚.</translation> </message> <message> <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="71"/> @@ -132,7 +132,7 @@ <message> <location filename="../src/libcalamares/JobExample.cpp" line="29"/> <source>Job failed (%1)</source> - <translation type="unfinished"/> + <translation>Задачата Ñе провали (%1)</translation> </message> <message> <location filename="../src/libcalamares/JobExample.cpp" line="30"/> @@ -153,7 +153,7 @@ <message> <location filename="../src/libcalamares/JobExample.cpp" line="17"/> <source>Example job (%1)</source> - <translation type="unfinished"/> + <translation>Примерна задача (%1)</translation> </message> </context> <context> @@ -199,7 +199,7 @@ <message> <location filename="../src/libcalamares/PythonJob.cpp" line="229"/> <source>Main script file %1 for python job %2 is not readable.</source> - <translation>Файлът на главен Ñкрипт %1 за python задача %2 не Ñе чете.</translation> + <translation>Файла на главен Ñкрипт %1 за python задача %2 не Ñе чете.</translation> </message> <message> <location filename="../src/libcalamares/PythonJob.cpp" line="297"/> @@ -3755,12 +3755,12 @@ Output: <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="222"/> <source><h1>Welcome to the Calamares installer for %1.</h1></source> - <translation><h1>Добре дошли при инÑталатора Calamares на %1.</h1></translation> + <translation><h1>Добре дошли в инÑталатора Calamares за %1.</h1></translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="223"/> <source><h1>Welcome to the %1 installer.</h1></source> - <translation><h1>Добре дошли при инÑталатора на %1.</h1></translation> + <translation><h1>Добре дошли в инÑталатора на %1.</h1></translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="228"/> diff --git a/lang/calamares_ca.ts b/lang/calamares_ca.ts index 07df2503f05b54a402eec986735c13aabf244db2..49d14be33aeaaf80903fff57588ef7757a7cbc67 100644 --- a/lang/calamares_ca.ts +++ b/lang/calamares_ca.ts @@ -619,7 +619,7 @@ L'instal·lador es tancarà i tots els canvis es perdran.</translation> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>Aquest dispositiu d'emmagatzematge ja té un sistema operatiu, però la taula de particions <strong>%1</strong> és diferent de la necessà ria: <strong>%2</strong>.<br/> </translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> diff --git a/lang/calamares_cs_CZ.ts b/lang/calamares_cs_CZ.ts index 2ceef96192fb2f0d429e1a134461392ec8c849eb..7f63af78e56ac0951b9a45904abc2eb95f24b7a0 100644 --- a/lang/calamares_cs_CZ.ts +++ b/lang/calamares_cs_CZ.ts @@ -623,7 +623,7 @@ InstalaÄnà program bude ukonÄen a vÅ¡echny zmÄ›ny ztraceny.</translation> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>Na tomto úložném zaÅ™Ãzenà se už nacházà operaÄnà systém, ale tabulka rozdÄ›lenà <strong>%1</strong> je jiná než potÅ™ebná <strong>%2</strong>.<br/></translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> diff --git a/lang/calamares_da.ts b/lang/calamares_da.ts index e2fc210854c11f66f5fea2b1df70431af80ba4ee..e5593c7d0bae111cdcdf860c19602db0a4f9d5ce 100644 --- a/lang/calamares_da.ts +++ b/lang/calamares_da.ts @@ -619,17 +619,17 @@ Installationsprogrammet vil stoppe og alle ændringer vil gÃ¥ tabt.</translation <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>Lagerenheden har allerede et styresystem pÃ¥ den men partitionstabellen <strong>%1</strong> er ikke magen til den nødvendige <strong>%2</strong>.<br/></translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> <source>This storage device has one of its partitions <strong>mounted</strong>.</source> - <translation type="unfinished"/> + <translation>Lagerenhden har en af sine partitioner <strong>monteret</strong>.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/> <source>This storage device is a part of an <strong>inactive RAID</strong> device.</source> - <translation type="unfinished"/> + <translation>Lagringsenheden er en del af en <strong>inaktiv RAID</strong>-enhed.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/> diff --git a/lang/calamares_fi_FI.ts b/lang/calamares_fi_FI.ts index e3ff2229ea3b84844ee3d6182592446c3cbb6920..1bf0d09ccd15b5fda918284f767fc9c4198cbd94 100644 --- a/lang/calamares_fi_FI.ts +++ b/lang/calamares_fi_FI.ts @@ -619,17 +619,17 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>Tässä kiintolevyssä on jo käyttöjärjestelmä, mutta osiotaulukko <strong>%1</strong> on erilainen kuin tarvittava <strong>%2</strong>.<br/></translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> <source>This storage device has one of its partitions <strong>mounted</strong>.</source> - <translation type="unfinished"/> + <translation>Tähän kiintolevyyn on <strong>asennettu</strong> yksi osioista.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/> <source>This storage device is a part of an <strong>inactive RAID</strong> device.</source> - <translation type="unfinished"/> + <translation>Tämä kiintolevy on osa <strong>passiivista RAID</strong> -laitetta.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/> diff --git a/lang/calamares_fur.ts b/lang/calamares_fur.ts index 7575c0e2a3949e3cecdb5cab357d0d260912e1a0..d2f3a81275bbced7da065e0b90df3eea4016cf9d 100644 --- a/lang/calamares_fur.ts +++ b/lang/calamares_fur.ts @@ -153,7 +153,7 @@ <message> <location filename="../src/libcalamares/JobExample.cpp" line="17"/> <source>Example job (%1)</source> - <translation>Operazion di esempli (%1)</translation> + <translation>Lavôr di esempli (%1)</translation> </message> </context> <context> @@ -189,7 +189,7 @@ <message> <location filename="../src/libcalamares/PythonJob.cpp" line="222"/> <source>Working directory %1 for python job %2 is not readable.</source> - <translation>No si rive a lei la cartele di lavôr %1 pe ativitât di python %2.</translation> + <translation>No si rive a lei la cartele di lavôr %1 pe operazion di python %2.</translation> </message> <message> <location filename="../src/libcalamares/PythonJob.cpp" line="228"/> @@ -199,7 +199,7 @@ <message> <location filename="../src/libcalamares/PythonJob.cpp" line="229"/> <source>Main script file %1 for python job %2 is not readable.</source> - <translation>No si rive a lei il file di script principâl %1 pe ativitât di python %2.</translation> + <translation>No si rive a lei il file di script principâl %1 pe operazion di python %2.</translation> </message> <message> <location filename="../src/libcalamares/PythonJob.cpp" line="297"/> @@ -2258,7 +2258,7 @@ Il program di instalazion al jessarà e dutis lis modifichis a laran pierdudis.< <message> <location filename="../src/modules/packagechooser/page_package.ui" line="57"/> <source>TextLabel</source> - <translation type="unfinished"/> + <translation>EticheteTest</translation> </message> <message> <location filename="../src/modules/packagechooser/page_package.ui" line="73"/> @@ -2366,7 +2366,7 @@ Il program di instalazion al jessarà e dutis lis modifichis a laran pierdudis.< <location filename="../src/modules/users/page_usersetup.ui" line="349"/> <location filename="../src/modules/users/page_usersetup.ui" line="374"/> <source><small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small></source> - <translation><small>Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di scriture. Une buine password e contignarà un miscliç di letaris, numars e puntuazions, e sarà lungje almancul vot caratars, e si scugnarà cambiâle a intervai regolârs.</small></translation> + <translation><small>Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure. Une buine password e contignarà un miscliç di letaris, numars e puntuazions, e sarà lungje almancul vot caratars, e si scugnarà cambiâle a intervai regolârs.</small></translation> </message> <message> <location filename="../src/modules/users/page_usersetup.ui" line="355"/> @@ -2791,7 +2791,7 @@ Output: <message> <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="429"/> <source>Bad parameters for process job call.</source> - <translation>Parametris sbaliâts par processâ la clamade dal lavôr.</translation> + <translation>Parametris sbaliâts par processâ la clamade de operazion.</translation> </message> <message> <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="433"/> @@ -2979,24 +2979,24 @@ Output: <message> <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="207"/> <source>%1 system partition (%2)</source> - <translation type="unfinished"/> + <translation>%1 partizion di sisteme (%2)</translation> </message> <message> <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="218"/> <source><strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB.</source> - <translation type="unfinished"/> + <translation><strong>%4</strong><br/><br/>La partizion %1 e je masse piçule par %2. Selezione une partizion cun almancul %3 GiB di capacitât.</translation> </message> <message> <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="240"/> <source><strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</source> - <translation type="unfinished"/> + <translation><strong>%2</strong><br/><br/>No si rive a cjatâ di nissune bande su cheste machine une partizion di sisteme EFI. Par plasê torne indaûr e dopre il partizionament manuâl par configurâ %1.</translation> </message> <message> <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="251"/> <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="267"/> <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="292"/> <source><strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost.</source> - <translation type="unfinished"/> + <translation><strong>%3</strong><br/><br/>Si instalarà %1 su %2.<br/><font color="red">Atenzion: </font>ducj i dâts de partizion %2 a laran pierdûts.</translation> </message> <message> <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="259"/> @@ -3015,7 +3015,8 @@ Output: <location filename="../src/modules/welcomeq/Requirements.qml" line="38"/> <source><p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p></source> - <translation type="unfinished"/> + <translation><p>Chest computer nol sodisfe i recuisîts minims pe instalazion di %1.<br/> + La instalazion no pues continuâ.</p></translation> </message> <message> <location filename="../src/modules/welcomeq/Requirements.qml" line="40"/> @@ -3030,27 +3031,27 @@ Output: <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="46"/> <source>Resize Filesystem Job</source> - <translation type="unfinished"/> + <translation>Operazion di ridimensionament dal filesystem</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="169"/> <source>Invalid configuration</source> - <translation type="unfinished"/> + <translation>Configurazion no valide</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="170"/> <source>The file-system resize job has an invalid configuration and will not run.</source> - <translation type="unfinished"/> + <translation>La operazion di ridimensionament dal filesystem e à une configurazion no valide e no vignarà eseguide.</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="175"/> <source>KPMCore not Available</source> - <translation type="unfinished"/> + <translation>KPMCore no disponibil</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="176"/> <source>Calamares cannot start KPMCore for the file-system resize job.</source> - <translation type="unfinished"/> + <translation>Calamares nol rive a inviâ KPMCore pe operazion di ridimensionament dal filesystem.</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="184"/> @@ -3059,39 +3060,39 @@ Output: <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="213"/> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="231"/> <source>Resize Failed</source> - <translation type="unfinished"/> + <translation>Ridimensionament falît</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="186"/> <source>The filesystem %1 could not be found in this system, and cannot be resized.</source> - <translation type="unfinished"/> + <translation>Nol è stât pussibil cjatâ in chest sisteme il filesystem %1 e duncje nol pues jessi ridimensionât.</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="187"/> <source>The device %1 could not be found in this system, and cannot be resized.</source> - <translation type="unfinished"/> + <translation>Nol è stât pussibil cjatâ in chest sisteme il dispositîf %1 e duncje nol pues jessi ridimensionât.</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="195"/> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="206"/> <source>The filesystem %1 cannot be resized.</source> - <translation type="unfinished"/> + <translation>Impussibil ridimensionâ il filesystem %1.</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="196"/> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="207"/> <source>The device %1 cannot be resized.</source> - <translation type="unfinished"/> + <translation>Impussibil ridimensionâ il dispositîf %1.</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="214"/> <source>The filesystem %1 must be resized, but cannot.</source> - <translation type="unfinished"/> + <translation>Si scugne ridimensionâ il filesystem %1, ma no si rive.</translation> </message> <message> <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="215"/> <source>The device %1 must be resized, but cannot</source> - <translation type="unfinished"/> + <translation>Si scugne ridimensionâ il filesystem %1, ma no si rive.</translation> </message> </context> <context> @@ -3099,22 +3100,22 @@ Output: <message> <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="40"/> <source>Resize partition %1.</source> - <translation type="unfinished"/> + <translation>Ridimensionâ partizion %1</translation> </message> <message> <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="47"/> <source>Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>.</source> - <translation type="unfinished"/> + <translation>Ridimensionâ la partizion <strong>%1</strong> di <strong>%2MiB</strong> a <strong>%3MiB</strong>.</translation> </message> <message> <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="58"/> <source>Resizing %2MiB partition %1 to %3MiB.</source> - <translation type="unfinished"/> + <translation>Ridimensionâ la partizion %1 di %2MiB a %3MiB.</translation> </message> <message> <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="77"/> <source>The installer failed to resize partition %1 on disk '%2'.</source> - <translation type="unfinished"/> + <translation>Il program di instalazion nol è rivât a ridimensionâ la partizion %1 sul disc '%2'.</translation> </message> </context> <context> @@ -3131,17 +3132,17 @@ Output: <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="27"/> <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="45"/> <source>Resize volume group named %1 from %2 to %3.</source> - <translation type="unfinished"/> + <translation>Ridimensionâ il grup di volums clamât %1 di %2 a %3.</translation> </message> <message> <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="36"/> <source>Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>.</source> - <translation type="unfinished"/> + <translation>Ridimensionâ il grup di volums clamât <strong>%1</strong> di <strong>%2</strong> a <strong>%3</strong>.</translation> </message> <message> <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="60"/> <source>The installer failed to resize a volume group named '%1'.</source> - <translation type="unfinished"/> + <translation>Il program di instalazion nol è rivât a ridimensionâ un grup di volums clamât '%1'.</translation> </message> </context> <context> @@ -3149,12 +3150,12 @@ Output: <message> <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="133"/> <source>For best results, please ensure that this computer:</source> - <translation type="unfinished"/> + <translation>Par otignî i miôrs risultâts, siguriti che chest computer:</translation> </message> <message> <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="134"/> <source>System requirements</source> - <translation type="unfinished"/> + <translation>Recuisîts di sisteme</translation> </message> </context> <context> @@ -3190,12 +3191,12 @@ Output: <message> <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="64"/> <source>Scanning storage devices...</source> - <translation type="unfinished"/> + <translation>Scandai dai dispositîfs di memorie...</translation> </message> <message> <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="64"/> <source>Partitioning</source> - <translation type="unfinished"/> + <translation>Partizionament</translation> </message> </context> <context> @@ -3203,29 +3204,29 @@ Output: <message> <location filename="../src/modules/users/SetHostNameJob.cpp" line="37"/> <source>Set hostname %1</source> - <translation type="unfinished"/> + <translation>Stabilî il non-host a %1</translation> </message> <message> <location filename="../src/modules/users/SetHostNameJob.cpp" line="44"/> <source>Set hostname <strong>%1</strong>.</source> - <translation type="unfinished"/> + <translation>Stabilî il non-host a <strong>%1</strong>.</translation> </message> <message> <location filename="../src/modules/users/SetHostNameJob.cpp" line="51"/> <source>Setting hostname %1.</source> - <translation type="unfinished"/> + <translation>Daûr a stabilî il non-host a %1.</translation> </message> <message> <location filename="../src/modules/users/SetHostNameJob.cpp" line="122"/> <location filename="../src/modules/users/SetHostNameJob.cpp" line="129"/> <source>Internal Error</source> - <translation type="unfinished"/> + <translation>Erôr interni</translation> </message> <message> <location filename="../src/modules/users/SetHostNameJob.cpp" line="137"/> <location filename="../src/modules/users/SetHostNameJob.cpp" line="146"/> <source>Cannot write hostname to target system</source> - <translation type="unfinished"/> + <translation>Impussibil scrivi il non-host sul sisteme di destinazion</translation> </message> </context> <context> @@ -3233,29 +3234,29 @@ Output: <message> <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="53"/> <source>Set keyboard model to %1, layout to %2-%3</source> - <translation type="unfinished"/> + <translation>Stabilî il model di tastiere a %1, disposizion a %2-%3</translation> </message> <message> <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="356"/> <source>Failed to write keyboard configuration for the virtual console.</source> - <translation type="unfinished"/> + <translation>No si è rivâts a scrivi la configurazion de tastiere pe console virtuâl.</translation> </message> <message> <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="357"/> <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="361"/> <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="368"/> <source>Failed to write to %1</source> - <translation type="unfinished"/> + <translation>No si è rivâts a scrivi su %1</translation> </message> <message> <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="360"/> <source>Failed to write keyboard configuration for X11.</source> - <translation type="unfinished"/> + <translation>No si è rivâts a scrivi la configurazion de tastiere par X11.</translation> </message> <message> <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="367"/> <source>Failed to write keyboard configuration to existing /etc/default directory.</source> - <translation type="unfinished"/> + <translation>No si è rivâts a scrivi la configurazion de tastiere te cartele esistente /etc/default .</translation> </message> </context> <context> @@ -3346,42 +3347,42 @@ Output: <message> <location filename="../src/modules/users/SetPasswordJob.cpp" line="40"/> <source>Set password for user %1</source> - <translation type="unfinished"/> + <translation>Stabilî la password pal utent %1</translation> </message> <message> <location filename="../src/modules/users/SetPasswordJob.cpp" line="47"/> <source>Setting password for user %1.</source> - <translation type="unfinished"/> + <translation>Daûr a stabilî la password pal utent %1.</translation> </message> <message> <location filename="../src/modules/users/SetPasswordJob.cpp" line="81"/> <source>Bad destination system path.</source> - <translation type="unfinished"/> + <translation>Percors di sisteme de destinazion sbaliât.</translation> </message> <message> <location filename="../src/modules/users/SetPasswordJob.cpp" line="82"/> <source>rootMountPoint is %1</source> - <translation type="unfinished"/> + <translation>Il rootMountPoint (pont di montaç de lidrîs) al è %1</translation> </message> <message> <location filename="../src/modules/users/SetPasswordJob.cpp" line="88"/> <source>Cannot disable root account.</source> - <translation type="unfinished"/> + <translation>Impussibil disabilitâ l'account di root.</translation> </message> <message> <location filename="../src/modules/users/SetPasswordJob.cpp" line="89"/> <source>passwd terminated with error code %1.</source> - <translation type="unfinished"/> + <translation>passwd terminât cun codiç di erôr %1.</translation> </message> <message> <location filename="../src/modules/users/SetPasswordJob.cpp" line="97"/> <source>Cannot set password for user %1.</source> - <translation type="unfinished"/> + <translation>Impussibil stabilî la password pal utent %1.</translation> </message> <message> <location filename="../src/modules/users/SetPasswordJob.cpp" line="98"/> <source>usermod terminated with error code %1.</source> - <translation type="unfinished"/> + <translation>usermod terminât cun codiç di erôr %1.</translation> </message> </context> <context> @@ -3389,37 +3390,37 @@ Output: <message> <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="34"/> <source>Set timezone to %1/%2</source> - <translation type="unfinished"/> + <translation>Meti il fûs orari su %1/%2</translation> </message> <message> <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="62"/> <source>Cannot access selected timezone path.</source> - <translation type="unfinished"/> + <translation>Impussibil acedi al percors dal fûs orari selezionât.</translation> </message> <message> <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="63"/> <source>Bad path: %1</source> - <translation type="unfinished"/> + <translation>Percors no valit: %1</translation> </message> <message> <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="71"/> <source>Cannot set timezone.</source> - <translation type="unfinished"/> + <translation>Impussibil stabilî il fûs orari.</translation> </message> <message> <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="72"/> <source>Link creation failed, target: %1; link name: %2</source> - <translation type="unfinished"/> + <translation>Creazion dal colegament falide, destinazion: %1; non colegament: %2</translation> </message> <message> <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="77"/> <source>Cannot set timezone,</source> - <translation type="unfinished"/> + <translation>Impussibil stabilî il fûs orari,</translation> </message> <message> <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="78"/> <source>Cannot open /etc/timezone for writing</source> - <translation type="unfinished"/> + <translation>Impussibil vierzi /etc/timezone pe scriture</translation> </message> </context> <context> @@ -3427,7 +3428,7 @@ Output: <message> <location filename="../src/modules/shellprocess/ShellProcessJob.cpp" line="41"/> <source>Shell Processes Job</source> - <translation type="unfinished"/> + <translation>Operazion dai procès de shell</translation> </message> </context> <context> @@ -3436,7 +3437,7 @@ Output: <location filename="../src/qml/calamares/slideshow/SlideCounter.qml" line="27"/> <source>%L1 / %L2</source> <extracomment>slide counter, %1 of %2 (numeric)</extracomment> - <translation type="unfinished"/> + <translation>%L1 / %L2</translation> </message> </context> <context> @@ -3444,12 +3445,12 @@ Output: <message> <location filename="../src/modules/summary/SummaryPage.cpp" line="47"/> <source>This is an overview of what will happen once you start the setup procedure.</source> - <translation type="unfinished"/> + <translation>Cheste e je une panoramiche di ce che al sucedarà une volte inviade la procedure di configurazion.</translation> </message> <message> <location filename="../src/modules/summary/SummaryPage.cpp" line="49"/> <source>This is an overview of what will happen once you start the install procedure.</source> - <translation type="unfinished"/> + <translation>Cheste e je une panoramiche di ce che al sucedarà une volte inviade la procedure di instalazion.</translation> </message> </context> <context> @@ -3457,7 +3458,7 @@ Output: <message> <location filename="../src/modules/summary/SummaryViewStep.cpp" line="36"/> <source>Summary</source> - <translation type="unfinished"/> + <translation>Sintesi</translation> </message> </context> <context> @@ -3465,22 +3466,22 @@ Output: <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="37"/> <source>Installation feedback</source> - <translation type="unfinished"/> + <translation>Opinion su la instalazion</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="43"/> <source>Sending installation feedback.</source> - <translation type="unfinished"/> + <translation>Daûr a inviâ la opinion su la instalazion.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="60"/> <source>Internal error in install-tracking.</source> - <translation type="unfinished"/> + <translation>Erôr interni in install-tracking.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="61"/> <source>HTTP request timed out.</source> - <translation type="unfinished"/> + <translation>Richieste HTTP scjadude.</translation> </message> </context> <context> @@ -3488,28 +3489,28 @@ Output: <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="122"/> <source>KDE user feedback</source> - <translation type="unfinished"/> + <translation>Opinion dal utent di KDE</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="128"/> <source>Configuring KDE user feedback.</source> - <translation type="unfinished"/> + <translation>Daûr a configurâ la opinione dal utent di KDE.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="150"/> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="156"/> <source>Error in KDE user feedback configuration.</source> - <translation type="unfinished"/> + <translation>Erôr te configurazion de opinion dal utent di KDE.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="151"/> <source>Could not configure KDE user feedback correctly, script error %1.</source> - <translation type="unfinished"/> + <translation>Nol è stât pussibil configurâ in maniere juste la opinion dal utent di KDE, erôr di script %1.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="157"/> <source>Could not configure KDE user feedback correctly, Calamares error %1.</source> - <translation type="unfinished"/> + <translation>Nol è stât pussibil configurâ in maniere juste la opinion dal utent di KDE, erôr di Calamares %1.</translation> </message> </context> <context> @@ -3517,28 +3518,28 @@ Output: <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="71"/> <source>Machine feedback</source> - <translation type="unfinished"/> + <translation>Opinion su la machine</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="77"/> <source>Configuring machine feedback.</source> - <translation type="unfinished"/> + <translation>Daûr a configurâ la opinion su la machine.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="100"/> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="106"/> <source>Error in machine feedback configuration.</source> - <translation type="unfinished"/> + <translation>Erôr inte configurazion de opinion su la machine.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="101"/> <source>Could not configure machine feedback correctly, script error %1.</source> - <translation type="unfinished"/> + <translation>Nol è stât pussibil configurâ in maniere juste la opinion su la machine, erôr di script %1.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="107"/> <source>Could not configure machine feedback correctly, Calamares error %1.</source> - <translation type="unfinished"/> + <translation>Nol è stât pussibil configurâ in maniere juste la opinion su la machine, erôr di Calamares %1.</translation> </message> </context> <context> @@ -3551,37 +3552,37 @@ Output: <message> <location filename="../src/modules/tracking/page_trackingstep.ui" line="28"/> <source>Placeholder</source> - <translation type="unfinished"/> + <translation>Segnepuest</translation> </message> <message> <location filename="../src/modules/tracking/page_trackingstep.ui" line="76"/> <source><html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html></source> - <translation type="unfinished"/> + <translation><html><head/><body><p>Fâs clic achì par <span style=" font-weight:600;">no inviâ nissune informazion</span> su la tô instalazion.</p></body></html></translation> </message> <message> <location filename="../src/modules/tracking/page_trackingstep.ui" line="275"/> <source><html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html></source> - <translation type="unfinished"/> + <translation><html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Fâs clic achì par vê plui informazions su lis opinions dai utents</span></a></p></body></html></translation> </message> <message> <location filename="../src/modules/tracking/TrackingPage.cpp" line="86"/> <source>Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area.</source> - <translation type="unfinished"/> + <translation>Tignî i indizis al jude %1 a viodi trop dispès che al ven instalât, in cuâl hardware e ce aplicazions che a vegnin dopradis. Par viodi ce che al ven inviât, fâs clic su pe icone di jutori dongje a ogni aree.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingPage.cpp" line="91"/> <source>By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes.</source> - <translation type="unfinished"/> + <translation>Selezionant chest tu inviarâs informazions sul to hardware e su la tô instalazion. Cheste informazion e vignarà mandade dome <b>une volte</b>, dopo finide la instalazion.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingPage.cpp" line="94"/> <source>By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1.</source> - <translation type="unfinished"/> + <translation>Selezionant chest tu mandarâs informazions in mût periodic a %1 su la instalazion, l'hardware e lis aplicazions de tô <b>machine</b>.</translation> </message> <message> <location filename="../src/modules/tracking/TrackingPage.cpp" line="98"/> <source>By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1.</source> - <translation type="unfinished"/> + <translation>Selezionant chest tu mandarâs cun regolaritât informazions a %1 su la instalazion, l'hardware, lis aplicazions e modei di ûs de aplicazion dal tô <b>utent</b>.</translation> </message> </context> <context> @@ -3589,7 +3590,7 @@ Output: <message> <location filename="../src/modules/tracking/TrackingViewStep.cpp" line="49"/> <source>Feedback</source> - <translation type="unfinished"/> + <translation>Opinion</translation> </message> </context> <context> @@ -3597,12 +3598,12 @@ Output: <message> <location filename="../src/modules/users/UsersPage.cpp" line="156"/> <source><small>If more than one person will use this computer, you can create multiple accounts after setup.</small></source> - <translation type="unfinished"/> + <translation><small>Se chest computer al vignarà doprât di plui di une persone, si pues creâ plui accounts dopo vê completade la configurazion.</small></translation> </message> <message> <location filename="../src/modules/users/UsersPage.cpp" line="162"/> <source><small>If more than one person will use this computer, you can create multiple accounts after installation.</small></source> - <translation type="unfinished"/> + <translation><small>Se chest computer al vignarà doprât di plui di une persone, si pues creâ plui accounts dopo vê completade la instalazion.</small></translation> </message> </context> <context> @@ -3610,7 +3611,7 @@ Output: <message> <location filename="../src/modules/usersq/UsersQmlViewStep.cpp" line="39"/> <source>Users</source> - <translation type="unfinished"/> + <translation>Utents</translation> </message> </context> <context> @@ -3618,7 +3619,7 @@ Output: <message> <location filename="../src/modules/users/UsersViewStep.cpp" line="48"/> <source>Users</source> - <translation type="unfinished"/> + <translation>Utents</translation> </message> </context> <context> @@ -3627,13 +3628,13 @@ Output: <location filename="../src/calamares/VariantModel.cpp" line="232"/> <source>Key</source> <comment>Column header for key/value</comment> - <translation type="unfinished"/> + <translation>Clâf</translation> </message> <message> <location filename="../src/calamares/VariantModel.cpp" line="236"/> <source>Value</source> <comment>Column header for key/value</comment> - <translation type="unfinished"/> + <translation>Valôr</translation> </message> </context> <context> @@ -3646,22 +3647,22 @@ Output: <message> <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="24"/> <source>List of Physical Volumes</source> - <translation type="unfinished"/> + <translation>Liste di volums fisics</translation> </message> <message> <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="34"/> <source>Volume Group Name:</source> - <translation type="unfinished"/> + <translation>Non dal grup di volums:</translation> </message> <message> <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="47"/> <source>Volume Group Type:</source> - <translation type="unfinished"/> + <translation>Gjenar dal grup di volums:</translation> </message> <message> <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="60"/> <source>Physical Extent Size:</source> - <translation type="unfinished"/> + <translation>Dimension de estension fisiche:</translation> </message> <message> <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="70"/> @@ -3671,22 +3672,22 @@ Output: <message> <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="86"/> <source>Total Size:</source> - <translation type="unfinished"/> + <translation>Dimension totâl:</translation> </message> <message> <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="106"/> <source>Used Size:</source> - <translation type="unfinished"/> + <translation>Dimension doprade:</translation> </message> <message> <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="126"/> <source>Total Sectors:</source> - <translation type="unfinished"/> + <translation>Setôrs totâi:</translation> </message> <message> <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="146"/> <source>Quantity of LVs:</source> - <translation type="unfinished"/> + <translation>Cuantitât di VLs:</translation> </message> </context> <context> @@ -3700,92 +3701,92 @@ Output: <location filename="../src/modules/welcome/WelcomePage.ui" line="79"/> <location filename="../src/modules/welcome/WelcomePage.ui" line="98"/> <source>Select application and system language</source> - <translation type="unfinished"/> + <translation>Selezionâ lenghe di sisteme e di aplicazions</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.ui" line="140"/> <source>&About</source> - <translation type="unfinished"/> + <translation>&Informazions</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.ui" line="150"/> <source>Open donations website</source> - <translation type="unfinished"/> + <translation>Vierç il sît web pes donazions</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.ui" line="153"/> <source>&Donate</source> - <translation type="unfinished"/> + <translation>&Done</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.ui" line="163"/> <source>Open help and support website</source> - <translation type="unfinished"/> + <translation>Vierç il sît web pal jutori e pal supuart</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.ui" line="166"/> <source>&Support</source> - <translation type="unfinished"/> + <translation>&Supuart</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.ui" line="176"/> <source>Open issues and bug-tracking website</source> - <translation type="unfinished"/> + <translation>Vierç il sît web sui problemis e lis segnalazions/indizis sui erôrs</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.ui" line="179"/> <source>&Known issues</source> - <translation type="unfinished"/> + <translation>&Problemis cognossûts</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.ui" line="189"/> <source>Open release notes website</source> - <translation type="unfinished"/> + <translation>Vierç il sît web des notis di publicazion</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.ui" line="192"/> <source>&Release notes</source> - <translation type="unfinished"/> + <translation>&Notis di publicazion</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="216"/> <source><h1>Welcome to the Calamares setup program for %1.</h1></source> - <translation type="unfinished"/> + <translation><h1>Benvignûts sul program di configurazion Calamares par %1.</h1></translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="217"/> <source><h1>Welcome to %1 setup.</h1></source> - <translation type="unfinished"/> + <translation><h1>Benvignûts te configurazion di %1.</h1></translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="222"/> <source><h1>Welcome to the Calamares installer for %1.</h1></source> - <translation type="unfinished"/> + <translation><h1>Benvignûts sul program di instalazion Calamares par %1.</h1></translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="223"/> <source><h1>Welcome to the %1 installer.</h1></source> - <translation type="unfinished"/> + <translation><h1>Benvignûts sul program di instalazion di %1.</h1></translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="228"/> <source>%1 support</source> - <translation type="unfinished"/> + <translation>Supuart di %1</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="235"/> <source>About %1 setup</source> - <translation type="unfinished"/> + <translation>Informazions su la configurazion di %1</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="235"/> <source>About %1 installer</source> - <translation type="unfinished"/> + <translation>Informazion su la instalazion di %1</translation> </message> <message> <location filename="../src/modules/welcome/WelcomePage.cpp" line="238"/> <source><h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.</source> - <translation type="unfinished"/> + <translation><h1>%1</h1><br/><strong>%2<br/>par %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Gracie a <a href="https://calamares.io/team/">il grup di Calamares</a> e al <a href="https://www.transifex.com/calamares/calamares/">grup di tradutôrs di Calamares</a>.<br/><br/>Il disvilup di <a href="https://calamares.io/">Calamares</a> al è patrocinât di <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.</translation> </message> </context> <context> @@ -3793,7 +3794,7 @@ Output: <message> <location filename="../src/modules/welcomeq/WelcomeQmlViewStep.cpp" line="41"/> <source>Welcome</source> - <translation type="unfinished"/> + <translation>Benvignûts</translation> </message> </context> <context> @@ -3801,7 +3802,7 @@ Output: <message> <location filename="../src/modules/welcome/WelcomeViewStep.cpp" line="48"/> <source>Welcome</source> - <translation type="unfinished"/> + <translation>Benvignûts</translation> </message> </context> <context> @@ -3820,12 +3821,23 @@ Output: development is sponsored by <br/> <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software.</source> - <translation type="unfinished"/> + <translation><h1>%1</h1><br/> + <strong>%2<br/> + par %3</strong><br/><br/> + Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> + Copyright 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> + Gracie a <a href='https://calamares.io/team/'>il grup di Calamares</a> + e al <a href='https://www.transifex.com/calamares/calamares/'>grup di tradutôrs + di Calamares</a>.<br/><br/> + Il disvilup di + <a href='https://calamares.io/'>Calamares</a> al è patrocinât di <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software.</translation> </message> <message> <location filename="../src/modules/welcomeq/about.qml" line="96"/> <source>Back</source> - <translation type="unfinished"/> + <translation>Indaûr</translation> </message> </context> <context> @@ -3834,18 +3846,20 @@ Output: <location filename="../src/modules/localeq/i18n.qml" line="46"/> <source><h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>.</source> - <translation type="unfinished"/> + <translation><h1>Lenghis</h1> </br> + La impostazion di localizazion dal sisteme e influence la lenghe e la cumbinazion di caratars par cualchi element de interface utent a rie di comant. La impostazion atuâl e je <strong>%1</strong>.</translation> </message> <message> <location filename="../src/modules/localeq/i18n.qml" line="106"/> <source><h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>.</source> - <translation type="unfinished"/> + <translation><h1>Localitâts</h1> </br> + La impostazions di localizazion dal sisteme e influence il formât des datis e dai numars. La impostazion atuâl e je <strong>%1</strong>.</translation> </message> <message> <location filename="../src/modules/localeq/i18n.qml" line="158"/> <source>Back</source> - <translation type="unfinished"/> + <translation>Indaûr</translation> </message> </context> <context> @@ -3853,42 +3867,42 @@ Output: <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="45"/> <source>Keyboard Model</source> - <translation type="unfinished"/> + <translation>Model di tastiere</translation> </message> <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="377"/> <source>Layouts</source> - <translation type="unfinished"/> + <translation>Disposizions</translation> </message> <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="148"/> <source>Keyboard Layout</source> - <translation type="unfinished"/> + <translation>Disposizion di tastiere</translation> </message> <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="60"/> <source>Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.</source> - <translation type="unfinished"/> + <translation>Fâs clic sul model di tastiere preferît par selezionâ la disposizion e la variante, o dopre chel predefinît basât sul hardware rilevât.</translation> </message> <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="253"/> <source>Models</source> - <translation type="unfinished"/> + <translation>Modei</translation> </message> <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="260"/> <source>Variants</source> - <translation type="unfinished"/> + <translation>Variantis</translation> </message> <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="276"/> <source>Keyboard Variant</source> - <translation type="unfinished"/> + <translation>Variante di tastiere</translation> </message> <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="386"/> <source>Test your keyboard</source> - <translation type="unfinished"/> + <translation>Prove la tastiere</translation> </message> </context> <context> @@ -3896,7 +3910,7 @@ Output: <message> <location filename="../src/modules/localeq/localeq.qml" line="81"/> <source>Change</source> - <translation type="unfinished"/> + <translation>Cambie</translation> </message> </context> <context> @@ -3905,7 +3919,8 @@ Output: <location filename="../src/modules/notesqml/notesqml.qml" line="50"/> <source><h3>%1</h3> <p>These are example release notes.</p></source> - <translation type="unfinished"/> + <translation><h3>%1</h3> + <p>Chescj a son esemplis di notis di publicazion.</p></translation> </message> </context> <context> @@ -3933,12 +3948,32 @@ Output: </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p></source> - <translation type="unfinished"/> + <translation><h3>%1</h3> + <p>Chest esempli di file QML, al mostre lis opzions in test formatât cun contignût che si pues dai une passade.</p> + + <p>Il QML cun test formatât al pues doprâ etichetis HTML, il contignût che si pues scori al è util pai touchscreens.</p> + + <p><b>Chest al è test in neret</b></p> + <p><i>Chest al è test corsîf</i></p> + <p><u>Chest al è test sotlineât</u></p> + <p><center>Chest test al vignarà centrât.</center></p> + <p><s>Chest al è stricât</s></p> + + <p>Esempli di codiç: + <code>ls -l /home</code></p> + + <p><b>Listis:</b></p> + <ul> + <li>Sistemis a CPU Intel</li> + <li>Sistemis a CPU AMD</li> + </ul> + + <p>La sbare di scoriment verticâl si pues justâ, cumò la largjece e je metude a 10.</p></translation> </message> <message> <location filename="../src/modules/welcomeq/release_notes.qml" line="76"/> <source>Back</source> - <translation type="unfinished"/> + <translation>Indaûr</translation> </message> </context> <context> @@ -3946,7 +3981,7 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="36"/> <source>Pick your user name and credentials to login and perform admin tasks</source> - <translation type="unfinished"/> + <translation>Sielç e dopre il to non utent e lis credenziâls par jentrâ e eseguî ativitâts di aministradôr</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="52"/> @@ -3966,12 +4001,12 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="87"/> <source>Login Name</source> - <translation type="unfinished"/> + <translation>Non di acès</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="103"/> <source>If more than one person will use this computer, you can create multiple accounts after installation.</source> - <translation type="unfinished"/> + <translation>Se chest computer al vignarà doprât di plui personis, tu puedis creâ plui account dopo vê completade la instalazion.</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="118"/> @@ -3986,7 +4021,7 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="140"/> <source>This name will be used if you make the computer visible to others on a network.</source> - <translation type="unfinished"/> + <translation>Si doprarà chest non se tu rindis visibil a altris chest computer suntune rêt.</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="155"/> @@ -4006,12 +4041,12 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="204"/> <source>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</source> - <translation type="unfinished"/> + <translation>Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure. Une buine password e contignarà un miscliç di letaris, numars e puntuazions, e sarà lungje almancul vot caratars e si scugnarà cambiâle a intervai regolârs.</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="216"/> <source>Validate passwords quality</source> - <translation type="unfinished"/> + <translation>Convalidâ la cualitât des passwords</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="226"/> @@ -4021,12 +4056,12 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="234"/> <source>Log in automatically without asking for the password</source> - <translation type="unfinished"/> + <translation>Jentre in automatic cence domandâ la password</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="243"/> <source>Reuse user password as root password</source> - <translation type="unfinished"/> + <translation>Torne dopre la password dal utent pe password di root</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="253"/> @@ -4036,22 +4071,22 @@ Output: <message> <location filename="../src/modules/usersq/usersq.qml" line="268"/> <source>Choose a root password to keep your account safe.</source> - <translation type="unfinished"/> + <translation>Sielç une password di root par tignî il to account al sigûr.</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="279"/> <source>Root Password</source> - <translation type="unfinished"/> + <translation>Password di root</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="298"/> <source>Repeat Root Password</source> - <translation type="unfinished"/> + <translation>Ripeti password di root</translation> </message> <message> <location filename="../src/modules/usersq/usersq.qml" line="318"/> <source>Enter the same password twice, so that it can be checked for typing errors.</source> - <translation type="unfinished"/> + <translation>Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure.</translation> </message> </context> <context> @@ -4060,32 +4095,33 @@ Output: <location filename="../src/modules/welcomeq/welcomeq.qml" line="35"/> <source><h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p></source> - <translation type="unfinished"/> + <translation><h3>Benvignûts sul program di instalazion <quote>%2</quote> par %1</h3> + <p>Chest program al fasarà cualchi domande e al configurarà %1 sul to computer.</p></translation> </message> <message> <location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/> <source>About</source> - <translation type="unfinished"/> + <translation>Informazions</translation> </message> <message> <location filename="../src/modules/welcomeq/welcomeq.qml" line="80"/> <source>Support</source> - <translation type="unfinished"/> + <translation>Supuart</translation> </message> <message> <location filename="../src/modules/welcomeq/welcomeq.qml" line="91"/> <source>Known issues</source> - <translation type="unfinished"/> + <translation>Problemis cognossûts</translation> </message> <message> <location filename="../src/modules/welcomeq/welcomeq.qml" line="102"/> <source>Release notes</source> - <translation type="unfinished"/> + <translation>Notis di publicazion</translation> </message> <message> <location filename="../src/modules/welcomeq/welcomeq.qml" line="114"/> <source>Donate</source> - <translation type="unfinished"/> + <translation>Done</translation> </message> </context> </TS> diff --git a/lang/calamares_he.ts b/lang/calamares_he.ts index 6c7ea88d80738c2b9016d8a6cb579d0e4456214f..e87f6bb19ebf8b092951ee6ad3511465dc3ed596 100644 --- a/lang/calamares_he.ts +++ b/lang/calamares_he.ts @@ -11,12 +11,12 @@ <message> <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="71"/> <source>This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own.</source> - <translation>מערכת זו הופעלה בתצורת ×תחול <strong>EFI</strong>.<br><br> כדי להגדיר הפעלה מתצורת ×תחול EFI, על ×שף ×”×”×ª×§× ×” להתקין ×ž× ×”×œ ×תחול מערכת, לדוגמה <strong>GRUB</strong> ×ו <strong>systemd-boot</strong> על <strong>מחיצת מערכת EFI</strong>. פעולה זו ×”×™× ×וטומטית, ××œ× ×× ×›×Ÿ העדפתך ×”×™× ×œ×”×’×“×™×¨ מחיצות ב×ופן ×™×“× ×™, במקרה ×–×” עליך לבחור ×–×ת ×ו להגדיר בעצמך.</translation> + <translation>מערכת זו הופעלה בתצורת ×תחול <strong>EFI</strong>.<br><br> כדי להגדיר הפעלה מתצורת ×תחול EFI, על ×ª×›× ×™×ª ×”×”×ª×§× ×” להתקין ×ž× ×”×œ ×תחול מערכת, לדוגמה <strong>GRUB</strong> ×ו <strong>systemd-boot</strong> על <strong>מחיצת מערכת EFI</strong>. פעולה זו ×”×™× ×וטומטית, ××œ× ×× ×›×Ÿ העדפתך ×”×™× ×œ×”×’×“×™×¨ מחיצות ב×ופן ×™×“× ×™, במקרה ×–×” יש לבחור ×–×ת ×ו להגדיר בעצמך.</translation> </message> <message> <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="83"/> <source>This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own.</source> - <translation>מערכת זו הופעלה בתצורת ×תחול <strong>BIOS</strong>.<br><br> כדי להגדיר הפעלה מתצורת ×תחול BIOS, על ×שף ×”×”×ª×§× ×” להתקין ×ž× ×”×œ ×תחול מערכת, לדוגמה <strong>GRUB</strong>, בתחילת המחיצה ×ו על ×”Ö¾<strong>Master Boot Record</strong> בצמוד להתחלה של טבלת המחיצות (מועדף). פעולה זו ×”×™× ×וטומטית, ××œ× ×× ×›×Ÿ תבחר להגדיר מחיצות ב×ופן ×™×“× ×™, במקרה ×–×” עליך להגדיר ×–×ת בעצמך.</translation> + <translation>מערכת זו הופעלה בתצורת ×תחול <strong>BIOS</strong>.<br><br> כדי להגדיר הפעלה מתצורת ×תחול BIOS, על ×ª×›× ×™×ª ×”×”×ª×§× ×” להתקין ×ž× ×”×œ ×תחול מערכת, לדוגמה <strong>GRUB</strong>, בתחילת המחיצה ×ו על ×”Ö¾<strong>Master Boot Record</strong> בצמוד להתחלה של טבלת המחיצות (מועדף). פעולה זו ×”×™× ×וטומטית, ××œ× ×× ×›×Ÿ תבחר להגדיר מחיצות ב×ופן ×™×“× ×™, במקרה ×–×” יש להגדיר ×–×ת בעצמך.</translation> </message> </context> <context> @@ -340,7 +340,7 @@ <message> <location filename="../src/libcalamaresui/ViewManager.cpp" line="332"/> <source>The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong></source> - <translation>×שף ×”×”×ª×§× ×” של %1 הולך לבצע ×©×™× ×•×™×™× ×‘×›×•× ×Ÿ שלך לטובת ×”×ª×§× ×ª %2.<br/><strong>×œ× ×ª×•×›×œ לבטל ×ת ×”×©×™× ×•×™×™× ×”×œ×œ×•.</strong></translation> + <translation>×ª×›× ×™×ª ×”×”×ª×§× ×” של %1 עומדת לבצע ×©×™× ×•×™×™× ×‘×›×•× ×Ÿ שלך לטובת ×”×ª×§× ×ª %2.<br/><strong>×œ× ×ª×”×™×” ×פשרות לבטל ×ת ×”×©×™× ×•×™×™× ×”×œ×œ×•.</strong></translation> </message> <message> <location filename="../src/libcalamaresui/ViewManager.cpp" line="335"/> @@ -375,7 +375,7 @@ <message> <location filename="../src/libcalamaresui/ViewManager.cpp" line="395"/> <source>The installation is complete. Close the installer.</source> - <translation>תהליך ×”×”×ª×§× ×” הושל×. × × ×œ×¡×’×•×¨ ×ת ×שף ×”×”×ª×§× ×”.</translation> + <translation>תהליך ×”×”×ª×§× ×” הושל×. × × ×œ×¡×’×•×¨ ×ת ×ª×›× ×™×ª ×”×”×ª×§× ×”.</translation> </message> <message> <location filename="../src/libcalamaresui/ViewManager.cpp" line="397"/> @@ -428,8 +428,8 @@ The setup program will quit and all changes will be lost.</source> <location filename="../src/libcalamaresui/ViewManager.cpp" line="514"/> <source>Do you really want to cancel the current install process? The installer will quit and all changes will be lost.</source> - <translation>×”×× ×‘×¨×¦×•× ×š לבטל ×ת תהליך ×”×”×ª×§× ×”? -×שף ×”×”×ª×§× ×” ייסגר וכל ×”×©×™× ×•×™×™× ×™×בדו.</translation> + <translation>×”×× ×כן ×‘×¨×¦×•× ×š לבטל ×ת תהליך ×”×”×ª×§× ×”? +×ª×›× ×™×ª ×”×”×ª×§× ×” תיסגר וכל ×”×©×™× ×•×™×™× ×™×בדו.</translation> </message> </context> <context> @@ -495,7 +495,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/calamares/CalamaresWindow.cpp" line="305"/> <source>%1 Installer</source> - <translation>×שף ×”×ª×§× ×” של %1</translation> + <translation>×ª×›× ×™×ª ×”×ª×§× ×ª %1</translation> </message> </context> <context> @@ -638,7 +638,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/> <source>No Swap</source> - <translation>בלי החלפה</translation> + <translation>×œ×œ× ×”×—×œ×¤×”</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1611"/> @@ -1117,7 +1117,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="56"/> <source>The installer failed to delete partition %1.</source> - <translation>×שף ×”×”×ª×§× ×” × ×›×©×œ בעת מחיקת מחיצה %1.</translation> + <translation>×ª×›× ×™×ª ×”×”×ª×§× ×” כשלה במחיקת המחיצה %1.</translation> </message> </context> <context> @@ -1644,7 +1644,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/license/LicensePage.cpp" line="146"/> <source>If you do not agree with the terms, the setup procedure cannot continue.</source> - <translation>×× ×”×ª× ××™× ×”×לה ××™× × ×ž×§×•×‘×œ×™× ×¢×œ×™×š, ××™ ×פשר להמשיך בתהליך ×”×”×ª×§× ×”.</translation> + <translation>×× ×”×ª× ××™× ×”×לה ××™× × ×ž×§×•×‘×œ×™× ×¢×œ×™×›×, ××™ ×פשר להמשיך בתהליך ×”×”×ª×§× ×”.</translation> </message> <message> <location filename="../src/modules/license/LicensePage.cpp" line="151"/> @@ -1654,7 +1654,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/license/LicensePage.cpp" line="156"/> <source>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead.</source> - <translation>×× ×ª× ××™× ×לו ××™× × ×ž×§×•×‘×œ×™× ×¢×œ×™×š, ×œ× ×ª×•×ª×§×Ÿ ×ª×›× ×” ×§× ×™×™× ×™×ª וייעשה שימוש בחלופות בקוד פתוח במקו×.</translation> + <translation>×× ×”×ª× ××™× ×”×œ×œ×• ××™× × ×ž×§×•×‘×œ×™× ×¢×œ×™×›×, ×ª×•×›× ×” ×§× ×™×™× ×™×ª ×œ× ×ª×•×ª×§×Ÿ, ובמקומן יעשה שימוש בחלופות בקוד פתוח.</translation> </message> </context> <context> @@ -1826,8 +1826,8 @@ The installer will quit and all changes will be lost.</source> <source>Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.</source> - <translation>× × ×œ×‘×—×•×¨ ×ת ×”×ž×™×§×•× ×”×ž×•×¢×“×£ עליך על המפה כדי ×©×ª×›× ×™×ª ×”×”×ª×§× ×” תוכל להציע הגדרות מקומיות - ו×זור זמן עבורך. × ×™×ª×Ÿ ×œ×›×•×•× ×Ÿ ×ת ההגדרות המוצעות להלן. לחפש במפה על ידי משיכה להזזתה ×•×‘×›×¤×ª×•×¨×™× +/- כדי להתקרב/להתרחק + <translation>× × ×œ×‘×—×•×¨ ×ת ×”×ž×™×§×•× ×”×ž×•×¢×“×£ ×¢×œ×™×›× ×¢×œ המפה כדי ×©×ª×›× ×™×ª ×”×”×ª×§× ×” תוכל להציע הגדרות מקומיות + ו×זור זמן עבורכ×. × ×™×ª×Ÿ ×œ×›×•×•× ×Ÿ ×ת ההגדרות המוצעות להלן. לחפש במפה על ידי משיכה להזזתה ×•×‘×›×¤×ª×•×¨×™× +/- כדי להתקרב/להתרחק ×ו להשתמש בגלילת העכבר לטובת שליטה בתקריב.</translation> </message> </context> @@ -1974,7 +1974,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/localeq/Offline.qml" line="37"/> <source>Select your preferred Region, or use the default one based on your current location.</source> - <translation>× × ×œ×‘×—×•×¨ ×ת המחוז המועדף עליך ×ו להשתמש בבררת המחדל לפי ×”×ž×™×§×•× ×”× ×•×›×—×™ שלך.</translation> + <translation>× × ×œ×‘×—×•×¨ ×ת המחוז המועדף ×¢×œ×™×›× ×ו להשתמש בברירת המחדל לפי ×”×ž×™×§×•× ×”× ×•×›×—×™ שלכ×.</translation> </message> <message> <location filename="../src/modules/localeq/Offline.qml" line="94"/> @@ -2029,7 +2029,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/users/CheckPWQuality.cpp" line="158"/> <source>The password is the same as the old one</source> - <translation>הססמה ×–×”×” ×œ×™×©× ×”</translation> + <translation>הססמה הזו ×–×”×” ×œ×™×©× ×”</translation> </message> <message> <location filename="../src/modules/users/CheckPWQuality.cpp" line="160"/> @@ -2413,7 +2413,7 @@ The installer will quit and all changes will be lost.</source> <location filename="../src/modules/users/page_usersetup.ui" line="519"/> <location filename="../src/modules/users/page_usersetup.ui" line="544"/> <source><small>Enter the same password twice, so that it can be checked for typing errors.</small></source> - <translation><small>עליך להקליד ×ת ×ותה הססמה ×¤×¢×ž×™×™× ×›×“×™ ל×פשר זיהוי של שגי×ות הקלדה.</small></translation> + <translation><small>יש להקליד ×ת ×ותה הססמה ×¤×¢×ž×™×™× ×›×“×™ ל×פשר זיהוי של שגי×ות הקלדה.</small></translation> </message> </context> <context> @@ -2648,12 +2648,12 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="427"/> <source>An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start.</source> - <translation>מחיצת מערכת EFI × ×“×¨×©×ª כדי להפעיל ×ת %1.<br/><br/> כדי להגדיר מחיצת מערכת EFI, עליך לחזור ולבחור ×ו ליצור מערכת ×§×‘×¦×™× ×ž×¡×•×’ FAT32 ×¢× ×¡×™×ž×•×Ÿ <strong>%3</strong> פעיל ×•×¢× × ×§×•×“×ª עיגון <strong>%2</strong>.<br/><br/> × ×™×ª×Ÿ להמשיך ×œ×œ× ×”×’×“×¨×ª מחיצת מערכת EFI ×ך ×˜×¢×™× ×ª המערכת עשויה להיכשל.</translation> + <translation>מחיצת מערכת EFI × ×“×¨×©×ª כדי להפעיל ×ת %1.<br/><br/> כדי להגדיר מחיצת מערכת EFI, יש לחזור ולבחור ×ו ליצור מערכת ×§×‘×¦×™× ×ž×¡×•×’ FAT32 ×¢× ×¡×™×ž×•×Ÿ <strong>%3</strong> פעיל ×•×¢× × ×§×•×“×ª עיגון <strong>%2</strong>.<br/><br/> × ×™×ª×Ÿ להמשיך ×œ×œ× ×”×’×“×¨×ª מחיצת מערכת EFI ×ך ×˜×¢×™× ×ª המערכת עשויה להיכשל.</translation> </message> <message> <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="441"/> <source>An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start.</source> - <translation>לצורך הפעלת %1 × ×“×¨×©×ª מחיצת מערכת EFI.<br/><br/> הוגדרה מחיצה ×¢× × ×§×•×“×ª עיגון <strong>%2</strong> ×ך ×œ× ×”×•×’×“×¨ סימון <strong>%3</strong>.<br/> כדי לסמן ×ת המחיצה, עליך לחזור ולערוך ×ת המחיצה.<br/><br/> × ×™×ª×Ÿ להמשיך ×œ×œ× ×”×•×¡×¤×ª הסימון ×ך ×˜×¢×™× ×ª המערכת עשויה להיכשל.</translation> + <translation>לצורך הפעלת %1 × ×“×¨×©×ª מחיצת מערכת EFI.<br/><br/> הוגדרה מחיצה ×¢× × ×§×•×“×ª עיגון <strong>%2</strong> ×ך ×œ× ×”×•×’×“×¨ סימון <strong>%3</strong>.<br/> כדי לסמן ×ת המחיצה, יש לחזור ולערוך ×ת המחיצה.<br/><br/> × ×™×ª×Ÿ להמשיך ×œ×œ× ×”×•×¡×¤×ª הסימון ×ך ×˜×¢×™× ×ª המערכת עשויה להיכשל.</translation> </message> <message> <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="440"/> @@ -2843,7 +2843,7 @@ Output: <message> <location filename="../src/libcalamares/partition/FileSystem.cpp" line="34"/> <source>swap</source> - <translation>דפדוף, swap</translation> + <translation>דפדוף swap</translation> </message> <message> <location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="90"/> @@ -3886,7 +3886,7 @@ Output: <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="60"/> <source>Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.</source> - <translation>× × ×œ×œ×—×•×¥ על ×“×¨× ×”×ž×§×œ×“×ª המועדף עליך כדי לבחור בפריסה ובהגוון ×ו להשתמש בבררת המחדל בהת×× ×œ×—×•×ž×¨×” שזוהתה.</translation> + <translation>× × ×œ×œ×—×•×¥ על ×“×’× ×”×ž×§×œ×“×ª המועדף ×¢×œ×™×›× ×›×“×™ לבחור בפריסה ובהגוון ×ו להשתמש בברירת המחדל בהת×× ×œ×—×•×ž×¨×” שזוהתה.</translation> </message> <message> <location filename="../src/modules/keyboardq/keyboardq.qml" line="253"/> diff --git a/lang/calamares_hi.ts b/lang/calamares_hi.ts index 1f220d9e5fcbfe5fe1c1054c74ad155aee28b46e..f6d73519d6e8dc09120e3ab520a86cc4765f6322 100644 --- a/lang/calamares_hi.ts +++ b/lang/calamares_hi.ts @@ -619,17 +619,17 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>इस संचय उपकरण पर पहले से ऑपरेटिंग सिसà¥à¤Ÿà¤® है, परंतॠ<strong>%1</strong> विà¤à¤¾à¤œà¤¨ तालिका अपेकà¥à¤·à¤¿à¤¤ <strong>%2</strong> से à¤à¤¿à¤¨à¥à¤¨ है।<br/></translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> <source>This storage device has one of its partitions <strong>mounted</strong>.</source> - <translation type="unfinished"/> + <translation>इस संचय उपकरण के विà¤à¤¾à¤œà¤¨à¥‹à¤‚ में से कोई à¤à¤• विà¤à¤¾à¤œà¤¨ <strong>माउंट</strong> है।</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/> <source>This storage device is a part of an <strong>inactive RAID</strong> device.</source> - <translation type="unfinished"/> + <translation>यह संचय उपकरण à¤à¤• <strong>निषà¥à¤•à¥à¤°à¤¿à¤¯ RAID</strong> उपकरण का हिसà¥à¤¸à¤¾ है।</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/> diff --git a/lang/calamares_hr.ts b/lang/calamares_hr.ts index e9e5c252a5ca800c5a5c6c24aa744538e654154a..256de9da61c5bbbc7c9c68e39eebc90a63e5e9f7 100644 --- a/lang/calamares_hr.ts +++ b/lang/calamares_hr.ts @@ -621,7 +621,7 @@ Instalacijski program će izaći i sve promjene će biti izgubljene.</translatio <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>Ovaj ureÄ‘aj za pohranu već ima operativni sustav, ali njegova particijska tablica <strong>%1</strong> razlikuje se od potrebne <strong>%2</strong>.<br/></translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> diff --git a/lang/calamares_ja.ts b/lang/calamares_ja.ts index 0a798b844541a55da76136a72a9231959c3e4944..3a820770fa9afdaed1e9591ed707f43084536da3 100644 --- a/lang/calamares_ja.ts +++ b/lang/calamares_ja.ts @@ -617,7 +617,7 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>ã“ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒã‚¤ã‚¹ã«ã¯ã™ã§ã«ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã™ãŒã€ãƒ‘ーティションテーブル <strong>%1</strong> ã¯å¿…è¦ãª <strong>%2</strong> ã¨ã¯ç•°ãªã‚Šã¾ã™ã€‚<br/></translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> diff --git a/lang/calamares_pt_BR.ts b/lang/calamares_pt_BR.ts index 2423033088540b32e3b5d803f8702e0ae17b86f2..9897c6c1a1a02d83ce0df3ca51a04e426ca81442 100644 --- a/lang/calamares_pt_BR.ts +++ b/lang/calamares_pt_BR.ts @@ -619,17 +619,17 @@ O instalador será fechado e todas as alterações serão perdidas.</translation <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>O dispositivo de armazenamento já possui um sistema operacional, mas a tabela de partições <strong>%1</strong> é diferente da necessária <strong>%2</strong>.<br/></translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> <source>This storage device has one of its partitions <strong>mounted</strong>.</source> - <translation type="unfinished"/> + <translation>O dispositivo de armazenamento tem uma de suas partições <strong>montada</strong>.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/> <source>This storage device is a part of an <strong>inactive RAID</strong> device.</source> - <translation type="unfinished"/> + <translation>O dispositivo de armazenamento é parte de um dispositivo <strong>RAID inativo</strong>.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/> diff --git a/lang/calamares_sv.ts b/lang/calamares_sv.ts index 3f03caf4eac322235834bb7d369cc3d8dadf4aa6..ec72fefa9c42e8f25822f5b9a5ba3f99e2dff185 100644 --- a/lang/calamares_sv.ts +++ b/lang/calamares_sv.ts @@ -618,17 +618,17 @@ Alla ändringar kommer att gÃ¥ förlorade.</translation> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>Denna lagringsenhet har redan ett operativsystem installerat pÃ¥ sig, men partitionstabellen <strong>%1</strong> skiljer sig frÃ¥n den som behövs <strong>%2</strong>.<br/></translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> <source>This storage device has one of its partitions <strong>mounted</strong>.</source> - <translation type="unfinished"/> + <translation>Denna lagringsenhet har en av dess partitioner <strong>monterad</strong>.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/> <source>This storage device is a part of an <strong>inactive RAID</strong> device.</source> - <translation type="unfinished"/> + <translation>Denna lagringsenhet är en del av en <strong>inaktiv RAID</strong>enhet. </translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/> diff --git a/lang/calamares_tg.ts b/lang/calamares_tg.ts index eac2d747e290063e835cc535e03c35a085ae3690..9c291054745348d8b781eb709a16cd90261246ea 100644 --- a/lang/calamares_tg.ts +++ b/lang/calamares_tg.ts @@ -620,17 +620,17 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>Ин даÑтгоҳи захирагоҳ аллакай дорои низоми амалкунанда мебошад, аммо ҷадвали қиÑми диÑки <strong>%1</strong> аз диÑки лозимии <strong>%2</strong> фарқ мекунад.<br/></translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> <source>This storage device has one of its partitions <strong>mounted</strong>.</source> - <translation type="unfinished"/> + <translation>Яке аз қиÑмҳои диÑки ин даÑтгоҳи захирагоҳ <strong>ваÑлшуда</strong> мебошад.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/> <source>This storage device is a part of an <strong>inactive RAID</strong> device.</source> - <translation type="unfinished"/> + <translation>Ин даÑтгоҳи захирагоҳ қиÑми даÑгоҳи <strong>RAID-и ғайрифаъол</strong> мебошад.</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/> diff --git a/lang/calamares_vi.ts b/lang/calamares_vi.ts new file mode 100644 index 0000000000000000000000000000000000000000..140da8aad8b2609e3eec9911246cb4448ae1f964 --- /dev/null +++ b/lang/calamares_vi.ts @@ -0,0 +1,4124 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS language="vi" version="2.1"> + <context> + <name>BootInfoWidget</name> + <message> + <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="61"/> + <source>The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode.</source> + <translation><strong> Môi trÆ°á»ng khởi Ä‘á»™ng </strong> của hệ thống nà y. <br> <br> Các hệ thống x86 cÅ© hÆ¡n chỉ há»— trợ <strong> BIOS </strong>. <br> Các hệ thống hiện đại thÆ°á»ng sá» dụng <strong> EFI </strong>, nhÆ°ng cÅ©ng có thể hiển thị dÆ°á»›i dạng BIOS nếu được khởi Ä‘á»™ng ở chế Ä‘á»™ tÆ°Æ¡ng thÃch.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="71"/> + <source>This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own.</source> + <translation>Hệ thống nà y được khởi Ä‘á»™ng bằng môi trÆ°á»ng khởi Ä‘á»™ng <strong> EFI </strong>. <br> <br> Äể định cấu hình khởi Ä‘á»™ng từ môi trÆ°á»ng EFI, trình cà i đặt nà y phải triển khai ứng dụng trình tải khởi Ä‘á»™ng, nhÆ° <strong> GRUB </strong> hoặc <strong> systemd-boot </strong> trên <strong> Phân vùng hệ thống EFI </strong>. Äiá»u nà y là tá»± Ä‘á»™ng, trừ khi bạn chá»n phân vùng thủ công, trong trÆ°á»ng hợp nà y, bạn phải chá»n nó hoặc tá»± tạo nó.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="83"/> + <source>This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own.</source> + <translation>Hệ thống nà y được khởi Ä‘á»™ng vá»›i môi trÆ°á»ng khởi Ä‘á»™ng <strong> BIOS </strong>. <br> <br> Äể định cấu hình khởi Ä‘á»™ng từ môi trÆ°á»ng BIOS, trình cà i đặt nà y phải cà i đặt má»™t trình tải khởi Ä‘á»™ng, chẳng hạn nhÆ° <strong> GRUB </strong> ở đầu phân vùng hoặc trên <strong> Bản ghi khởi Ä‘á»™ng chÃnh </strong> gần đầu bảng phân vùng (Æ°u tiên). Äiá»u nà y là tá»± Ä‘á»™ng, trừ khi bạn chá»n phân vùng thủ công, trong trÆ°á»ng hợp đó, bạn phải tá»± thiết láºp nó.</translation> + </message> + </context> + <context> + <name>BootLoaderModel</name> + <message> + <location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="58"/> + <source>Master Boot Record of %1</source> + <translation>Bản ghi khởi Ä‘á»™ng chÃnh của %1</translation> + </message> + <message> + <location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="91"/> + <source>Boot Partition</source> + <translation>Phân vùng khởi Ä‘á»™ng</translation> + </message> + <message> + <location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="98"/> + <source>System Partition</source> + <translation>Phân vùng hệ thống</translation> + </message> + <message> + <location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="128"/> + <source>Do not install a boot loader</source> + <translation>Không cà i đặt bá»™ tải khởi Ä‘á»™ng</translation> + </message> + <message> + <location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="146"/> + <source>%1 (%2)</source> + <translation>%1 (%2)</translation> + </message> + </context> + <context> + <name>Calamares::BlankViewStep</name> + <message> + <location filename="../src/libcalamaresui/viewpages/BlankViewStep.cpp" line="61"/> + <source>Blank Page</source> + <translation>Trang trắng</translation> + </message> + </context> + <context> + <name>Calamares::DebugWindow</name> + <message> + <location filename="../src/calamares/DebugWindow.ui" line="18"/> + <source>Form</source> + <translation>Mẫu</translation> + </message> + <message> + <location filename="../src/calamares/DebugWindow.ui" line="28"/> + <source>GlobalStorage</source> + <translation>LÆ°u trữ tổng quát</translation> + </message> + <message> + <location filename="../src/calamares/DebugWindow.ui" line="38"/> + <source>JobQueue</source> + <translation>Hà ng đợi công việc</translation> + </message> + <message> + <location filename="../src/calamares/DebugWindow.ui" line="48"/> + <source>Modules</source> + <translation>Mô-Ä‘un</translation> + </message> + <message> + <location filename="../src/calamares/DebugWindow.ui" line="61"/> + <source>Type:</source> + <translation>Kiểu:</translation> + </message> + <message> + <location filename="../src/calamares/DebugWindow.ui" line="68"/> + <location filename="../src/calamares/DebugWindow.ui" line="82"/> + <source>none</source> + <translation>không</translation> + </message> + <message> + <location filename="../src/calamares/DebugWindow.ui" line="75"/> + <source>Interface:</source> + <translation>Giao diện:</translation> + </message> + <message> + <location filename="../src/calamares/DebugWindow.ui" line="97"/> + <source>Tools</source> + <translation>Công cụ</translation> + </message> + <message> + <location filename="../src/calamares/DebugWindow.ui" line="110"/> + <source>Reload Stylesheet</source> + <translation>Tải lại bảng định kiểu</translation> + </message> + <message> + <location filename="../src/calamares/DebugWindow.ui" line="117"/> + <source>Widget Tree</source> + <translation>Cây công cụ</translation> + </message> + <message> + <location filename="../src/calamares/DebugWindow.cpp" line="217"/> + <source>Debug information</source> + <translation>Thông tin gỡ lá»—i</translation> + </message> + </context> + <context> + <name>Calamares::ExecutionViewStep</name> + <message> + <location filename="../src/libcalamaresui/viewpages/ExecutionViewStep.cpp" line="85"/> + <source>Set up</source> + <translation>Thiết láºp</translation> + </message> + <message> + <location filename="../src/libcalamaresui/viewpages/ExecutionViewStep.cpp" line="85"/> + <source>Install</source> + <translation>Cà i đặt</translation> + </message> + </context> + <context> + <name>Calamares::FailJob</name> + <message> + <location filename="../src/libcalamares/JobExample.cpp" line="29"/> + <source>Job failed (%1)</source> + <translation>Công việc thất bại (%1)</translation> + </message> + <message> + <location filename="../src/libcalamares/JobExample.cpp" line="30"/> + <source>Programmed job failure was explicitly requested.</source> + <translation>Lá»—i công việc được láºp trình đã được yêu cầu rõ rà ng.</translation> + </message> + </context> + <context> + <name>Calamares::JobThread</name> + <message> + <location filename="../src/libcalamares/JobQueue.cpp" line="196"/> + <source>Done</source> + <translation>Xong</translation> + </message> + </context> + <context> + <name>Calamares::NamedJob</name> + <message> + <location filename="../src/libcalamares/JobExample.cpp" line="17"/> + <source>Example job (%1)</source> + <translation>Và dụ vá» công việc (%1)</translation> + </message> + </context> + <context> + <name>Calamares::ProcessJob</name> + <message> + <location filename="../src/libcalamares/ProcessJob.cpp" line="43"/> + <source>Run command '%1' in target system.</source> + <translation>Chạy lệnh '%1' trong hệ thống Ä‘Ãch.</translation> + </message> + <message> + <location filename="../src/libcalamares/ProcessJob.cpp" line="43"/> + <source> Run command '%1'.</source> + <translation> Chạy lệnh '%1'.</translation> + </message> + <message> + <location filename="../src/libcalamares/ProcessJob.cpp" line="50"/> + <source>Running command %1 %2</source> + <translation>Äang chạy lệnh %1 %2</translation> + </message> + </context> + <context> + <name>Calamares::PythonJob</name> + <message> + <location filename="../src/libcalamares/PythonJob.cpp" line="192"/> + <source>Running %1 operation.</source> + <translation>Äang chạy %1 thao tác.</translation> + </message> + <message> + <location filename="../src/libcalamares/PythonJob.cpp" line="221"/> + <source>Bad working directory path</source> + <translation>Sai Ä‘Æ°á»ng dẫn thÆ° mục là m việc</translation> + </message> + <message> + <location filename="../src/libcalamares/PythonJob.cpp" line="222"/> + <source>Working directory %1 for python job %2 is not readable.</source> + <translation>Không thể Ä‘á»c thÆ° mục là m việc %1 của công việc python %2.</translation> + </message> + <message> + <location filename="../src/libcalamares/PythonJob.cpp" line="228"/> + <source>Bad main script file</source> + <translation>Sai tệp kịch bản chÃnh</translation> + </message> + <message> + <location filename="../src/libcalamares/PythonJob.cpp" line="229"/> + <source>Main script file %1 for python job %2 is not readable.</source> + <translation>Không thể Ä‘á»c táºp tin kịch bản chÃnh %1 của công việc python %2.</translation> + </message> + <message> + <location filename="../src/libcalamares/PythonJob.cpp" line="297"/> + <source>Boost.Python error in job "%1".</source> + <translation>Lá»—i Boost.Python trong công việc "%1".</translation> + </message> + </context> + <context> + <name>Calamares::QmlViewStep</name> + <message> + <location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="67"/> + <source>Loading ...</source> + <translation>Äang tải ...</translation> + </message> + <message> + <location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="88"/> + <source>QML Step <i>%1</i>.</source> + <translation>QML bÆ°á»›c <i>%1</i>.</translation> + </message> + <message> + <location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="268"/> + <source>Loading failed.</source> + <translation>Không tải được.</translation> + </message> + </context> + <context> + <name>Calamares::RequirementsChecker</name> + <message> + <location filename="../src/libcalamares/modulesystem/RequirementsChecker.cpp" line="94"/> + <source>Requirements checking for module <i>%1</i> is complete.</source> + <translation>Kiểm tra các yêu cầu cho mô-Ä‘un <i> %1 </i> đã hoà n tất.</translation> + </message> + <message numerus="yes"> + <location filename="../src/libcalamares/modulesystem/RequirementsChecker.cpp" line="115"/> + <source>Waiting for %n module(s).</source> + <translation> + <numerusform>Äang đợi %n mô-Ä‘un.</numerusform> + </translation> + </message> + <message numerus="yes"> + <location filename="../src/libcalamares/modulesystem/RequirementsChecker.cpp" line="116"/> + <source>(%n second(s))</source> + <translation> + <numerusform>(%n giây)</numerusform> + </translation> + </message> + <message> + <location filename="../src/libcalamares/modulesystem/RequirementsChecker.cpp" line="121"/> + <source>System-requirements checking is complete.</source> + <translation>Kiểm tra yêu cầu hệ thống đã hoà n tất.</translation> + </message> + </context> + <context> + <name>Calamares::ViewManager</name> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="150"/> + <source>Setup Failed</source> + <translation>Thiết láºp không thà nh công</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="150"/> + <source>Installation Failed</source> + <translation>Cà i đặt thất bại</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="151"/> + <source>Would you like to paste the install log to the web?</source> + <translation>Bạn có muốn gá»i nháºt ký cà i đặt lên web không?</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="164"/> + <source>Error</source> + <translation>Lá»—i</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="171"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="518"/> + <source>&Yes</source> + <translation>&Có</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="172"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="519"/> + <source>&No</source> + <translation>&Không</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="178"/> + <source>&Close</source> + <translation>Äón&g</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="189"/> + <source>Install Log Paste URL</source> + <translation>URL để gá»i nháºt ký cà i đặt</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="192"/> + <source>The upload was unsuccessful. No web-paste was done.</source> + <translation>Tải lên không thà nh công. Không có quá trình gá»i lên web nà o được thá»±c hiện.</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="208"/> + <source>Calamares Initialization Failed</source> + <translation>Khởi tạo không thà nh công</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="209"/> + <source>%1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution.</source> + <translation>%1 không thể được cà i đặt.Không thể tải tất cả các mô-Ä‘un đã định cấu hình. Äây là vấn Ä‘á» vá»›i cách phân phối sá» dụng.</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="215"/> + <source><br/>The following modules could not be loaded:</source> + <translation><br/> Không thể tải các mô-Ä‘un sau:</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="327"/> + <source>Continue with setup?</source> + <translation>Tiếp tục thiết láºp?</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="327"/> + <source>Continue with installation?</source> + <translation>Tiếp tục cà i đặt?</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="329"/> + <source>The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong></source> + <translation>ChÆ°Æ¡ng trình thiết láºp %1 sắp thá»±c hiện các thay đổi đối vá»›i Ä‘Ä©a của bạn để thiết láºp %2. <br/> <strong> Bạn sẽ không thể hoà n tác các thay đổi nà y. </strong></translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="332"/> + <source>The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong></source> + <translation>Trình cà i đặt %1 sắp thá»±c hiện các thay đổi đối vá»›i Ä‘Ä©a của bạn để cà i đặt %2. <br/> <strong> Bạn sẽ không thể hoà n tác các thay đổi nà y. </strong></translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="335"/> + <source>&Set up now</source> + <translation>&Thiết láºp ngay</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="335"/> + <source>&Install now</source> + <translation>&Cà i đặt ngay</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="343"/> + <source>Go &back</source> + <translation>&Quay lại</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="392"/> + <source>&Set up</source> + <translation>&Thiết láºp</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="392"/> + <source>&Install</source> + <translation>&Cà i đặt</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="394"/> + <source>Setup is complete. Close the setup program.</source> + <translation>Thiết láºp hoà n tất. Äóng chÆ°Æ¡ng trình cà i đặt.</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="395"/> + <source>The installation is complete. Close the installer.</source> + <translation>Quá trình cà i đặt hoà n tất. Äóng trình cà i đặt.</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="397"/> + <source>Cancel setup without changing the system.</source> + <translation>Hủy thiết láºp mà không thay đổi hệ thống.</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="398"/> + <source>Cancel installation without changing the system.</source> + <translation>Hủy cà i đặt mà không thay đổi hệ thống.</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="408"/> + <source>&Next</source> + <translation>&Tiếp</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="413"/> + <source>&Back</source> + <translation>&Quay lại</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="419"/> + <source>&Done</source> + <translation>&Xong</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="438"/> + <source>&Cancel</source> + <translation>&Hủy</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="511"/> + <source>Cancel setup?</source> + <translation>Hủy thiết láºp?</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="511"/> + <source>Cancel installation?</source> + <translation>Hủy cà i đặt?</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="512"/> + <source>Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost.</source> + <translation>Bạn có thá»±c sá»± muốn hủy quá trình thiết láºp hiện tại không? +ChÆ°Æ¡ng trình thiết láºp sẽ thoát và tất cả các thay đổi sẽ bị mất.</translation> + </message> + <message> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="514"/> + <source>Do you really want to cancel the current install process? +The installer will quit and all changes will be lost.</source> + <translation>Bạn có thá»±c sá»± muốn hủy quá trình cà i đặt hiện tại không? +Trình cà i đặt sẽ thoát và tất cả các thay đổi sẽ bị mất.</translation> + </message> + </context> + <context> + <name>CalamaresPython::Helper</name> + <message> + <location filename="../src/libcalamares/PythonHelper.cpp" line="288"/> + <source>Unknown exception type</source> + <translation>Không nháºn ra kiểu của ngoại lệ</translation> + </message> + <message> + <location filename="../src/libcalamares/PythonHelper.cpp" line="306"/> + <source>unparseable Python error</source> + <translation>lá»—i không thể phân tÃch cú pháp Python</translation> + </message> + <message> + <location filename="../src/libcalamares/PythonHelper.cpp" line="350"/> + <source>unparseable Python traceback</source> + <translation>truy vết không thể phân tÃch cú pháp Python</translation> + </message> + <message> + <location filename="../src/libcalamares/PythonHelper.cpp" line="357"/> + <source>Unfetchable Python error.</source> + <translation>Lá»—i Python không thể try cáºp.</translation> + </message> + </context> + <context> + <name>CalamaresUtils</name> + <message> + <location filename="../src/libcalamaresui/utils/Paste.cpp" line="25"/> + <source>Install log posted to: +%1</source> + <translation>Cà i đặt nháºt ký được đăng lên: +%1</translation> + </message> + </context> + <context> + <name>CalamaresWindow</name> + <message> + <location filename="../src/calamares/CalamaresWindow.cpp" line="101"/> + <source>Show debug information</source> + <translation>Hiện thông tin gỡ lá»—i</translation> + </message> + <message> + <location filename="../src/calamares/CalamaresWindow.cpp" line="155"/> + <source>&Back</source> + <translation>Trở &vá»</translation> + </message> + <message> + <location filename="../src/calamares/CalamaresWindow.cpp" line="167"/> + <source>&Next</source> + <translation>&Tiếp theo</translation> + </message> + <message> + <location filename="../src/calamares/CalamaresWindow.cpp" line="180"/> + <source>&Cancel</source> + <translation>&Hủy bá»</translation> + </message> + <message> + <location filename="../src/calamares/CalamaresWindow.cpp" line="304"/> + <source>%1 Setup Program</source> + <translation>%1 Thiết láºp chÆ°Æ¡ng trình</translation> + </message> + <message> + <location filename="../src/calamares/CalamaresWindow.cpp" line="305"/> + <source>%1 Installer</source> + <translation>%1 cà i đặt hệ Ä‘iá»u hà nh</translation> + </message> + </context> + <context> + <name>CheckerContainer</name> + <message> + <location filename="../src/modules/welcome/checker/CheckerContainer.cpp" line="37"/> + <source>Gathering system information...</source> + <translation>Thu tháºp thông tin hệ thống ...</translation> + </message> + </context> + <context> + <name>ChoicePage</name> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.ui" line="18"/> + <source>Form</source> + <translation>Biểu mẫu</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="126"/> + <source>Select storage de&vice:</source> + <translation>&Chá»n thiết bị lÆ°u trữ:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="127"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="963"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1008"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1098"/> + <source>Current:</source> + <translation>Hiện tại:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="128"/> + <source>After:</source> + <translation>Sau khi cà i đặt:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="305"/> + <source><strong>Manual partitioning</strong><br/>You can create or resize partitions yourself.</source> + <translation><strong> Phân vùng thủ công </strong> <br/> Bạn có thể tá»± tạo hoặc thay đổi kÃch thÆ°á»›c phân vùng.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="831"/> + <source>Reuse %1 as home partition for %2.</source> + <translation>Sá» dụng lại %1 là m phân vùng chÃnh cho %2.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="964"/> + <source><strong>Select a partition to shrink, then drag the bottom bar to resize</strong></source> + <translation><strong> Chá»n má»™t phân vùng để thu nhá», sau đó kéo thanh dÆ°á»›i cùng để thay đổi kÃch thÆ°á»›c </strong></translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="981"/> + <source>%1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4.</source> + <translation>%1 sẽ được thu nhá» thà nh %2MiB và phân vùng %3MiB má»›i sẽ được tạo cho %4.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1037"/> + <source>Boot loader location:</source> + <translation>Vị trà bá»™ tải khởi Ä‘á»™ng:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1089"/> + <source><strong>Select a partition to install on</strong></source> + <translation><strong> Chá»n phân vùng để cà i đặt </strong></translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1146"/> + <source>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</source> + <translation>Không thể tìm thấy phân vùng hệ thống EFI ở bất kỳ đâu trên hệ thống nà y. Vui lòng quay lại và sá» dụng phân vùng thủ công để thiết láºp %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1154"/> + <source>The EFI system partition at %1 will be used for starting %2.</source> + <translation>Phân vùng hệ thống EFI tại %1 sẽ được sá» dụng để bắt đầu %2.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1162"/> + <source>EFI system partition:</source> + <translation>Phân vùng hệ thống EFI:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1296"/> + <source>This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source> + <translation>Thiết bị lÆ°u trữ nà y dÆ°á»ng nhÆ° không có hệ Ä‘iá»u hà nh trên đó. Bạn muốn là m gì? <br/> Bạn sẽ có thể xem xét và xác nháºn lá»±a chá»n của mình trÆ°á»›c khi thá»±c hiện bất kỳ thay đổi nà o đối vá»›i thiết bị lÆ°u trữ.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1301"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1338"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1360"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1385"/> + <source><strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device.</source> + <translation><strong> Xóa Ä‘Ä©a </strong> <br/> Thao tác nà y sẽ <font color = "red"> xóa </font> tất cả dữ liệu hiện có trên thiết bị lÆ°u trữ đã chá»n.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1305"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1334"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1356"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1381"/> + <source><strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1.</source> + <translation><strong> Cà i đặt cùng vá»›i </strong> <br/> Trình cà i đặt sẽ thu nhá» phân vùng để nhÆ°á»ng chá»— cho %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1309"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1343"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1364"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1389"/> + <source><strong>Replace a partition</strong><br/>Replaces a partition with %1.</source> + <translation><strong> Thay thế phân vùng </strong> <br/> Thay thế phân vùng bằng %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1328"/> + <source>This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source> + <translation>Thiết bị lÆ°u trữ nà y có %1 trên đó. Bạn muốn là m gì? <br/> Bạn sẽ có thể xem lại và xác nháºn lá»±a chá»n của mình trÆ°á»›c khi thá»±c hiện bất kỳ thay đổi nà o đối vá»›i thiết bị lÆ°u trữ.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1351"/> + <source>This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source> + <translation>Thiết bị lÆ°u trữ nà y đã có hệ Ä‘iá»u hà nh trên đó. Bạn muốn là m gì? <br/> Bạn sẽ có thể xem lại và xác nháºn lá»±a chá»n của mình trÆ°á»›c khi thá»±c hiện bất kỳ thay đổi nà o đối vá»›i thiết bị lÆ°u trữ.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1376"/> + <source>This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source> + <translation>Thiết bị lÆ°u trữ nà y có nhiá»u hệ Ä‘iá»u hà nh trên đó. Bạn muốn là m gì? <br/> Bạn sẽ có thể xem lại và xác nháºn lá»±a chá»n của mình trÆ°á»›c khi thá»±c hiện bất kỳ thay đổi nà o đối vá»›i thiết bị lÆ°u trữ.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> + <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> + <translation>Thiết bị lÆ°u trữ nà y đã có sẵn hệ Ä‘iá»u hà nh, nhÆ°ng bảng phân vùng <strong> %1 </strong> khác vá»›i bảng <strong> %2 </strong> cần thiết. <br/></translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> + <source>This storage device has one of its partitions <strong>mounted</strong>.</source> + <translation>Thiết bị lÆ°u trữ nà y có má»™t trong các phân vùng được <strong> gắn kết </strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/> + <source>This storage device is a part of an <strong>inactive RAID</strong> device.</source> + <translation>Thiết bị lÆ°u trữ nà y là má»™t phần của thiết bị <strong> RAID không hoạt Ä‘á»™ng </strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/> + <source>No Swap</source> + <translation>Không hoán đổi</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1611"/> + <source>Reuse Swap</source> + <translation>Sá» dụng lại Hoán đổi</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1614"/> + <source>Swap (no Hibernate)</source> + <translation>Hoán đổi (không ngủ đông)</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1617"/> + <source>Swap (with Hibernate)</source> + <translation>Hoán đổi (ngủ đông)</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1620"/> + <source>Swap to file</source> + <translation>Hoán đổi sang tệp</translation> + </message> + </context> + <context> + <name>ClearMountsJob</name> + <message> + <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="42"/> + <source>Clear mounts for partitioning operations on %1</source> + <translation>Xóa gắn kết cho các hoạt Ä‘á»™ng phân vùng trên %1</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="49"/> + <source>Clearing mounts for partitioning operations on %1.</source> + <translation>Xóa các gắn kết cho các hoạt Ä‘á»™ng phân vùng trên %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="224"/> + <source>Cleared all mounts for %1</source> + <translation>Äã xóa tất cả các gắn kết cho %1</translation> + </message> + </context> + <context> + <name>ClearTempMountsJob</name> + <message> + <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="32"/> + <source>Clear all temporary mounts.</source> + <translation>Xóa tất cả các gắn kết tạm thá»i.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="39"/> + <source>Clearing all temporary mounts.</source> + <translation>Äang xóa tất cả các gắn kết tạm thá»i.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="51"/> + <source>Cannot get list of temporary mounts.</source> + <translation>Không thể lấy danh sách các gắn kết tạm thá»i.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="92"/> + <source>Cleared all temporary mounts.</source> + <translation>Xóa tất cả các gắn kết tạm thá»i.</translation> + </message> + </context> + <context> + <name>CommandList</name> + <message> + <location filename="../src/libcalamares/utils/CommandList.cpp" line="142"/> + <location filename="../src/libcalamares/utils/CommandList.cpp" line="155"/> + <source>Could not run command.</source> + <translation>Không thể chạy lệnh.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CommandList.cpp" line="143"/> + <source>The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined.</source> + <translation>Lệnh chạy trong môi trÆ°á»ng máy chủ và cần biết Ä‘Æ°á»ng dẫn gốc, nhÆ°ng không có biến rootMountPoint nà o được xác định.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CommandList.cpp" line="156"/> + <source>The command needs to know the user's name, but no username is defined.</source> + <translation>Lệnh cần biết tên của ngÆ°á»i dùng, nhÆ°ng không có tên ngÆ°á»i dùng nà o được xác định.</translation> + </message> + </context> + <context> + <name>Config</name> + <message> + <location filename="../src/modules/keyboard/Config.cpp" line="340"/> + <source>Set keyboard model to %1.<br/></source> + <translation>Thiệt láºp bà n phÃm kiểu %1.<br/></translation> + </message> + <message> + <location filename="../src/modules/keyboard/Config.cpp" line="347"/> + <source>Set keyboard layout to %1/%2.</source> + <translation>Thiết láºp bố cục bà n phÃm thà nh %1/%2.</translation> + </message> + <message> + <location filename="../src/modules/locale/Config.cpp" line="334"/> + <source>Set timezone to %1/%2.</source> + <translation>Thiết láºp múi giá» sang %1/%2.</translation> + </message> + <message> + <location filename="../src/modules/locale/Config.cpp" line="372"/> + <source>The system language will be set to %1.</source> + <translation>Ngôn ngữ hệ thống sẽ được đặt thà nh %1.</translation> + </message> + <message> + <location filename="../src/modules/locale/Config.cpp" line="379"/> + <source>The numbers and dates locale will be set to %1.</source> + <translation>Äịnh dạng ngôn ngữ của số và ngà y tháng sẽ được chuyển thà nh %1.</translation> + </message> + <message> + <location filename="../src/modules/netinstall/Config.cpp" line="38"/> + <source>Network Installation. (Disabled: Incorrect configuration)</source> + <translation>Cà i đặt mạng. (Tắt: Sai cấu hình)</translation> + </message> + <message> + <location filename="../src/modules/netinstall/Config.cpp" line="40"/> + <source>Network Installation. (Disabled: Received invalid groups data)</source> + <translation>Cà i đặt mạng. (Tắt: Nháºn được dữ liệu nhóm bị sai)</translation> + </message> + <message> + <location filename="../src/modules/netinstall/Config.cpp" line="42"/> + <source>Network Installation. (Disabled: internal error)</source> + <translation>Cà i đặt mạng. (Tắt: Lá»—i ná»™i bá»™)</translation> + </message> + <message> + <location filename="../src/modules/netinstall/Config.cpp" line="44"/> + <source>Network Installation. (Disabled: Unable to fetch package lists, check your network connection)</source> + <translation>Cà i đặt mạng. (Tắt: Không thể lấy được danh sách gói ứng dụng, kiểm tra kết nối mạng)</translation> + </message> + <message> + <location filename="../src/modules/welcome/Config.cpp" line="50"/> + <source>This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a></source> + <translation>Máy tÃnh nà y không đạt đủ yêu cấu tối thiểu để thiết láºp %1.<br/>Không thể tiếp tục thiết láºp. <a href="#details">Chi tiết...</a></translation> + </message> + <message> + <location filename="../src/modules/welcome/Config.cpp" line="54"/> + <source>This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a></source> + <translation>Máy tÃnh nà y không đạt đủ yêu cấu tối thiểu để cà i đặt %1.<br/>Không thể tiếp tục cà i đặt. <a href="#details">Chi tiết...</a></translation> + </message> + <message> + <location filename="../src/modules/welcome/Config.cpp" line="61"/> + <source>This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled.</source> + <translation>Máy tÃnh nà y không đạt đủ yêu cấu khuyến nghị để thiết láºp %1.<br/>Thiết láºp có thể tiếp tục, nhÆ°ng má»™t số tÃnh năng có thể sẽ bị tắt.</translation> + </message> + <message> + <location filename="../src/modules/welcome/Config.cpp" line="65"/> + <source>This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled.</source> + <translation>Máy tÃnh nà y không đạt đủ yêu cấu khuyến nghị để cà i đặt %1.<br/>Cà i đặt có thể tiếp tục, nhÆ°ng má»™t số tÃnh năng có thể sẽ bị tắt.</translation> + </message> + <message> + <location filename="../src/modules/welcome/Config.cpp" line="75"/> + <source>This program will ask you some questions and set up %2 on your computer.</source> + <translation>ChÆ°Æ¡ng trình nà y sẽ há»i bạn và i câu há»i và thiết láºp %2 trên máy tÃnh của bạn.</translation> + </message> + <message> + <location filename="../src/modules/welcome/Config.cpp" line="244"/> + <source><h1>Welcome to the Calamares setup program for %1</h1></source> + <translation><h1>Chà o mừng đến vá»›i chÆ°Æ¡ng trình Calamares để thiết láºp %1</h1></translation> + </message> + <message> + <location filename="../src/modules/welcome/Config.cpp" line="245"/> + <source><h1>Welcome to %1 setup</h1></source> + <translation><h1>Chà o mừng đến vá»›i thiết láºp %1 </h1></translation> + </message> + <message> + <location filename="../src/modules/welcome/Config.cpp" line="250"/> + <source><h1>Welcome to the Calamares installer for %1</h1></source> + <translation><h1>Chà o mừng đến vá»›i chÆ°Æ¡ng trình Calamares để cà i đặt %1</h1></translation> + </message> + <message> + <location filename="../src/modules/welcome/Config.cpp" line="251"/> + <source><h1>Welcome to the %1 installer</h1></source> + <translation><h1>Chà o mừng đến vá»›i bá»™ cà i đặt %1 </h1></translation> + </message> + <message> + <location filename="../src/modules/users/Config.cpp" line="164"/> + <source>Your username is too long.</source> + <translation>Tên bạn hÆ¡i dà i.</translation> + </message> + <message> + <location filename="../src/modules/users/Config.cpp" line="170"/> + <source>'%1' is not allowed as username.</source> + <translation>'%1' không được phép dùng là m tên.</translation> + </message> + <message> + <location filename="../src/modules/users/Config.cpp" line="177"/> + <source>Your username must start with a lowercase letter or underscore.</source> + <translation>Tên ngÆ°á»i dùng của bạn phải bắt đầu bằng chữ cái viết thÆ°á»ng hoặc dấu gạch dÆ°á»›i.</translation> + </message> + <message> + <location filename="../src/modules/users/Config.cpp" line="181"/> + <source>Only lowercase letters, numbers, underscore and hyphen are allowed.</source> + <translation>Chỉ cho phép các chữ cái viết thÆ°á»ng, số, gạch dÆ°á»›i và gạch nối.</translation> + </message> + <message> + <location filename="../src/modules/users/Config.cpp" line="227"/> + <source>Your hostname is too short.</source> + <translation>Tên máy chủ quá ngắn.</translation> + </message> + <message> + <location filename="../src/modules/users/Config.cpp" line="231"/> + <source>Your hostname is too long.</source> + <translation>Tên máy chủ quá dà i.</translation> + </message> + <message> + <location filename="../src/modules/users/Config.cpp" line="237"/> + <source>'%1' is not allowed as hostname.</source> + <translation>'%1' không được phép dùng là m tên máy chủ.</translation> + </message> + <message> + <location filename="../src/modules/users/Config.cpp" line="243"/> + <source>Only letters, numbers, underscore and hyphen are allowed.</source> + <translation>Chỉ cho phép các chữ cái, số, gạch dÆ°á»›i và gạch nối.</translation> + </message> + <message> + <location filename="../src/modules/users/Config.cpp" line="446"/> + <source>Your passwords do not match!</source> + <translation>Máºt khẩu nháºp lại không khá»›p!</translation> + </message> + </context> + <context> + <name>ContextualProcessJob</name> + <message> + <location filename="../src/modules/contextualprocess/ContextualProcessJob.cpp" line="119"/> + <source>Contextual Processes Job</source> + <translation>Công việc xá» lý theo ngữ cảnh</translation> + </message> + </context> + <context> + <name>CreatePartitionDialog</name> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="18"/> + <source>Create a Partition</source> + <translation>Tạo phân vùng</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="42"/> + <source>Si&ze:</source> + <translation>&KÃch thÆ°á»›c:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="52"/> + <source> MiB</source> + <translation> MiB</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="59"/> + <source>Partition &Type:</source> + <translation>&Loại phân vùng:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="71"/> + <source>&Primary</source> + <translation>&SÆ¡ cấp</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="81"/> + <source>E&xtended</source> + <translation>&Mở rá»™ng</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="123"/> + <source>Fi&le System:</source> + <translation>&Táºp tin hệ thống:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="155"/> + <source>LVM LV name</source> + <translation>Tên LVM LV</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="165"/> + <source>&Mount Point:</source> + <translation>&Äiểm gắn kết:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="192"/> + <source>Flags:</source> + <translation>Cá»:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="66"/> + <source>En&crypt</source> + <translation>&Mã hóa</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="161"/> + <source>Logical</source> + <translation>Lô-gic</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="166"/> + <source>Primary</source> + <translation>SÆ¡ cấp</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="185"/> + <source>GPT</source> + <translation>GPT</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="265"/> + <source>Mountpoint already in use. Please select another one.</source> + <translation>Äiểm gắn kết đã được sá» dụng. Vui lòng chá»n má»™t cái khác.</translation> + </message> + </context> + <context> + <name>CreatePartitionJob</name> + <message> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="38"/> + <source>Create new %2MiB partition on %4 (%3) with file system %1.</source> + <translation>Tạo phân vùng %2MiB má»›i trên %4 (%3) vá»›i hệ thống tệp %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="49"/> + <source>Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>.</source> + <translation>Tạo phân vùng <strong>%2MiB </strong> má»›i trên <strong>%4 </strong> (%3) vá»›i hệ thống tệp <strong>%1 </strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="61"/> + <source>Creating new %1 partition on %2.</source> + <translation>Tạo phân vùng %1 má»›i trên %2.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="73"/> + <source>The installer failed to create partition on disk '%1'.</source> + <translation>Trình cà i đặt không tạo được phân vùng trên Ä‘Ä©a '%1'.</translation> + </message> + </context> + <context> + <name>CreatePartitionTableDialog</name> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="24"/> + <source>Create Partition Table</source> + <translation>Tạo bảng phân vùng</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="43"/> + <source>Creating a new partition table will delete all existing data on the disk.</source> + <translation>Tạo bảng phân vùng má»›i sẽ xóa tất cả dữ liệu hiện có trên Ä‘Ä©a.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="69"/> + <source>What kind of partition table do you want to create?</source> + <translation>Bạn muốn tạo loại bảng phân vùng nà o?</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="76"/> + <source>Master Boot Record (MBR)</source> + <translation>Bản ghi khởi Ä‘á»™ng chÃnh (MBR)</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="86"/> + <source>GUID Partition Table (GPT)</source> + <translation>Bảng phân vùng GUID (GPT)</translation> + </message> + </context> + <context> + <name>CreatePartitionTableJob</name> + <message> + <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="39"/> + <source>Create new %1 partition table on %2.</source> + <translation>Tạo bảng phân vùng %1 má»›i trên %2.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="47"/> + <source>Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3).</source> + <translation>Tạo bảng phân vùng <strong>%1 </strong> má»›i trên <strong>%2 </strong> (%3).</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="57"/> + <source>Creating new %1 partition table on %2.</source> + <translation>Tạo bảng phân vùng %1 má»›i trên %2.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="75"/> + <source>The installer failed to create a partition table on %1.</source> + <translation>Trình cà i đặt không tạo được bảng phân vùng trên %1.</translation> + </message> + </context> + <context> + <name>CreateUserJob</name> + <message> + <location filename="../src/modules/users/CreateUserJob.cpp" line="40"/> + <source>Create user %1</source> + <translation>Khởi tạo ngÆ°á»i dùng %1</translation> + </message> + <message> + <location filename="../src/modules/users/CreateUserJob.cpp" line="47"/> + <source>Create user <strong>%1</strong>.</source> + <translation>Tạo ngÆ°á»i dùng <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/users/CreateUserJob.cpp" line="54"/> + <source>Creating user %1.</source> + <translation>Äang tạo ngÆ°á»i dùng %1.</translation> + </message> + <message> + <location filename="../src/modules/users/CreateUserJob.cpp" line="186"/> + <source>Cannot create sudoers file for writing.</source> + <translation>Không thể tạo tệp sudoers để viết.</translation> + </message> + <message> + <location filename="../src/modules/users/CreateUserJob.cpp" line="181"/> + <source>Cannot chmod sudoers file.</source> + <translation>Không thể sá»a đổi mod của tệp sudoers.</translation> + </message> + </context> + <context> + <name>CreateVolumeGroupDialog</name> + <message> + <location filename="../src/modules/partition/gui/CreateVolumeGroupDialog.cpp" line="28"/> + <source>Create Volume Group</source> + <translation>Tạo nhóm ổ Ä‘Ä©a</translation> + </message> + </context> + <context> + <name>CreateVolumeGroupJob</name> + <message> + <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="31"/> + <source>Create new volume group named %1.</source> + <translation>Tạo nhóm ổ Ä‘Ä©a má»›i có tên %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="37"/> + <source>Create new volume group named <strong>%1</strong>.</source> + <translation>Tạo nhóm ổ Ä‘Ä©a má»›i có tên <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="43"/> + <source>Creating new volume group named %1.</source> + <translation>Äang tạo nhóm ổ Ä‘Ä©a má»›i có tên %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="55"/> + <source>The installer failed to create a volume group named '%1'.</source> + <translation>Trình cà i đặt không tạo được nhóm ổ Ä‘Ä©a có tên '%1'.</translation> + </message> + </context> + <context> + <name>DeactivateVolumeGroupJob</name> + <message> + <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="24"/> + <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="36"/> + <source>Deactivate volume group named %1.</source> + <translation>Hủy kÃch hoạt nhóm ổ Ä‘Ä©a có tên %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="30"/> + <source>Deactivate volume group named <strong>%1</strong>.</source> + <translation>Hủy kÃch hoạt nhóm ổ Ä‘Ä©a có tên <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="48"/> + <source>The installer failed to deactivate a volume group named %1.</source> + <translation>Trình cà i đặt không thể hủy kÃch hoạt nhóm ổ Ä‘Ä©a có tên %1.</translation> + </message> + </context> + <context> + <name>DeletePartitionJob</name> + <message> + <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="31"/> + <source>Delete partition %1.</source> + <translation>Xóa phân vùng %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="38"/> + <source>Delete partition <strong>%1</strong>.</source> + <translation>Xóa phân vùng <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="45"/> + <source>Deleting partition %1.</source> + <translation>Äang xóa phân vùng %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="56"/> + <source>The installer failed to delete partition %1.</source> + <translation>Trình cà i đặt không thể xóa phân vùng %1.</translation> + </message> + </context> + <context> + <name>DeviceInfoWidget</name> + <message> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="97"/> + <source>This device has a <strong>%1</strong> partition table.</source> + <translation>Thiết bị nà y có bảng phân vùng <strong> %1 </strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="104"/> + <source>This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem.</source> + <translation>Äây là thiết bị <strong> vòng lặp </strong>. <br> <br> Äây là thiết bị giả không có bảng phân vùng giúp tệp có thể truy cáºp được dÆ°á»›i dạng thiết bị khối. Loại thiết láºp nà y thÆ°á»ng chỉ chứa má»™t hệ thống tệp duy nhất.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="111"/> + <source>This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page.</source> + <translation>Trình cà i đặt nà y <strong> không thể phát hiện bảng phân vùng </strong> trên thiết bị lÆ°u trữ đã chá»n. <br> <br> Thiết bị không có bảng phân vùng hoặc bảng phân vùng bị há»ng hoặc thuá»™c loại không xác định. <br> Äiá»u nà y trình cà i đặt có thể tạo bảng phân vùng má»›i cho bạn, tá»± Ä‘á»™ng hoặc thông qua trang phân vùng thủ công.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="121"/> + <source><br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment.</source> + <translation><br> <br> Äây là loại bảng phân vùng được khuyến nghị cho các hệ thống hiện đại bắt đầu từ môi trÆ°á»ng khởi Ä‘á»™ng <strong> EFI </strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="127"/> + <source><br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions.</source> + <translation><br> <br> Loại bảng phân vùng nà y chỉ được khuyến khÃch trên các hệ thống cÅ© hÆ¡n bắt đầu từ môi trÆ°á»ng khởi Ä‘á»™ng <strong> BIOS </strong>. GPT được khuyến nghị trong hầu hết các trÆ°á»ng hợp khác. <br> <br> <strong> Cảnh báo: </strong> bảng phân vùng MBR là tiêu chuẩn thá»i đại MS-DOS lá»—i thá»i. <br> Chỉ có 4 phân vùng <em> chÃnh </em> có thể được tạo và trong số 4 phân vùng đó, má»™t phân vùng có thể là phân vùng <em> mở rá»™ng </em>, đến lượt nó có thể chứa nhiá»u phân vùng <em> logic </em>.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="140"/> + <source>The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred.</source> + <translation>Loại <strong> bảng phân vùng </strong> trên thiết bị lÆ°u trữ đã chá»n. <br> <br> Cách duy nhất để thay đổi loại bảng phân vùng là xóa và tạo lại bảng phân vùng từ đầu, việc nà y sẽ hủy tất cả dữ liệu trên thiết bị lÆ°u trữ. <br> Trình cà i đặt nà y sẽ giữ bảng phân vùng hiện tại trừ khi bạn chá»n rõ rà ng khác. <br> Nếu không chắc chắn, trên các hệ thống hiện đại, GPT được Æ°u tiên hÆ¡n.</translation> + </message> + </context> + <context> + <name>DeviceModel</name> + <message> + <location filename="../src/modules/partition/core/DeviceModel.cpp" line="84"/> + <source>%1 - %2 (%3)</source> + <extracomment>device[name] - size[number] (device-node[name])</extracomment> + <translation>%1 - %2 (%3)</translation> + </message> + <message> + <location filename="../src/modules/partition/core/DeviceModel.cpp" line="95"/> + <source>%1 - (%2)</source> + <extracomment>device[name] - (device-node[name])</extracomment> + <translation>%1 - (%2)</translation> + </message> + </context> + <context> + <name>DracutLuksCfgJob</name> + <message> + <location filename="../src/modules/dracutlukscfg/DracutLuksCfgJob.cpp" line="127"/> + <source>Write LUKS configuration for Dracut to %1</source> + <translation>LÆ°u cấu hình LUKS cho Dracut và o %1</translation> + </message> + <message> + <location filename="../src/modules/dracutlukscfg/DracutLuksCfgJob.cpp" line="131"/> + <source>Skip writing LUKS configuration for Dracut: "/" partition is not encrypted</source> + <translation>Không lÆ°u cấu hình LUKS cho Dracut: phân vùng "/" không được mã hoá</translation> + </message> + <message> + <location filename="../src/modules/dracutlukscfg/DracutLuksCfgJob.cpp" line="148"/> + <source>Failed to open %1</source> + <translation>Mở %1 thất bại</translation> + </message> + </context> + <context> + <name>DummyCppJob</name> + <message> + <location filename="../src/modules/dummycpp/DummyCppJob.cpp" line="37"/> + <source>Dummy C++ Job</source> + <translation>Công việc C++ và dụ</translation> + </message> + </context> + <context> + <name>EditExistingPartitionDialog</name> + <message> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="24"/> + <source>Edit Existing Partition</source> + <translation>Chỉnh sá»a phân vùng hiện có</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="54"/> + <source>Content:</source> + <translation>Ná»™i dung:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="64"/> + <source>&Keep</source> + <translation>&Giữ</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="74"/> + <source>Format</source> + <translation>Äịnh dạng</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="93"/> + <source>Warning: Formatting the partition will erase all existing data.</source> + <translation>Cảnh báo: Äịnh dạng phân vùng sẽ xóa tất cả dữ liệu hiện có.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="103"/> + <source>&Mount Point:</source> + <translation>&Äiểm gắn kết:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="123"/> + <source>Si&ze:</source> + <translation>&KÃch thÆ°á»›c:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="133"/> + <source> MiB</source> + <translation> MiB</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="140"/> + <source>Fi&le System:</source> + <translation>&Táºp tin hệ thống:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="153"/> + <source>Flags:</source> + <translation>Cá»:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.cpp" line="272"/> + <source>Mountpoint already in use. Please select another one.</source> + <translation>Äiểm gắn kết đã được sá» dụng. Vui lòng chá»n má»™t cái khác.</translation> + </message> + </context> + <context> + <name>EncryptWidget</name> + <message> + <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="18"/> + <source>Form</source> + <translation>Biểu mẫu</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="36"/> + <source>En&crypt system</source> + <translation>&Mã hóa hệ thống</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="46"/> + <source>Passphrase</source> + <translation>Cụm máºt khẩu</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="56"/> + <source>Confirm passphrase</source> + <translation>Xác nháºn cụm máºt khẩu</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/EncryptWidget.cpp" line="104"/> + <location filename="../src/modules/partition/gui/EncryptWidget.cpp" line="114"/> + <source>Please enter the same passphrase in both boxes.</source> + <translation>Vui lòng nháºp cùng má»™t cụm máºt khẩu và o cả hai há»™p.</translation> + </message> + </context> + <context> + <name>FillGlobalStorageJob</name> + <message> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="138"/> + <source>Set partition information</source> + <translation>Äặt thông tin phân vùng</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="164"/> + <source>Install %1 on <strong>new</strong> %2 system partition.</source> + <translation>Cà i đặt %1 trên phân vùng hệ thống <strong> má»›i </strong> %2.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="170"/> + <source>Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>.</source> + <translation>Thiết láºp phân vùng <strong> má»›i </strong> %2 vá»›i Ä‘iểm gắn kết <strong> %1 </strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="180"/> + <source>Install %2 on %3 system partition <strong>%1</strong>.</source> + <translation>Cà i đặt %2 trên phân vùng hệ thống %3 <strong> %1 </strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="187"/> + <source>Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>.</source> + <translation>Thiết láºp phân vùng %3 <strong> %1 </strong> vá»›i Ä‘iểm gắn kết <strong> %2 </strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="200"/> + <source>Install boot loader on <strong>%1</strong>.</source> + <translation>Cà i đặt trình tải khởi Ä‘á»™ng trên <strong> %1 </strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="209"/> + <source>Setting up mount points.</source> + <translation>Thiết láºp Ä‘iểm gắn kết.</translation> + </message> + </context> + <context> + <name>FinishedPage</name> + <message> + <location filename="../src/modules/finished/FinishedPage.ui" line="18"/> + <source>Form</source> + <translation>Biểu mẫu</translation> + </message> + <message> + <location filename="../src/modules/finished/FinishedPage.ui" line="102"/> + <source>&Restart now</source> + <translation>&Khởi Ä‘á»™ng lại ngay</translation> + </message> + <message> + <location filename="../src/modules/finished/FinishedPage.cpp" line="44"/> + <source><h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system.</source> + <translation><h1>Hoà n thà nh.</h1><br/>%1 đã được cà i đặt thà nh công.<br/>Hãy khởi Ä‘á»™ng lại máy tÃnh.</translation> + </message> + <message> + <location filename="../src/modules/finished/FinishedPage.cpp" line="48"/> + <source><html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html></source> + <translation><html><head/><body><p>TÃch chá»n để khởi Ä‘á»™ng lại sau khi ấn <span style="font-style:italic;">Hoà n thà nh</span> hoặc đóng phần má»m thiết láºp.</p></body></html></translation> + </message> + <message> + <location filename="../src/modules/finished/FinishedPage.cpp" line="54"/> + <source><h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment.</source> + <translation><h1>Hoà n thà nh.</h1><br/>%1 đã được cà i đặt trên máy.<br/>hãy khởi Ä‘á»™ng lại, hoặc cÅ©ng có thể tiếp tục sá» dụng %2 môi trÆ°á»ng USB.</translation> + </message> + <message> + <location filename="../src/modules/finished/FinishedPage.cpp" line="59"/> + <source><html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html></source> + <translation><html><head/><body><p>TÃch chá»n để khởi Ä‘á»™ng lại sau khi ấn <span style="font-style:italic;">Hoà n thà nh</span> hoặc đóng phần má»m cà i đặt.</p></body></html></translation> + </message> + <message> + <location filename="../src/modules/finished/FinishedPage.cpp" line="116"/> + <source><h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2.</source> + <translation><h1>Thiết láºp lá»—i</h1><br/>%1 đã không được thiết láºp trên máy tÃnh.<br/>tin báo lá»—i: %2.</translation> + </message> + <message> + <location filename="../src/modules/finished/FinishedPage.cpp" line="122"/> + <source><h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2.</source> + <translation><h1>Cà i đặt lá»—i</h1><br/>%1 chÆ°a được cà i đặt trên máy tÃnh<br/>Tin báo lá»—i: %2.</translation> + </message> + </context> + <context> + <name>FinishedViewStep</name> + <message> + <location filename="../src/modules/finished/FinishedViewStep.cpp" line="67"/> + <source>Finish</source> + <translation>Hoà n thà nh</translation> + </message> + <message> + <location filename="../src/modules/finished/FinishedViewStep.cpp" line="125"/> + <source>Setup Complete</source> + <translation>Thiết láºp xong</translation> + </message> + <message> + <location filename="../src/modules/finished/FinishedViewStep.cpp" line="125"/> + <source>Installation Complete</source> + <translation>Cà i đặt xong</translation> + </message> + <message> + <location filename="../src/modules/finished/FinishedViewStep.cpp" line="127"/> + <source>The setup of %1 is complete.</source> + <translation>Thiết láºp %1 đã xong.</translation> + </message> + <message> + <location filename="../src/modules/finished/FinishedViewStep.cpp" line="128"/> + <source>The installation of %1 is complete.</source> + <translation>Cà i đặt của %1 đã xong.</translation> + </message> + </context> + <context> + <name>FormatPartitionJob</name> + <message> + <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="36"/> + <source>Format partition %1 (file system: %2, size: %3 MiB) on %4.</source> + <translation>Äịnh dạng phân vùng %1 (táºp tin hệ thống:%2, kÃch thÆ°á»›c: %3 MiB) trên %4.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="47"/> + <source>Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>.</source> + <translation>Äịnh dạng <strong>%3MiB</strong> phân vùng <strong>%1</strong>vá»›i táºp tin hệ thống <strong>%2</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="58"/> + <source>Formatting partition %1 with file system %2.</source> + <translation>Äang định dạng phân vùng %1 vá»›i táºp tin hệ thống %2.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="72"/> + <source>The installer failed to format partition %1 on disk '%2'.</source> + <translation>Không thể định dạng %1 ở Ä‘Ä©a '%2'.</translation> + </message> + </context> + <context> + <name>GeneralRequirements</name> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="149"/> + <source>has at least %1 GiB available drive space</source> + <translation>có Ãt nhất %1 GiB dung lượng ổ Ä‘Ä©a khả dụng</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="151"/> + <source>There is not enough drive space. At least %1 GiB is required.</source> + <translation>Không có đủ dung lượng ổ Ä‘Ä©a. Ãt nhất %1 GiB là bắt buá»™c.</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="160"/> + <source>has at least %1 GiB working memory</source> + <translation>có Ãt nhất %1 GiB bá»™ nhá»› là m việc</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="162"/> + <source>The system does not have enough working memory. At least %1 GiB is required.</source> + <translation>Hệ thống không có đủ bá»™ nhá»› hoạt Ä‘á»™ng. Ãt nhất %1 GiB là bắt buá»™c.</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="171"/> + <source>is plugged in to a power source</source> + <translation>được cắm và o nguồn Ä‘iện</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="172"/> + <source>The system is not plugged in to a power source.</source> + <translation>Hệ thống chÆ°a được cắm và o nguồn Ä‘iện.</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="179"/> + <source>is connected to the Internet</source> + <translation>được kết nối vá»›i Internet</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="180"/> + <source>The system is not connected to the Internet.</source> + <translation>Hệ thống không được kết nối vá»›i Internet.</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="187"/> + <source>is running the installer as an administrator (root)</source> + <translation>Ä‘ang chạy trình cà i đặt vá»›i tÆ° cách quản trị viên (root)</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="190"/> + <source>The setup program is not running with administrator rights.</source> + <translation>ChÆ°Æ¡ng trình thiết láºp không chạy vá»›i quyá»n quản trị viên.</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="191"/> + <source>The installer is not running with administrator rights.</source> + <translation>Trình cà i đặt không chạy vá»›i quyá»n quản trị viên.</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="199"/> + <source>has a screen large enough to show the whole installer</source> + <translation>có mà n hình đủ lá»›n để hiển thị toà n bá»™ trình cà i đặt</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="202"/> + <source>The screen is too small to display the setup program.</source> + <translation>Mà n hình quá nhỠđể hiển thị chÆ°Æ¡ng trình cà i đặt.</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="203"/> + <source>The screen is too small to display the installer.</source> + <translation>Mà n hình quá nhỠđể hiển thị trình cà i đặt.</translation> + </message> + </context> + <context> + <name>HostInfoJob</name> + <message> + <location filename="../src/modules/hostinfo/HostInfoJob.cpp" line="42"/> + <source>Collecting information about your machine.</source> + <translation>Thu tháºp thông tin vá» máy của bạn.</translation> + </message> + </context> + <context> + <name>IDJob</name> + <message> + <location filename="../src/modules/oemid/IDJob.cpp" line="30"/> + <location filename="../src/modules/oemid/IDJob.cpp" line="39"/> + <location filename="../src/modules/oemid/IDJob.cpp" line="52"/> + <location filename="../src/modules/oemid/IDJob.cpp" line="59"/> + <source>OEM Batch Identifier</source> + <translation>Äịnh danh lô OEM</translation> + </message> + <message> + <location filename="../src/modules/oemid/IDJob.cpp" line="40"/> + <source>Could not create directories <code>%1</code>.</source> + <translation>Không thể tạo thÆ° mục <code> %1 </code>.</translation> + </message> + <message> + <location filename="../src/modules/oemid/IDJob.cpp" line="53"/> + <source>Could not open file <code>%1</code>.</source> + <translation>Không thể mở được tệp <code> %1 </code>.</translation> + </message> + <message> + <location filename="../src/modules/oemid/IDJob.cpp" line="60"/> + <source>Could not write to file <code>%1</code>.</source> + <translation>Không thể ghi và o tệp <code> %1 </code>.</translation> + </message> + </context> + <context> + <name>InitcpioJob</name> + <message> + <location filename="../src/modules/initcpio/InitcpioJob.cpp" line="31"/> + <source>Creating initramfs with mkinitcpio.</source> + <translation>Äang tạo initramfs bằng mkinitcpio.</translation> + </message> + </context> + <context> + <name>InitramfsJob</name> + <message> + <location filename="../src/modules/initramfs/InitramfsJob.cpp" line="28"/> + <source>Creating initramfs.</source> + <translation>Äang tạo initramfs.</translation> + </message> + </context> + <context> + <name>InteractiveTerminalPage</name> + <message> + <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="44"/> + <source>Konsole not installed</source> + <translation>Konsole chÆ°a được cà i đặt</translation> + </message> + <message> + <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="44"/> + <source>Please install KDE Konsole and try again!</source> + <translation>Vui lòng cà i đặt KDE Konsole rồi thá» lại!</translation> + </message> + <message> + <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="102"/> + <source>Executing script: &nbsp;<code>%1</code></source> + <translation>Äang thá»±c thi kịch bản: &nbsp;<code>%1</code></translation> + </message> + </context> + <context> + <name>InteractiveTerminalViewStep</name> + <message> + <location filename="../src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp" line="41"/> + <source>Script</source> + <translation>Kịch bản</translation> + </message> + </context> + <context> + <name>KeyboardPage</name> + <message> + <location filename="../src/modules/keyboard/KeyboardPage.cpp" line="204"/> + <source>Set keyboard model to %1.<br/></source> + <translation>Thiết láºp bà n phÃm kiểu %1.<br/></translation> + </message> + <message> + <location filename="../src/modules/keyboard/KeyboardPage.cpp" line="208"/> + <source>Set keyboard layout to %1/%2.</source> + <translation>Thiết láºp bố cục bà n phÃm thà nh %1/%2.</translation> + </message> + </context> + <context> + <name>KeyboardQmlViewStep</name> + <message> + <location filename="../src/modules/keyboardq/KeyboardQmlViewStep.cpp" line="33"/> + <source>Keyboard</source> + <translation>Bà n phÃm</translation> + </message> + </context> + <context> + <name>KeyboardViewStep</name> + <message> + <location filename="../src/modules/keyboard/KeyboardViewStep.cpp" line="45"/> + <source>Keyboard</source> + <translation>Bà n phÃm</translation> + </message> + </context> + <context> + <name>LCLocaleDialog</name> + <message> + <location filename="../src/modules/locale/LCLocaleDialog.cpp" line="23"/> + <source>System locale setting</source> + <translation>Cà i đặt ngôn ngữ hệ thống</translation> + </message> + <message> + <location filename="../src/modules/locale/LCLocaleDialog.cpp" line="30"/> + <source>The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>.</source> + <translation>Thiết láºp ngôn ngữ hệ thống ảnh hưởng tá»›i ngôn ngữ và bá»™ kà tá»± của má»™t và i thà nh phần trong giao diện dòng lệnh cho ngÆ°á»i dùng.<br/>Thiết láºp hiện tại là <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/locale/LCLocaleDialog.cpp" line="54"/> + <source>&Cancel</source> + <translation>&Huá»· bá»</translation> + </message> + <message> + <location filename="../src/modules/locale/LCLocaleDialog.cpp" line="55"/> + <source>&OK</source> + <translation>&OK</translation> + </message> + </context> + <context> + <name>LicensePage</name> + <message> + <location filename="../src/modules/license/LicensePage.ui" line="18"/> + <source>Form</source> + <translation>Biểu mẫu</translation> + </message> + <message> + <location filename="../src/modules/license/LicensePage.ui" line="26"/> + <source><h1>License Agreement</h1></source> + <translation><h1>Äiá»u khoản giấy phép</h1></translation> + </message> + <message> + <location filename="../src/modules/license/LicensePage.cpp" line="136"/> + <source>I accept the terms and conditions above.</source> + <translation>Tôi đồng ý vá»›i Ä‘iá»u khoản và điá»u kiện trên.</translation> + </message> + <message> + <location filename="../src/modules/license/LicensePage.cpp" line="138"/> + <source>Please review the End User License Agreements (EULAs).</source> + <translation>Vui lòng Ä‘á»c thoả thuáºn giấy phép ngÆ°á»i dùng cuối (EULAs).</translation> + </message> + <message> + <location filename="../src/modules/license/LicensePage.cpp" line="143"/> + <source>This setup procedure will install proprietary software that is subject to licensing terms.</source> + <translation>Quy trình thiết láºp nà y sẽ cà i đặt phần má»m Ä‘á»™c quyá»n tuân theo các Ä‘iá»u khoản cấp phép.</translation> + </message> + <message> + <location filename="../src/modules/license/LicensePage.cpp" line="146"/> + <source>If you do not agree with the terms, the setup procedure cannot continue.</source> + <translation>Nếu bạn không đồng ý vá»›i các Ä‘iá»u khoản, quy trình thiết láºp không thể tiếp tục.</translation> + </message> + <message> + <location filename="../src/modules/license/LicensePage.cpp" line="151"/> + <source>This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience.</source> + <translation>Quy trình thiết láºp nà y có thể cà i đặt phần má»m Ä‘á»™c quyá»n tuân theo các Ä‘iá»u khoản cấp phép để cung cấp các tÃnh năng bổ sung và nâng cao trải nghiệm ngÆ°á»i dùng.</translation> + </message> + <message> + <location filename="../src/modules/license/LicensePage.cpp" line="156"/> + <source>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead.</source> + <translation>Nếu bạn không đồng ý vá»›i các Ä‘iá»u khoản, phần má»m Ä‘á»™c quyá»n sẽ không được cà i đặt và các giải pháp thay thế nguồn mở sẽ được sá» dụng thay thế.</translation> + </message> + </context> + <context> + <name>LicenseViewStep</name> + <message> + <location filename="../src/modules/license/LicenseViewStep.cpp" line="43"/> + <source>License</source> + <translation>Giấy phép</translation> + </message> + </context> + <context> + <name>LicenseWidget</name> + <message> + <location filename="../src/modules/license/LicenseWidget.cpp" line="87"/> + <source>URL: %1</source> + <translation>URL: %1</translation> + </message> + <message> + <location filename="../src/modules/license/LicenseWidget.cpp" line="108"/> + <source><strong>%1 driver</strong><br/>by %2</source> + <extracomment>%1 is an untranslatable product name, example: Creative Audigy driver</extracomment> + <translation><strong>trình Ä‘iá»u khiển %1</strong><br/>bởi %2</translation> + </message> + <message> + <location filename="../src/modules/license/LicenseWidget.cpp" line="115"/> + <source><strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font></source> + <extracomment>%1 is usually a vendor name, example: Nvidia graphics driver</extracomment> + <translation><strong>trình Ä‘iá»u khiển đồ hoạc %1</strong><br/><font color="Grey">bởi %2</font></translation> + </message> + <message> + <location filename="../src/modules/license/LicenseWidget.cpp" line="121"/> + <source><strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font></source> + <translation><strong>plugin trình duyệt %1</strong><br/><font color="Grey">bởi %2</font></translation> + </message> + <message> + <location filename="../src/modules/license/LicenseWidget.cpp" line="127"/> + <source><strong>%1 codec</strong><br/><font color="Grey">by %2</font></source> + <translation><strong>%1 codec</strong><br/><font color="Grey">bởi %2</font></translation> + </message> + <message> + <location filename="../src/modules/license/LicenseWidget.cpp" line="133"/> + <source><strong>%1 package</strong><br/><font color="Grey">by %2</font></source> + <translation><strong>gói %1</strong><br/><font color="Grey">bởi %2</font></translation> + </message> + <message> + <location filename="../src/modules/license/LicenseWidget.cpp" line="139"/> + <source><strong>%1</strong><br/><font color="Grey">by %2</font></source> + <translation><strong>%1</strong><br/><font color="Grey">bởi %2</font></translation> + </message> + <message> + <location filename="../src/modules/license/LicenseWidget.cpp" line="162"/> + <source>File: %1</source> + <translation>Tệp: %1</translation> + </message> + <message> + <location filename="../src/modules/license/LicenseWidget.cpp" line="185"/> + <source>Hide license text</source> + <translation>Ẩn thông tin giấy phép</translation> + </message> + <message> + <location filename="../src/modules/license/LicenseWidget.cpp" line="185"/> + <source>Show the license text</source> + <translation>Hiện thông tin giấy phép</translation> + </message> + <message> + <location filename="../src/modules/license/LicenseWidget.cpp" line="189"/> + <source>Open license agreement in browser.</source> + <translation>Mở Ä‘iá»u khoản giấy phép trên trình duyệt.</translation> + </message> + </context> + <context> + <name>LocalePage</name> + <message> + <location filename="../src/modules/locale/LocalePage.cpp" line="124"/> + <source>Region:</source> + <translation>Khu vá»±c:</translation> + </message> + <message> + <location filename="../src/modules/locale/LocalePage.cpp" line="125"/> + <source>Zone:</source> + <translation>Vùng:</translation> + </message> + <message> + <location filename="../src/modules/locale/LocalePage.cpp" line="126"/> + <location filename="../src/modules/locale/LocalePage.cpp" line="127"/> + <source>&Change...</source> + <translation>&Thay đổi...</translation> + </message> + </context> + <context> + <name>LocaleQmlViewStep</name> + <message> + <location filename="../src/modules/localeq/LocaleQmlViewStep.cpp" line="32"/> + <source>Location</source> + <translation>Vị trÃ</translation> + </message> + </context> + <context> + <name>LocaleViewStep</name> + <message> + <location filename="../src/modules/locale/LocaleViewStep.cpp" line="76"/> + <source>Location</source> + <translation>Vị trÃ</translation> + </message> + </context> + <context> + <name>LuksBootKeyFileJob</name> + <message> + <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="28"/> + <source>Configuring LUKS key file.</source> + <translation>Äịnh cấu hình tệp khóa LUKS.</translation> + </message> + <message> + <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="145"/> + <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="153"/> + <source>No partitions are defined.</source> + <translation>Không có phân vùng nà o được xác định.</translation> + </message> + <message> + <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="181"/> + <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="188"/> + <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="196"/> + <source>Encrypted rootfs setup error</source> + <translation>Lá»—i thiết láºp rootfs mã hóa</translation> + </message> + <message> + <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="182"/> + <source>Root partition %1 is LUKS but no passphrase has been set.</source> + <translation>Phân vùng gốc %1 là LUKS nhÆ°ng không có cụm máºt khẩu nà o được đặt.</translation> + </message> + <message> + <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="189"/> + <source>Could not create LUKS key file for root partition %1.</source> + <translation>Không thể tạo tệp khóa LUKS cho phân vùng gốc %1.</translation> + </message> + <message> + <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="197"/> + <source>Could not configure LUKS key file on partition %1.</source> + <translation>Không thể định cấu hình tệp khóa LUKS trên phân vùng %1.</translation> + </message> + </context> + <context> + <name>MachineIdJob</name> + <message> + <location filename="../src/modules/machineid/MachineIdJob.cpp" line="37"/> + <source>Generate machine-id.</source> + <translation>Tạo ID máy.</translation> + </message> + <message> + <location filename="../src/modules/machineid/MachineIdJob.cpp" line="53"/> + <source>Configuration Error</source> + <translation>Lá»—i cấu hình</translation> + </message> + <message> + <location filename="../src/modules/machineid/MachineIdJob.cpp" line="54"/> + <source>No root mount point is set for MachineId.</source> + <translation>Không có Ä‘iểm gắn kết gốc nà o được đặt cho ID máy</translation> + </message> + </context> + <context> + <name>Map</name> + <message> + <location filename="../src/modules/localeq/Map.qml" line="243"/> + <source>Timezone: %1</source> + <translation>Múi giá»: %1</translation> + </message> + <message> + <location filename="../src/modules/localeq/Map.qml" line="264"/> + <source>Please select your preferred location on the map so the installer can suggest the locale + and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging + to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.</source> + <translation>Vui lòng chá»n vị trà ưa thÃch của bạn trên bản đồ để trình cà i đặt có thể Ä‘á» xuất ngôn ngữ + và cà i đặt múi giá» cho bạn. Bạn có thể tinh chỉnh các cà i đặt được Ä‘á» xuất bên dÆ°á»›i. Tìm kiếm bản đồ bằng cách kéo + để di chuyển và sá» dụng các nút +/- để phóng to / thu nhá» hoặc sá» dụng cuá»™n chuá»™t để phóng to.</translation> + </message> + </context> + <context> + <name>NetInstallViewStep</name> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="47"/> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="54"/> + <source>Package selection</source> + <translation>Chá»n phân vùng</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="55"/> + <source>Office software</source> + <translation>Phần má»m văn phòng</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="56"/> + <source>Office package</source> + <translation>Gói văn phòng</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="57"/> + <source>Browser software</source> + <translation>Phần má»m trình duyệt</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="58"/> + <source>Browser package</source> + <translation>Gói trình duyệt</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="59"/> + <source>Web browser</source> + <translation>Trình duyệt web</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="60"/> + <source>Kernel</source> + <translation>Lõi</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="61"/> + <source>Services</source> + <translation>Dịch vụ</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="62"/> + <source>Login</source> + <translation>Äăng nháºp</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="63"/> + <source>Desktop</source> + <translation>Mà n hình chÃnh</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="64"/> + <source>Applications</source> + <translation>Ứng dụng</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="65"/> + <source>Communication</source> + <translation>Cá»™ng đồng</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="66"/> + <source>Development</source> + <translation>Phát triển</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="67"/> + <source>Office</source> + <translation>Văn phòng</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="68"/> + <source>Multimedia</source> + <translation>Äa phÆ°Æ¡ng tiện</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="69"/> + <source>Internet</source> + <translation>Mạng Internet</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="70"/> + <source>Theming</source> + <translation>Chủ Ä‘á»</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="71"/> + <source>Gaming</source> + <translation>Trò chÆ¡i</translation> + </message> + <message> + <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="72"/> + <source>Utilities</source> + <translation>Tiện Ãch</translation> + </message> + </context> + <context> + <name>NotesQmlViewStep</name> + <message> + <location filename="../src/modules/notesqml/NotesQmlViewStep.cpp" line="23"/> + <source>Notes</source> + <translation>Ghi chú</translation> + </message> + </context> + <context> + <name>OEMPage</name> + <message> + <location filename="../src/modules/oemid/OEMPage.ui" line="32"/> + <source>Ba&tch:</source> + <translation>&Lô:</translation> + </message> + <message> + <location filename="../src/modules/oemid/OEMPage.ui" line="42"/> + <source><html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html></source> + <translation><html><head/><body> <p> Nháºp số nháºn dạng lô tại đây. Äiá»u nà y sẽ được lÆ°u trữ trong hệ thống Ä‘Ãch. </p> </body> </html></translation> + </message> + <message> + <location filename="../src/modules/oemid/OEMPage.ui" line="52"/> + <source><html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html></source> + <translation><html><head/><body> <h1> Cấu hình OEM </h1> <p> Calamares sẽ sá» dụng cà i đặt OEM trong khi định cấu hình hệ thống Ä‘Ãch. </p> </body> </html></translation> + </message> + </context> + <context> + <name>OEMViewStep</name> + <message> + <location filename="../src/modules/oemid/OEMViewStep.cpp" line="122"/> + <source>OEM Configuration</source> + <translation>Cấu hình OEM</translation> + </message> + <message> + <location filename="../src/modules/oemid/OEMViewStep.cpp" line="128"/> + <source>Set the OEM Batch Identifier to <code>%1</code>.</source> + <translation>Äặt số nháºn dạng lô OEM thà nh <code> %1 </code>.</translation> + </message> + </context> + <context> + <name>Offline</name> + <message> + <location filename="../src/modules/localeq/Offline.qml" line="37"/> + <source>Select your preferred Region, or use the default one based on your current location.</source> + <translation>Chá»n khu vá»±c Æ°a thÃch của bạn hoặc sá» dụng khu vá»±c mặc định dá»±a trên vị trà hiện tại của bạn.</translation> + </message> + <message> + <location filename="../src/modules/localeq/Offline.qml" line="94"/> + <location filename="../src/modules/localeq/Offline.qml" line="169"/> + <location filename="../src/modules/localeq/Offline.qml" line="213"/> + <source>Timezone: %1</source> + <translation>Múi giá»: %1</translation> + </message> + <message> + <location filename="../src/modules/localeq/Offline.qml" line="111"/> + <source>Select your preferred Zone within your Region.</source> + <translation>Chá»n vùng Æ°a thÃch của bạn trong khu vá»±c của bạn.</translation> + </message> + <message> + <location filename="../src/modules/localeq/Offline.qml" line="182"/> + <source>Zones</source> + <translation>Vùng</translation> + </message> + <message> + <location filename="../src/modules/localeq/Offline.qml" line="229"/> + <source>You can fine-tune Language and Locale settings below.</source> + <translation>Bạn có thể tinh chỉnh cà i đặt Ngôn ngữ và Bản địa bên dÆ°á»›i.</translation> + </message> + </context> + <context> + <name>PWQ</name> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="51"/> + <source>Password is too short</source> + <translation>Máºt khẩu quá ngắn</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="67"/> + <source>Password is too long</source> + <translation>Máºt khẩu quá dà i</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="143"/> + <source>Password is too weak</source> + <translation>Máºt khẩu quá yếu</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="151"/> + <source>Memory allocation error when setting '%1'</source> + <translation>Lá»—i phân bổ bá»™ nhá»› khi cà i đặt '%1'</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="156"/> + <source>Memory allocation error</source> + <translation>Lá»—i phân bổ bá»™ nhá»›</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="158"/> + <source>The password is the same as the old one</source> + <translation>Máºt khẩu giống vá»›i máºt khẩu cÅ©</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="160"/> + <source>The password is a palindrome</source> + <translation>Máºt khẩu là chuá»—i đối xứng</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="162"/> + <source>The password differs with case changes only</source> + <translation>Máºt khẩu chỉ khác khi thay đổi chữ hoa chữ thÆ°á»ng</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="164"/> + <source>The password is too similar to the old one</source> + <translation>Máºt khẩu giống máºt khẩu cÅ©</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="166"/> + <source>The password contains the user name in some form</source> + <translation>Máºt khẩu chứa tên ngÆ°á»i dùng ở má»™t số dạng</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="168"/> + <source>The password contains words from the real name of the user in some form</source> + <translation>Máºt khẩu chứa các từ từ tên tháºt của ngÆ°á»i dùng dÆ°á»›i má»™t số hình thức</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="171"/> + <source>The password contains forbidden words in some form</source> + <translation>Máºt khẩu chứa các từ bị cấm dÆ°á»›i má»™t số hình thức</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="175"/> + <source>The password contains less than %1 digits</source> + <translation>Máºt khẩu chứa Ãt hÆ¡n %1 ký tá»±</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="178"/> + <source>The password contains too few digits</source> + <translation>Máºt khẩu chứa quá Ãt ký tá»±</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="182"/> + <source>The password contains less than %1 uppercase letters</source> + <translation>Máºt khẩu có Ãt nhất %1 chữ viết hoa</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="185"/> + <source>The password contains too few uppercase letters</source> + <translation>Máºt khẩu chứa quá Ãt chữ hoa</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="189"/> + <source>The password contains less than %1 lowercase letters</source> + <translation>Máºt khẩu chứa Ãt hÆ¡n %1 chữ thÆ°á»ng</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="192"/> + <source>The password contains too few lowercase letters</source> + <translation>Máºt khẩu chứa quá Ãt chữ thÆ°á»ng</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="196"/> + <source>The password contains less than %1 non-alphanumeric characters</source> + <translation>Máºt khẩu chứa Ãt hÆ¡n %1 ký tá»± không phải chữ và số</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="200"/> + <source>The password contains too few non-alphanumeric characters</source> + <translation>Máºt khẩu chứa quá Ãt ký tá»± không phải chữ và số</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="204"/> + <source>The password is shorter than %1 characters</source> + <translation>Máºt khẩu ngắn hÆ¡n %1 ký tá»±</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="207"/> + <source>The password is too short</source> + <translation>Máºt khẩu quá ngắn</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="209"/> + <source>The password is just rotated old one</source> + <translation>Máºt khẩu vừa được xoay vòng cÅ©</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="213"/> + <source>The password contains less than %1 character classes</source> + <translation>Máºt khẩu chứa Ãt hÆ¡n %1 lá»›p ký tá»±</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="216"/> + <source>The password does not contain enough character classes</source> + <translation>Máºt khẩu không chứa đủ các lá»›p ký tá»±</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="220"/> + <source>The password contains more than %1 same characters consecutively</source> + <translation>Máºt khẩu chứa nhiá»u hÆ¡n %1 ký tá»± giống nhau liên tiếp</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="224"/> + <source>The password contains too many same characters consecutively</source> + <translation>Máºt khẩu chứa quá nhiá»u ký tá»± giống nhau liên tiếp</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="228"/> + <source>The password contains more than %1 characters of the same class consecutively</source> + <translation>Máºt khẩu chứa nhiá»u hÆ¡n %1 ký tá»± của cùng má»™t lá»›p liên tiếp</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="232"/> + <source>The password contains too many characters of the same class consecutively</source> + <translation>Máºt khẩu chứa quá nhiá»u ký tá»± của cùng má»™t lá»›p liên tiếp</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="237"/> + <source>The password contains monotonic sequence longer than %1 characters</source> + <translation>Máºt khẩu chứa chuá»—i Ä‘Æ¡n Ä‘iệu dà i hÆ¡n %1 ký tá»±</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="241"/> + <source>The password contains too long of a monotonic character sequence</source> + <translation>Máºt khẩu chứa má»™t chuá»—i ký tá»± Ä‘Æ¡n Ä‘iệu quá dà i</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="244"/> + <source>No password supplied</source> + <translation>ChÆ°a cung cấp máºt khẩu</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="246"/> + <source>Cannot obtain random numbers from the RNG device</source> + <translation>Không thể lấy số ngẫu nhiên từ thiết bị RNG</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="248"/> + <source>Password generation failed - required entropy too low for settings</source> + <translation>Tạo máºt khẩu không thà nh công - yêu cầu entropy quá thấp để cà i đặt</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="254"/> + <source>The password fails the dictionary check - %1</source> + <translation>Máºt khẩu không kiểm tra được từ Ä‘iển - %1</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="257"/> + <source>The password fails the dictionary check</source> + <translation>Máºt khẩu không kiểm tra được từ Ä‘iển</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="261"/> + <source>Unknown setting - %1</source> + <translation>Cà i đặt không xác định - %1</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="265"/> + <source>Unknown setting</source> + <translation>Cà i đặt không xác định</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="269"/> + <source>Bad integer value of setting - %1</source> + <translation>Giá trị số nguyên không hợp lệ của cà i đặt - %1</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="274"/> + <source>Bad integer value</source> + <translation>Giá trị số nguyên không hợp lệ</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="278"/> + <source>Setting %1 is not of integer type</source> + <translation>Cà i đặt %1 không thuá»™c kiểu số nguyên</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="283"/> + <source>Setting is not of integer type</source> + <translation>Cà i đặt không thuá»™c kiểu số nguyên</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="287"/> + <source>Setting %1 is not of string type</source> + <translation>Cà i đặt %1 không thuá»™c loại chuá»—i</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="292"/> + <source>Setting is not of string type</source> + <translation>Cà i đặt không thuá»™c loại chuá»—i</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="294"/> + <source>Opening the configuration file failed</source> + <translation>Không mở được tệp cấu hình</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="296"/> + <source>The configuration file is malformed</source> + <translation>Tệp cấu hình không đúng định dạng</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="298"/> + <source>Fatal failure</source> + <translation>Thất bại nghiêm trá»ng</translation> + </message> + <message> + <location filename="../src/modules/users/CheckPWQuality.cpp" line="300"/> + <source>Unknown error</source> + <translation>Lá»—i không xác định</translation> + </message> + <message> + <location filename="../src/modules/users/Config.cpp" line="651"/> + <source>Password is empty</source> + <translation>Máºt khẩu trống</translation> + </message> + </context> + <context> + <name>PackageChooserPage</name> + <message> + <location filename="../src/modules/packagechooser/page_package.ui" line="24"/> + <source>Form</source> + <translation>Biểu mẫu</translation> + </message> + <message> + <location filename="../src/modules/packagechooser/page_package.ui" line="44"/> + <source>Product Name</source> + <translation>Tên sản phẩm</translation> + </message> + <message> + <location filename="../src/modules/packagechooser/page_package.ui" line="57"/> + <source>TextLabel</source> + <translation>Nhãn văn bản</translation> + </message> + <message> + <location filename="../src/modules/packagechooser/page_package.ui" line="73"/> + <source>Long Product Description</source> + <translation>Mô tả đầy đủ sản phẩm</translation> + </message> + <message> + <location filename="../src/modules/packagechooser/PackageChooserPage.cpp" line="25"/> + <source>Package Selection</source> + <translation>Lá»±a chá»n gói</translation> + </message> + <message> + <location filename="../src/modules/packagechooser/PackageChooserPage.cpp" line="26"/> + <source>Please pick a product from the list. The selected product will be installed.</source> + <translation>Vui lòng chá»n má»™t sản phẩm từ danh sách. Sản phẩm đã chá»n sẽ được cà i đặt.</translation> + </message> + </context> + <context> + <name>PackageChooserViewStep</name> + <message> + <location filename="../src/modules/packagechooser/PackageChooserViewStep.cpp" line="61"/> + <source>Packages</source> + <translation>Gói</translation> + </message> + </context> + <context> + <name>PackageModel</name> + <message> + <location filename="../src/modules/netinstall/PackageModel.cpp" line="168"/> + <source>Name</source> + <translation>Tên</translation> + </message> + <message> + <location filename="../src/modules/netinstall/PackageModel.cpp" line="168"/> + <source>Description</source> + <translation>Mô tả</translation> + </message> + </context> + <context> + <name>Page_Keyboard</name> + <message> + <location filename="../src/modules/keyboard/KeyboardPage.ui" line="18"/> + <source>Form</source> + <translation>Biểu mẫu</translation> + </message> + <message> + <location filename="../src/modules/keyboard/KeyboardPage.ui" line="74"/> + <source>Keyboard Model:</source> + <translation>Mẫu bà n phÃm:</translation> + </message> + <message> + <location filename="../src/modules/keyboard/KeyboardPage.ui" line="135"/> + <source>Type here to test your keyboard</source> + <translation>Gõ và o đây để thá» bà n phÃm</translation> + </message> + </context> + <context> + <name>Page_UserSetup</name> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="18"/> + <source>Form</source> + <translation>Mẫu</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="40"/> + <source>What is your name?</source> + <translation>Hãy cho Vigo biết tên đầy đủ của bạn?</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="55"/> + <source>Your Full Name</source> + <translation>Tên đầy đủ</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="124"/> + <source>What name do you want to use to log in?</source> + <translation>Bạn sẽ dùng tên nà o để đăng nháºp và o máy tÃnh?</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="148"/> + <source>login</source> + <translation>Tên đăng nháºp</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="223"/> + <source>What is the name of this computer?</source> + <translation>Tên máy tÃnh nà y là ?</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="247"/> + <source><small>This name will be used if you make the computer visible to others on a network.</small></source> + <translation><small>Tên nà y được dùng nếu máy tÃnh được nhìn thấy trong mạng.</small></translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="250"/> + <source>Computer Name</source> + <translation>Tên máy</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="325"/> + <source>Choose a password to keep your account safe.</source> + <translation>Chá»n má»™t máºt khẩu để giữ an toà n cho tà i khoản của bạn.</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="349"/> + <location filename="../src/modules/users/page_usersetup.ui" line="374"/> + <source><small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small></source> + <translation><small>Nháºp máºt khẩu hai lần giống nhau để kiểm tra nếu gõ sai.Má»™t máºt khẩu tốt được kết hợp giữ ký tá»±, số và ký tá»± đặc biệt; Ãt nhất 8 ký tá»± và nên được thay đổi định kỳ.</small></translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="355"/> + <location filename="../src/modules/users/page_usersetup.ui" line="525"/> + <source>Password</source> + <translation>Máºt khẩu</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="380"/> + <location filename="../src/modules/users/page_usersetup.ui" line="550"/> + <source>Repeat Password</source> + <translation>Nháºp lại máºt khẩu</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="455"/> + <source>When this box is checked, password-strength checking is done and you will not be able to use a weak password.</source> + <translation>Khi chá»n mục nà y, bạn có thể chá»n máºt khẩu yếu.</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="458"/> + <source>Require strong passwords.</source> + <translation>Yêu cầu máºt khẩu mạnh.</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="465"/> + <source>Log in automatically without asking for the password.</source> + <translation>Tá»± đăng nháºt không cần máºt khẩu.</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="472"/> + <source>Use the same password for the administrator account.</source> + <translation>Dùng cùng má»™t máºt khẩu cho tà i khoản quản trị.</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="495"/> + <source>Choose a password for the administrator account.</source> + <translation>Chá»n má»™t máºt khẩu cho tà i khoản quản trị.</translation> + </message> + <message> + <location filename="../src/modules/users/page_usersetup.ui" line="519"/> + <location filename="../src/modules/users/page_usersetup.ui" line="544"/> + <source><small>Enter the same password twice, so that it can be checked for typing errors.</small></source> + <translation><small>Nháºp máºt khẩu hai lần giống nhau để kiểm tra nếu gõ sai.</small></translation> + </message> + </context> + <context> + <name>PartitionLabelsView</name> + <message> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="190"/> + <source>Root</source> + <translation>Gốc</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="194"/> + <source>Home</source> + <translation>Nhà </translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="198"/> + <source>Boot</source> + <translation>Khởi Ä‘á»™ng</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="203"/> + <source>EFI system</source> + <translation>Hệ thống EFI</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="207"/> + <source>Swap</source> + <translation>Hoán đổi</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="211"/> + <source>New partition for %1</source> + <translation>Phân vùng má»›i cho %1</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="215"/> + <source>New partition</source> + <translation>Phân vùng má»›i</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="239"/> + <source>%1 %2</source> + <extracomment>size[number] filesystem[name]</extracomment> + <translation>%1 %2</translation> + </message> + </context> + <context> + <name>PartitionModel</name> + <message> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="159"/> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="199"/> + <source>Free Space</source> + <translation>Không gian trống</translation> + </message> + <message> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="163"/> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="203"/> + <source>New partition</source> + <translation>Phân vùng má»›i</translation> + </message> + <message> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="296"/> + <source>Name</source> + <translation>Tên</translation> + </message> + <message> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="298"/> + <source>File System</source> + <translation>Táºp tin hệ thống</translation> + </message> + <message> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="300"/> + <source>Mount Point</source> + <translation>Äiểm gắn kết</translation> + </message> + <message> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="302"/> + <source>Size</source> + <translation>KÃch cỡ</translation> + </message> + </context> + <context> + <name>PartitionPage</name> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="18"/> + <source>Form</source> + <translation>Biểu mẫu</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="26"/> + <source>Storage de&vice:</source> + <translation>Thiết &bị lÆ°u trữ:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="55"/> + <source>&Revert All Changes</source> + <translation>&Hoà n tác tất cả thay đổi</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="91"/> + <source>New Partition &Table</source> + <translation>Phân vùng &Bảng má»›i</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="111"/> + <source>Cre&ate</source> + <translation>&Tạo</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="118"/> + <source>&Edit</source> + <translation>&Sá»a</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="125"/> + <source>&Delete</source> + <translation>&Xóa</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="136"/> + <source>New Volume Group</source> + <translation>Nhóm ổ Ä‘Ä©a má»›i</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="143"/> + <source>Resize Volume Group</source> + <translation>Thay đổi kÃch thÆ°á»›c nhóm ổ Ä‘Ä©a</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="150"/> + <source>Deactivate Volume Group</source> + <translation>Hủy kÃch hoạt nhóm ổ Ä‘Ä©a</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="157"/> + <source>Remove Volume Group</source> + <translation>Xóa nhóm ổ Ä‘Ä©a</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.ui" line="184"/> + <source>I&nstall boot loader on:</source> + <translation>&Cà i đặt bá»™ tải khởi Ä‘á»™ng trên:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.cpp" line="219"/> + <source>Are you sure you want to create a new partition table on %1?</source> + <translation>Bạn có chắc chắn muốn tạo má»™t bảng phân vùng má»›i trên %1 không?</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.cpp" line="254"/> + <source>Can not create new partition</source> + <translation>Không thể tạo phân vùng má»›i</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionPage.cpp" line="255"/> + <source>The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead.</source> + <translation>Bảng phân vùng trên %1 đã có %2 phân vùng chÃnh và không thể thêm được nữa. Vui lòng xóa má»™t phân vùng chÃnh và thêm má»™t phân vùng mở rá»™ng, thay và o đó.</translation> + </message> + </context> + <context> + <name>PartitionViewStep</name> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="69"/> + <source>Gathering system information...</source> + <translation>Thu tháºp thông tin hệ thống ...</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="124"/> + <source>Partitions</source> + <translation>Phân vùng</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="162"/> + <source>Install %1 <strong>alongside</strong> another operating system.</source> + <translation>Cà i đặt %1 <strong> cùng vá»›i </strong> hệ Ä‘iá»u hà nh khác.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="166"/> + <source><strong>Erase</strong> disk and install %1.</source> + <translation><strong> Xóa </strong> Ä‘Ä©a và cà i đặt %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="169"/> + <source><strong>Replace</strong> a partition with %1.</source> + <translation><strong>thay thế</strong> má»™t phân vùng vá»›i %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="173"/> + <source><strong>Manual</strong> partitioning.</source> + <translation>Phân vùng <strong> thủ công </strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="186"/> + <source>Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3).</source> + <translation>Cà i đặt %1 <strong> cùng vá»›i </strong> hệ Ä‘iá»u hà nh khác trên Ä‘Ä©a <strong>%2</strong> (%3).</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="193"/> + <source><strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1.</source> + <translation><strong> Xóa </strong> Ä‘Ä©a <strong>%2 </strong> (%3) và cà i đặt %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="199"/> + <source><strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1.</source> + <translation><strong> Thay thế </strong> phân vùng trên Ä‘Ä©a <strong>%2 </strong> (%3) bằng %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="206"/> + <source><strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2).</source> + <translation>Phân vùng <strong> thủ công </strong> trên Ä‘Ä©a <strong>%1 </strong> (%2).</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="215"/> + <source>Disk <strong>%1</strong> (%2)</source> + <translation>ÄÄ©a <strong>%1</strong> (%2)</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="241"/> + <source>Current:</source> + <translation>Hiện tại:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="259"/> + <source>After:</source> + <translation>Sau:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="426"/> + <source>No EFI system partition configured</source> + <translation>Không có hệ thống phân vùng EFI được cà i đặt</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="427"/> + <source>An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start.</source> + <translation>Cần có phân vùng hệ thống EFI để khởi Ä‘á»™ng %1. <br/> <br/> Äể định cấu hình phân vùng hệ thống EFI, hãy quay lại và chá»n hoặc tạo hệ thống tệp FAT32 vá»›i cá» <strong> %3 </strong> được báºt và gắn kết point <strong> %2 </strong>. <br/> <br/> Bạn có thể tiếp tục mà không cần thiết láºp phân vùng hệ thống EFI nhÆ°ng hệ thống của bạn có thể không khởi Ä‘á»™ng được.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="441"/> + <source>An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start.</source> + <translation>Má»™t phân vùng hệ thống EFI là cần thiết để bắt đầu %1. <br/> <br/> Má»™t phân vùng đã được định cấu hình vá»›i Ä‘iểm gắn kết <strong> %2 </strong> nhÆ°ng cá» <strong> %3 </strong> của nó không được đặt . <br/> Äể đặt cá», hãy quay lại và chỉnh sá»a phân vùng. <br/> <br/> Bạn có thể tiếp tục mà không cần đặt cá» nhÆ°ng hệ thống của bạn có thể không khởi Ä‘á»™ng được.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="440"/> + <source>EFI system partition flag not set</source> + <translation>Cá» phân vùng hệ thống EFI chÆ°a được đặt</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="467"/> + <source>Option to use GPT on BIOS</source> + <translation>Lá»±a chá»n dùng GPT trên BIOS</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="468"/> + <source>A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT.</source> + <translation>Bảng phân vùng GPT là lá»±a chá»n tốt nhất cho tất cả các hệ thống. Trình cà i đặt nà y cÅ©ng há»— trợ thiết láºp nhÆ° váºy cho các hệ thống BIOS. <br/> <br/> Äể định cấu hình bảng phân vùng GPT trên BIOS, (nếu chÆ°a thá»±c hiện xong) hãy quay lại và đặt bảng phân vùng thà nh GPT, tiếp theo tạo 8 MB phân vùng chÆ°a định dạng vá»›i cá» <strong> bios_grub </strong> được báºt. <br/> <br/> Cần có phân vùng 8 MB chÆ°a được định dạng để khởi Ä‘á»™ng %1 trên hệ thống BIOS có GPT.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="496"/> + <source>Boot partition not encrypted</source> + <translation>Phân vùng khởi Ä‘á»™ng không được mã hóa</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="497"/> + <source>A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window.</source> + <translation>Má»™t phân vùng khởi Ä‘á»™ng riêng biệt đã được thiết láºp cùng vá»›i má»™t phân vùng gốc được mã hóa, nhÆ°ng phân vùng khởi Ä‘á»™ng không được mã hóa. <br/> <br/> Có những lo ngại vá» bảo máºt vá»›i loại thiết láºp nà y, vì các tệp hệ thống quan trá»ng được lÆ°u giữ trên má»™t phân vùng không được mã hóa . <br/> Bạn có thể tiếp tục nếu muốn, nhÆ°ng việc mở khóa hệ thống tệp sẽ diá»…n ra sau trong quá trình khởi Ä‘á»™ng hệ thống. <br/> Äể mã hóa phân vùng khởi Ä‘á»™ng, hãy quay lại và tạo lại nó, chá»n <strong> Mã hóa </strong> trong phân vùng cá»a sổ tạo.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="626"/> + <source>has at least one disk device available.</source> + <translation>có sẵn Ãt nhất má»™t thiết bị Ä‘Ä©a.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="627"/> + <source>There are no partitions to install on.</source> + <translation>Không có phân vùng để cà i đặt.</translation> + </message> + </context> + <context> + <name>PlasmaLnfJob</name> + <message> + <location filename="../src/modules/plasmalnf/PlasmaLnfJob.cpp" line="30"/> + <source>Plasma Look-and-Feel Job</source> + <translation>Công việc Plasma Look-and-Feel</translation> + </message> + <message> + <location filename="../src/modules/plasmalnf/PlasmaLnfJob.cpp" line="62"/> + <location filename="../src/modules/plasmalnf/PlasmaLnfJob.cpp" line="63"/> + <source>Could not select KDE Plasma Look-and-Feel package</source> + <translation>Không thể chá»n gói KDE Plasma Look-and-Feel</translation> + </message> + </context> + <context> + <name>PlasmaLnfPage</name> + <message> + <location filename="../src/modules/plasmalnf/page_plasmalnf.ui" line="18"/> + <source>Form</source> + <translation>Biểu mẫu</translation> + </message> + <message> + <location filename="../src/modules/plasmalnf/PlasmaLnfPage.cpp" line="61"/> + <source>Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel.</source> + <translation>Vui lòng chá»n giao diện cho Máy tÃnh để bà n KDE Plasma. Bạn cÅ©ng có thể bá» qua bÆ°á»›c nà y và định cấu hình giao diện sau khi hệ thống được thiết láºp. Nhấp và o lá»±a chá»n giao diện sẽ cung cấp cho bạn bản xem trÆ°á»›c trá»±c tiếp của giao diện đó.</translation> + </message> + <message> + <location filename="../src/modules/plasmalnf/PlasmaLnfPage.cpp" line="66"/> + <source>Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel.</source> + <translation>Vui lòng chá»n giao diện cho Máy tÃnh để bà n KDE Plasma. Bạn cÅ©ng có thể bá» qua bÆ°á»›c nà y và định cấu hình giao diện sau khi hệ thống được thiết láºp. Nhấp và o lá»±a chá»n giao diện sẽ cung cấp cho bạn bản xem trÆ°á»›c trá»±c tiếp của giao diện đó.</translation> + </message> + </context> + <context> + <name>PlasmaLnfViewStep</name> + <message> + <location filename="../src/modules/plasmalnf/PlasmaLnfViewStep.cpp" line="61"/> + <source>Look-and-Feel</source> + <translation>Look-and-Feel</translation> + </message> + </context> + <context> + <name>PreserveFiles</name> + <message> + <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="79"/> + <source>Saving files for later ...</source> + <translation>Äang lÆ°u táºp tin để dùng sau ...</translation> + </message> + <message> + <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="118"/> + <source>No files configured to save for later.</source> + <translation>Không có tệp nà o được định cấu hình để lÆ°u sau nà y.</translation> + </message> + <message> + <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="172"/> + <source>Not all of the configured files could be preserved.</source> + <translation>Không phải tất cả các tệp đã định cấu hình Ä‘á»u có thể được giữ nguyên.</translation> + </message> + </context> + <context> + <name>ProcessResult</name> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="412"/> + <source> +There was no output from the command.</source> + <translation> +Không có đầu ra từ lệnh.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="413"/> + <source> +Output: +</source> + <translation> +Äầu ra: +</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="417"/> + <source>External command crashed.</source> + <translation>Lệnh bên ngoà i bị lá»—i.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="418"/> + <source>Command <i>%1</i> crashed.</source> + <translation>Lệnh <i>%1</i> bị lá»—i.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="423"/> + <source>External command failed to start.</source> + <translation>Lệnh ngoà i không thể bắt đầu.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="424"/> + <source>Command <i>%1</i> failed to start.</source> + <translation>Lệnh <i>%1</i> không thể bắt đầu.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="428"/> + <source>Internal error when starting command.</source> + <translation>Lá»—i ná»™i bá»™ khi bắt đầu lệnh.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="429"/> + <source>Bad parameters for process job call.</source> + <translation>Tham số không hợp lệ cho lệnh gá»i công việc của quy trình.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="433"/> + <source>External command failed to finish.</source> + <translation>Không thể hoà n tất lệnh bên ngoà i.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="434"/> + <source>Command <i>%1</i> failed to finish in %2 seconds.</source> + <translation>Lệnh <i>%1</i> không thể hoà n thà nh trong %2 giây.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="441"/> + <source>External command finished with errors.</source> + <translation>Lệnh bên ngoà i kết thúc vá»›i lá»—i.</translation> + </message> + <message> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="442"/> + <source>Command <i>%1</i> finished with exit code %2.</source> + <translation>Lệnh <i>%1</i> hoà n thà nh vá»›i lá»—i %2.</translation> + </message> + </context> + <context> + <name>QObject</name> + <message> + <location filename="../src/libcalamares/locale/Label.cpp" line="29"/> + <source>%1 (%2)</source> + <translation>%1 (%2)</translation> + </message> + <message> + <location filename="../src/libcalamares/partition/FileSystem.cpp" line="28"/> + <source>unknown</source> + <translation>không xác định</translation> + </message> + <message> + <location filename="../src/libcalamares/partition/FileSystem.cpp" line="30"/> + <source>extended</source> + <translation>gia tăng</translation> + </message> + <message> + <location filename="../src/libcalamares/partition/FileSystem.cpp" line="32"/> + <source>unformatted</source> + <translation>không định dạng</translation> + </message> + <message> + <location filename="../src/libcalamares/partition/FileSystem.cpp" line="34"/> + <source>swap</source> + <translation>hoán đổi</translation> + </message> + <message> + <location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="90"/> + <source>Default Keyboard Model</source> + <translation>Mẫu bà n phÃm mặc định</translation> + </message> + <message> + <location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="136"/> + <location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="173"/> + <source>Default</source> + <translation>Mặc định</translation> + </message> + <message> + <location filename="../src/modules/machineid/Workers.cpp" line="64"/> + <location filename="../src/modules/machineid/Workers.cpp" line="72"/> + <location filename="../src/modules/machineid/Workers.cpp" line="76"/> + <location filename="../src/modules/machineid/Workers.cpp" line="93"/> + <source>File not found</source> + <translation>Không tìm thấy táºp tin</translation> + </message> + <message> + <location filename="../src/modules/machineid/Workers.cpp" line="65"/> + <source>Path <pre>%1</pre> must be an absolute path.</source> + <translation>ÄÆ°á»ng dẫn <pre>%1</pre> phải là đưá»ng dẫn tuyệt đối.</translation> + </message> + <message> + <location filename="../src/modules/machineid/MachineIdJob.cpp" line="83"/> + <source>Directory not found</source> + <translation>ThÆ° mục không tìm thấy</translation> + </message> + <message> + <location filename="../src/modules/machineid/MachineIdJob.cpp" line="84"/> + <location filename="../src/modules/machineid/Workers.cpp" line="94"/> + <source>Could not create new random file <pre>%1</pre>.</source> + <translation>Không thể tạo táºp tin ngẫu nhiên <pre>%1</pre>.</translation> + </message> + <message> + <location filename="../src/modules/packagechooser/PackageModel.cpp" line="70"/> + <source>No product</source> + <translation>Không có sản phẩm</translation> + </message> + <message> + <location filename="../src/modules/packagechooser/PackageModel.cpp" line="78"/> + <source>No description provided.</source> + <translation>Không có mô tả được cung cấp.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionDialogHelpers.cpp" line="40"/> + <source>(no mount point)</source> + <translation>(không có Ä‘iểm gắn kết)</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="41"/> + <source>Unpartitioned space or unknown partition table</source> + <translation>Không gian chÆ°a được phân vùng hoặc bảng phân vùng không xác định</translation> + </message> + </context> + <context> + <name>Recommended</name> + <message> + <location filename="../src/modules/welcomeq/Recommended.qml" line="40"/> + <source><p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> + Setup can continue, but some features might be disabled.</p></source> + <translation><p> Máy tÃnh nà y không đáp ứng má»™t số yêu cầu được Ä‘á» xuất để thiết láºp %1. <br/> + Có thể tiếp tục thiết láºp nhÆ°ng má»™t số tÃnh năng có thể bị tắt. </p></translation> + </message> + </context> + <context> + <name>RemoveUserJob</name> + <message> + <location filename="../src/modules/removeuser/RemoveUserJob.cpp" line="34"/> + <source>Remove live user from target system</source> + <translation>Xóa ngÆ°á»i dùng trá»±c tiếp khá»i hệ thống Ä‘Ãch</translation> + </message> + </context> + <context> + <name>RemoveVolumeGroupJob</name> + <message> + <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="24"/> + <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="36"/> + <source>Remove Volume Group named %1.</source> + <translation>Xóa nhóm ổ Ä‘Ä©a có tên %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="30"/> + <source>Remove Volume Group named <strong>%1</strong>.</source> + <translation>Xóa nhóm ổ Ä‘Ä©a có tên <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="48"/> + <source>The installer failed to remove a volume group named '%1'.</source> + <translation>Trình cà i đặt không xóa được nhóm ổ Ä‘Ä©a có tên '%1'.</translation> + </message> + </context> + <context> + <name>ReplaceWidget</name> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.ui" line="18"/> + <source>Form</source> + <translation>Biểu mẫu</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="127"/> + <source>Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition.</source> + <translation>Chá»n nÆ¡i cà i đặt %1. <br/> <font color = "red"> Cảnh báo: </font> Ä‘iá»u nà y sẽ xóa tất cả các tệp trên phân vùng đã chá»n.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="149"/> + <source>The selected item does not appear to be a valid partition.</source> + <translation>Mục đã chá»n dÆ°á»ng nhÆ° không phải là má»™t phân vùng hợp lệ.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="157"/> + <source>%1 cannot be installed on empty space. Please select an existing partition.</source> + <translation>%1 không thể được cà i đặt trên không gian trống. Vui lòng chá»n má»™t phân vùng hiện có.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="167"/> + <source>%1 cannot be installed on an extended partition. Please select an existing primary or logical partition.</source> + <translation>%1 không thể được cà i đặt trên má»™t phân vùng mở rá»™ng. Vui lòng chá»n phân vùng chÃnh hoặc phân vùng logic hiện có.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="177"/> + <source>%1 cannot be installed on this partition.</source> + <translation>%1 không thể cà i đặt trên phân vùng nà y.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="183"/> + <source>Data partition (%1)</source> + <translation>Phân vùng dữ liệu (%1)</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="203"/> + <source>Unknown system partition (%1)</source> + <translation>Phân vùng hệ thống không xác định (%1)</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="207"/> + <source>%1 system partition (%2)</source> + <translation>%1 phân vùng hệ thống (%2)</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="218"/> + <source><strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB.</source> + <translation><strong> %4 </strong> <br/> <br/> Phân vùng %1 quá nhỠđối vá»›i %2. Vui lòng chá»n má»™t phân vùng có dung lượng Ãt nhất là %3 GiB.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="240"/> + <source><strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</source> + <translation><strong> %2 </strong> <br/> <br/> Không thể tìm thấy phân vùng hệ thống EFI ở bất kỳ đâu trên hệ thống nà y. Vui lòng quay lại và sá» dụng phân vùng thủ công để thiết láºp %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="251"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="267"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="292"/> + <source><strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost.</source> + <translation><strong> %3 </strong> <br/> <br/> %1 sẽ được cà i đặt trên %2. <br/> <font color = "red"> Cảnh báo: </font> tất cả dữ liệu trên phân vùng %2 sẽ bị mất.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="259"/> + <source>The EFI system partition at %1 will be used for starting %2.</source> + <translation>Phân vùng hệ thống EFI tại %1 sẽ được sá» dụng để bắt đầu %2.</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="275"/> + <source>EFI system partition:</source> + <translation>Phân vùng hệ thống EFI:</translation> + </message> + </context> + <context> + <name>Requirements</name> + <message> + <location filename="../src/modules/welcomeq/Requirements.qml" line="38"/> + <source><p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p></source> + <translation><p> Máy tÃnh nà y không đáp ứng các yêu cầu tối thiểu để cà i đặt %1. <br/> + Không thể tiếp tục cà i đặt. </p></translation> + </message> + <message> + <location filename="../src/modules/welcomeq/Requirements.qml" line="40"/> + <source><p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> + Setup can continue, but some features might be disabled.</p></source> + <translation><p> Máy tÃnh nà y không đáp ứng má»™t số yêu cầu được Ä‘á» xuất để thiết láºp %1. <br/> + Có thể tiếp tục thiết láºp nhÆ°ng má»™t số tÃnh năng có thể bị tắt. </p></translation> + </message> + </context> + <context> + <name>ResizeFSJob</name> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="46"/> + <source>Resize Filesystem Job</source> + <translation>Thay đổi kÃch thÆ°á»›c tệp công việc hệ thống</translation> + </message> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="169"/> + <source>Invalid configuration</source> + <translation>Cấu hình không hợp lệ</translation> + </message> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="170"/> + <source>The file-system resize job has an invalid configuration and will not run.</source> + <translation>Công việc thay đổi kÃch thÆ°á»›c hệ thống tệp có cấu hình không hợp lệ và sẽ không chạy.</translation> + </message> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="175"/> + <source>KPMCore not Available</source> + <translation>KPMCore không khả dụng</translation> + </message> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="176"/> + <source>Calamares cannot start KPMCore for the file-system resize job.</source> + <translation>Calamares không thể khởi Ä‘á»™ng KPMCore cho công việc thay đổi kÃch thÆ°á»›c hệ thống tệp.</translation> + </message> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="184"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="193"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="204"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="213"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="231"/> + <source>Resize Failed</source> + <translation>Thay đổi kÃch thÆ°á»›c không thà nh công</translation> + </message> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="186"/> + <source>The filesystem %1 could not be found in this system, and cannot be resized.</source> + <translation>Không thể tìm thấy tệp hệ thống %1 trong hệ thống nà y và không thể thay đổi kÃch thÆ°á»›c.</translation> + </message> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="187"/> + <source>The device %1 could not be found in this system, and cannot be resized.</source> + <translation>Không thể tìm thấy thiết bị %1 trong hệ thống nà y và không thể thay đổi kÃch thÆ°á»›c.</translation> + </message> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="195"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="206"/> + <source>The filesystem %1 cannot be resized.</source> + <translation>Không thể thay đổi kÃch thÆ°á»›c tệp hệ thống %1.</translation> + </message> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="196"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="207"/> + <source>The device %1 cannot be resized.</source> + <translation>Không thể thay đổi kÃch thÆ°á»›c thiết bị %1.</translation> + </message> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="214"/> + <source>The filesystem %1 must be resized, but cannot.</source> + <translation>Hệ thống tệp %1 phải được thay đổi kÃch thÆ°á»›c, nhÆ°ng không thể.</translation> + </message> + <message> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="215"/> + <source>The device %1 must be resized, but cannot</source> + <translation>Thiết bị %1 phải được thay đổi kÃch thÆ°á»›c, nhÆ°ng không thể</translation> + </message> + </context> + <context> + <name>ResizePartitionJob</name> + <message> + <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="40"/> + <source>Resize partition %1.</source> + <translation>Äổi kÃch thÆ°á»›c phân vùng %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="47"/> + <source>Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>.</source> + <translation>Thay đổi kÃch thÆ°á»›c <strong>%2MiB</strong> phân vùng <strong>%1</strong> toùng <strong>%3đếnMiB</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="58"/> + <source>Resizing %2MiB partition %1 to %3MiB.</source> + <translation>Thay đổi %2MiB phân vùng %1 thà nh %3MiB.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="77"/> + <source>The installer failed to resize partition %1 on disk '%2'.</source> + <translation>Thất bại trong việc thay đổi kÃch thÆ°á»›c phân vùng %1 trên Ä‘Ä©a '%2'.</translation> + </message> + </context> + <context> + <name>ResizeVolumeGroupDialog</name> + <message> + <location filename="../src/modules/partition/gui/ResizeVolumeGroupDialog.cpp" line="30"/> + <source>Resize Volume Group</source> + <translation>Thay đổi kÃch thÆ°á»›c nhóm ổ Ä‘Ä©a</translation> + </message> + </context> + <context> + <name>ResizeVolumeGroupJob</name> + <message> + <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="27"/> + <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="45"/> + <source>Resize volume group named %1 from %2 to %3.</source> + <translation>Thay đổi kÃch thÆ°á»›c nhóm ổ Ä‘Ä©a có tên %1 từ %2 thà nh %3.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="36"/> + <source>Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>.</source> + <translation>Thay đổi kÃch thÆ°á»›c nhóm ổ Ä‘Ä©a có tên <strong> %1 </strong> từ <strong> %2 </strong> thà nh <strong> %3 </strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="60"/> + <source>The installer failed to resize a volume group named '%1'.</source> + <translation>Trình cà i đặt không thể thay đổi kÃch thÆ°á»›c má»™t nhóm ổ Ä‘Ä©a có tên ' %1'.</translation> + </message> + </context> + <context> + <name>ResultsListDialog</name> + <message> + <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="133"/> + <source>For best results, please ensure that this computer:</source> + <translation>Äể có kết quả tốt nhất, hãy đảm bảo rằng máy tÃnh nà y:</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="134"/> + <source>System requirements</source> + <translation>Yêu cầu hệ thống</translation> + </message> + </context> + <context> + <name>ResultsListWidget</name> + <message> + <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="256"/> + <source>This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a></source> + <translation>Máy tÃnh nà y không đáp ứng các yêu cầu tối thiểu để thiết láºp %1. <br/> Không thể tiếp tục thiết láºp. <a href="#details"> Chi tiết ... </a></translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="260"/> + <source>This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a></source> + <translation>Máy tÃnh nà y không đáp ứng các yêu cầu tối thiểu để cà i đặt %1. <br/> Không thể tiếp tục cà i đặt. <a href="#details"> Chi tiết ... </a></translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="267"/> + <source>This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled.</source> + <translation>Máy tÃnh nà y không đáp ứng má»™t số yêu cầu được khuyến nghị để thiết láºp %1. <br/> Quá trình thiết láºp có thể tiếp tục nhÆ°ng má»™t số tÃnh năng có thể bị tắt.</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="271"/> + <source>This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled.</source> + <translation>Máy tÃnh nà y không đáp ứng má»™t số yêu cầu được khuyến nghị để cà i đặt %1. <br/> Quá trình cà i đặt có thể tiếp tục, nhÆ°ng má»™t số tÃnh năng có thể bị tắt.</translation> + </message> + <message> + <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="280"/> + <source>This program will ask you some questions and set up %2 on your computer.</source> + <translation>ChÆ°Æ¡ng trình nà y sẽ há»i bạn má»™t số câu há»i và thiết láºp %2 trên máy tÃnh của bạn.</translation> + </message> + </context> + <context> + <name>ScanningDialog</name> + <message> + <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="64"/> + <source>Scanning storage devices...</source> + <translation>Quét thiết bị lÆ°u trữ...</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="64"/> + <source>Partitioning</source> + <translation>Äang phân vùng</translation> + </message> + </context> + <context> + <name>SetHostNameJob</name> + <message> + <location filename="../src/modules/users/SetHostNameJob.cpp" line="37"/> + <source>Set hostname %1</source> + <translation>Äặt tên máy %1</translation> + </message> + <message> + <location filename="../src/modules/users/SetHostNameJob.cpp" line="44"/> + <source>Set hostname <strong>%1</strong>.</source> + <translation>Äặt tên máy <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/users/SetHostNameJob.cpp" line="51"/> + <source>Setting hostname %1.</source> + <translation>Äặt tên máy %1.</translation> + </message> + <message> + <location filename="../src/modules/users/SetHostNameJob.cpp" line="122"/> + <location filename="../src/modules/users/SetHostNameJob.cpp" line="129"/> + <source>Internal Error</source> + <translation>Lá»—i bên trong</translation> + </message> + <message> + <location filename="../src/modules/users/SetHostNameJob.cpp" line="137"/> + <location filename="../src/modules/users/SetHostNameJob.cpp" line="146"/> + <source>Cannot write hostname to target system</source> + <translation>Không thể ghi tên máy chủ và o hệ thống Ä‘Ãch</translation> + </message> + </context> + <context> + <name>SetKeyboardLayoutJob</name> + <message> + <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="53"/> + <source>Set keyboard model to %1, layout to %2-%3</source> + <translation>Cà i đặt bà n phÃm kiểu %1, bố cục %2-%3</translation> + </message> + <message> + <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="356"/> + <source>Failed to write keyboard configuration for the virtual console.</source> + <translation>Lá»—i khi ghi cấu hình bà n phÃm cho virtual console.</translation> + </message> + <message> + <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="357"/> + <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="361"/> + <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="368"/> + <source>Failed to write to %1</source> + <translation>Lá»—i khi ghi và o %1</translation> + </message> + <message> + <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="360"/> + <source>Failed to write keyboard configuration for X11.</source> + <translation>Lá»—i khi ghi cấu hình bà n phÃm cho X11.</translation> + </message> + <message> + <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="367"/> + <source>Failed to write keyboard configuration to existing /etc/default directory.</source> + <translation>Lá»—i khi ghi cấu hình bà n phÃm và o thÆ° mục /etc/default.</translation> + </message> + </context> + <context> + <name>SetPartFlagsJob</name> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="43"/> + <source>Set flags on partition %1.</source> + <translation>Chá»n cá» trong phân vùng %1.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="49"/> + <source>Set flags on %1MiB %2 partition.</source> + <translation>Chá»n cá» %1MiB %2 phân vùng.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="53"/> + <source>Set flags on new partition.</source> + <translation>Chá»n cá» trong phân vùng má»›i.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="65"/> + <source>Clear flags on partition <strong>%1</strong>.</source> + <translation>Xóa cá» trong phân vùng<strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="71"/> + <source>Clear flags on %1MiB <strong>%2</strong> partition.</source> + <translation>Xóa cá» trong %1MiB <strong>%2</strong> phân vùng.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="75"/> + <source>Clear flags on new partition.</source> + <translation>Xóa cá» trong phân vùng má»›i.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="80"/> + <source>Flag partition <strong>%1</strong> as <strong>%2</strong>.</source> + <translation>Cá» phân vùng <strong>%1</strong> nhÆ° <strong>%2</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="89"/> + <source>Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>.</source> + <translation>Cá» %1MiB <strong>%2</strong> phân vùng nhÆ° <strong>%3</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="96"/> + <source>Flag new partition as <strong>%1</strong>.</source> + <translation>Cá» phân vùng má»›i nhÆ° <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="108"/> + <source>Clearing flags on partition <strong>%1</strong>.</source> + <translation>Äang xóa cá» trên phân vùng <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="114"/> + <source>Clearing flags on %1MiB <strong>%2</strong> partition.</source> + <translation>Äang xóa cá» trên %1MiB <strong>%2</strong> phân vùng.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="119"/> + <source>Clearing flags on new partition.</source> + <translation>Äang xóa cá» trên phân vùng má»›i.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="124"/> + <source>Setting flags <strong>%2</strong> on partition <strong>%1</strong>.</source> + <translation>Chá»n cá» <strong>%2</strong> trong phân vùng <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="133"/> + <source>Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition.</source> + <translation>Chá»n cá» <strong>%3</strong> trong %1MiB <strong>%2</strong> phân vùng.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="140"/> + <source>Setting flags <strong>%1</strong> on new partition.</source> + <translation>Chá»n cá» <strong>%1</strong> trong phân vùng má»›i.</translation> + </message> + <message> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="156"/> + <source>The installer failed to set flags on partition %1.</source> + <translation>Không thể tạo cá» cho phân vùng %1.</translation> + </message> + </context> + <context> + <name>SetPasswordJob</name> + <message> + <location filename="../src/modules/users/SetPasswordJob.cpp" line="40"/> + <source>Set password for user %1</source> + <translation>Tạo máºt khẩu ngÆ°á»i dùng %1</translation> + </message> + <message> + <location filename="../src/modules/users/SetPasswordJob.cpp" line="47"/> + <source>Setting password for user %1.</source> + <translation>Äang tạo máºt khẩu ngÆ°á»i dùng %1.</translation> + </message> + <message> + <location filename="../src/modules/users/SetPasswordJob.cpp" line="81"/> + <source>Bad destination system path.</source> + <translation>ÄÆ°á»ng dẫn hệ thống Ä‘Ãch không hợp lệ.</translation> + </message> + <message> + <location filename="../src/modules/users/SetPasswordJob.cpp" line="82"/> + <source>rootMountPoint is %1</source> + <translation>Äiểm gắn kết gốc là %1</translation> + </message> + <message> + <location filename="../src/modules/users/SetPasswordJob.cpp" line="88"/> + <source>Cannot disable root account.</source> + <translation>Không thể vô hiệu hoá tà i khoản quản trị.</translation> + </message> + <message> + <location filename="../src/modules/users/SetPasswordJob.cpp" line="89"/> + <source>passwd terminated with error code %1.</source> + <translation>passwd bị kết thúc vá»›i mã lá»—i %1.</translation> + </message> + <message> + <location filename="../src/modules/users/SetPasswordJob.cpp" line="97"/> + <source>Cannot set password for user %1.</source> + <translation>Không thể đặt máºt khẩu cho ngÆ°á»i dùng %1.</translation> + </message> + <message> + <location filename="../src/modules/users/SetPasswordJob.cpp" line="98"/> + <source>usermod terminated with error code %1.</source> + <translation>usermod bị chấm dứt vá»›i mã lá»—i %1.</translation> + </message> + </context> + <context> + <name>SetTimezoneJob</name> + <message> + <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="34"/> + <source>Set timezone to %1/%2</source> + <translation>Äặt múi giá» thà nh %1/%2</translation> + </message> + <message> + <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="62"/> + <source>Cannot access selected timezone path.</source> + <translation>Không thể truy cáºp Ä‘Æ°á»ng dẫn múi giỠđã chá»n.</translation> + </message> + <message> + <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="63"/> + <source>Bad path: %1</source> + <translation>ÄÆ°á»ng dẫn sai: %1</translation> + </message> + <message> + <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="71"/> + <source>Cannot set timezone.</source> + <translation>Không thể cà i đặt múi giá».</translation> + </message> + <message> + <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="72"/> + <source>Link creation failed, target: %1; link name: %2</source> + <translation>Không tạo được liên kết, target: %1; tên liên kết: %2</translation> + </message> + <message> + <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="77"/> + <source>Cannot set timezone,</source> + <translation>Không thể cà i đặt múi giá»</translation> + </message> + <message> + <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="78"/> + <source>Cannot open /etc/timezone for writing</source> + <translation>Không thể mở để viết và o /etc/timezone</translation> + </message> + </context> + <context> + <name>ShellProcessJob</name> + <message> + <location filename="../src/modules/shellprocess/ShellProcessJob.cpp" line="41"/> + <source>Shell Processes Job</source> + <translation>Shell Xá» lý Công việc</translation> + </message> + </context> + <context> + <name>SlideCounter</name> + <message> + <location filename="../src/qml/calamares/slideshow/SlideCounter.qml" line="27"/> + <source>%L1 / %L2</source> + <extracomment>slide counter, %1 of %2 (numeric)</extracomment> + <translation>%L1 / %L2</translation> + </message> + </context> + <context> + <name>SummaryPage</name> + <message> + <location filename="../src/modules/summary/SummaryPage.cpp" line="47"/> + <source>This is an overview of what will happen once you start the setup procedure.</source> + <translation>Äây là tổng quan vá» những gì sẽ xảy ra khi bạn bắt đầu quy trình thiết láºp.</translation> + </message> + <message> + <location filename="../src/modules/summary/SummaryPage.cpp" line="49"/> + <source>This is an overview of what will happen once you start the install procedure.</source> + <translation>Äây là tổng quan vá» những gì sẽ xảy ra khi bạn bắt đầu quy trình cà i đặt.</translation> + </message> + </context> + <context> + <name>SummaryViewStep</name> + <message> + <location filename="../src/modules/summary/SummaryViewStep.cpp" line="36"/> + <source>Summary</source> + <translation>Tổng quan</translation> + </message> + </context> + <context> + <name>TrackingInstallJob</name> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="37"/> + <source>Installation feedback</source> + <translation>Phản hồi cà i đặt</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="43"/> + <source>Sending installation feedback.</source> + <translation>Gá»i phản hồi cà i đặt.</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="60"/> + <source>Internal error in install-tracking.</source> + <translation>Lá»—i ná»™i bá»™ trong theo dõi cà i đặt.</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="61"/> + <source>HTTP request timed out.</source> + <translation>Yêu cầu HTTP đã hết thá»i gian chá».</translation> + </message> + </context> + <context> + <name>TrackingKUserFeedbackJob</name> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="122"/> + <source>KDE user feedback</source> + <translation>NgÆ°á»i dùng KDE phản hồi</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="128"/> + <source>Configuring KDE user feedback.</source> + <translation>Äịnh cấu hình phản hồi của ngÆ°á»i dùng KDE.</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="150"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="156"/> + <source>Error in KDE user feedback configuration.</source> + <translation>Lá»—i trong cấu hình phản hồi của ngÆ°á»i dùng KDE.</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="151"/> + <source>Could not configure KDE user feedback correctly, script error %1.</source> + <translation>Không thể định cấu hình phản hồi của ngÆ°á»i dùng KDE má»™t cách chÃnh xác, lá»—i táºp lệnh %1.</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="157"/> + <source>Could not configure KDE user feedback correctly, Calamares error %1.</source> + <translation>Không thể định cấu hình phản hồi của ngÆ°á»i dùng KDE má»™t cách chÃnh xác, lá»—i Calamares %1.</translation> + </message> + </context> + <context> + <name>TrackingMachineUpdateManagerJob</name> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="71"/> + <source>Machine feedback</source> + <translation>Phản hồi máy</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="77"/> + <source>Configuring machine feedback.</source> + <translation>Cấu hình phản hồi máy.</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="100"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="106"/> + <source>Error in machine feedback configuration.</source> + <translation>Lá»—i cấu hình phản hồi máy.</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="101"/> + <source>Could not configure machine feedback correctly, script error %1.</source> + <translation>Không thể cấu hình phản hồi máy chÃnh xác, kịch bản lá»—i %1.</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="107"/> + <source>Could not configure machine feedback correctly, Calamares error %1.</source> + <translation>Không thể cấu hình phản hồi máy chÃnh xác, lá»—i %1.</translation> + </message> + </context> + <context> + <name>TrackingPage</name> + <message> + <location filename="../src/modules/tracking/page_trackingstep.ui" line="18"/> + <source>Form</source> + <translation>Biểu mẫu</translation> + </message> + <message> + <location filename="../src/modules/tracking/page_trackingstep.ui" line="28"/> + <source>Placeholder</source> + <translation>Trình giữ chá»—</translation> + </message> + <message> + <location filename="../src/modules/tracking/page_trackingstep.ui" line="76"/> + <source><html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html></source> + <translation><html><head/><body><p>Nhấp và o đây để gá»i <span style=" font-weight:600;">không có thông tin nà o</span> vá» cà i đặt của bạn.</p></body></html></translation> + </message> + <message> + <location filename="../src/modules/tracking/page_trackingstep.ui" line="275"/> + <source><html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html></source> + <translation><html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Bấm và o đây để biết thêm thông tin vá» phản hồi của ngÆ°á»i dùng</span></a></p></body></html></translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingPage.cpp" line="86"/> + <source>Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area.</source> + <translation>Theo dõi giúp %1 biết tần suất cà i đặt, phần cứng được cà i đặt trên phần cứng nà o và ứng dụng nà o được sá» dụng. Äể xem những gì sẽ được gá»i, vui lòng nhấp và o biểu tượng trợ giúp bên cạnh má»—i khu vá»±c.</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingPage.cpp" line="91"/> + <source>By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes.</source> + <translation>Bằng cách chá»n nà y, bạn sẽ gá»i thông tin vá» cà i đặt và phần cứng của mình. Thông tin nà y sẽ chỉ được gá»i <b> má»™t lần </b> sau khi quá trình cà i đặt kết thúc.</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingPage.cpp" line="94"/> + <source>By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1.</source> + <translation>Bằng cách chá»n nà y, bạn sẽ định kỳ gá»i thông tin vá» cà i đặt <b> máy </b>, phần cứng và ứng dụng của mình cho %1.</translation> + </message> + <message> + <location filename="../src/modules/tracking/TrackingPage.cpp" line="98"/> + <source>By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1.</source> + <translation>Bằng cách chá»n nà y, bạn sẽ thÆ°á»ng xuyên gá»i thông tin vá» cà i đặt <b> ngÆ°á»i dùng </b>, phần cứng, ứng dụng và các kiểu sá» dụng ứng dụng cho %1.</translation> + </message> + </context> + <context> + <name>TrackingViewStep</name> + <message> + <location filename="../src/modules/tracking/TrackingViewStep.cpp" line="49"/> + <source>Feedback</source> + <translation>Phản hồi</translation> + </message> + </context> + <context> + <name>UsersPage</name> + <message> + <location filename="../src/modules/users/UsersPage.cpp" line="156"/> + <source><small>If more than one person will use this computer, you can create multiple accounts after setup.</small></source> + <translation><small> Nếu nhiá»u ngÆ°á»i cùng sá» dụng máy tÃnh nà y, bạn có thể tạo nhiá»u tà i khoản sau khi thiết láºp. </small></translation> + </message> + <message> + <location filename="../src/modules/users/UsersPage.cpp" line="162"/> + <source><small>If more than one person will use this computer, you can create multiple accounts after installation.</small></source> + <translation><small> Nếu nhiá»u ngÆ°á»i cùng sá» dụng máy tÃnh nà y, bạn có thể tạo nhiá»u tà i khoản sau khi cà i đặt. </small></translation> + </message> + </context> + <context> + <name>UsersQmlViewStep</name> + <message> + <location filename="../src/modules/usersq/UsersQmlViewStep.cpp" line="39"/> + <source>Users</source> + <translation>NgÆ°á»i dùng</translation> + </message> + </context> + <context> + <name>UsersViewStep</name> + <message> + <location filename="../src/modules/users/UsersViewStep.cpp" line="48"/> + <source>Users</source> + <translation>NgÆ°á»i dùng</translation> + </message> + </context> + <context> + <name>VariantModel</name> + <message> + <location filename="../src/calamares/VariantModel.cpp" line="232"/> + <source>Key</source> + <comment>Column header for key/value</comment> + <translation>Khóa</translation> + </message> + <message> + <location filename="../src/calamares/VariantModel.cpp" line="236"/> + <source>Value</source> + <comment>Column header for key/value</comment> + <translation>Giá trị</translation> + </message> + </context> + <context> + <name>VolumeGroupBaseDialog</name> + <message> + <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="18"/> + <source>Create Volume Group</source> + <translation>Tạo nhóm ổ Ä‘Ä©a</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="24"/> + <source>List of Physical Volumes</source> + <translation>Danh sách các Ä‘Ä©a váºt lý</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="34"/> + <source>Volume Group Name:</source> + <translation>Tên nhóm ổ Ä‘Ä©a:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="47"/> + <source>Volume Group Type:</source> + <translation>Loại nhóm ổ Ä‘Ä©a:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="60"/> + <source>Physical Extent Size:</source> + <translation>KÃch thÆ°á»›c phạm vi váºt lý:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="70"/> + <source> MiB</source> + <translation> MiB</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="86"/> + <source>Total Size:</source> + <translation>Tổng kÃch thÆ°á»›c:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="106"/> + <source>Used Size:</source> + <translation>Äã dùng:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="126"/> + <source>Total Sectors:</source> + <translation>Tổng số Sec-tÆ¡:</translation> + </message> + <message> + <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="146"/> + <source>Quantity of LVs:</source> + <translation>Số lượng của LVs:</translation> + </message> + </context> + <context> + <name>WelcomePage</name> + <message> + <location filename="../src/modules/welcome/WelcomePage.ui" line="18"/> + <source>Form</source> + <translation>Biểu mẫu</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.ui" line="79"/> + <location filename="../src/modules/welcome/WelcomePage.ui" line="98"/> + <source>Select application and system language</source> + <translation>Chá»n ngôn ngữ ứng dụng và hệ thống</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.ui" line="140"/> + <source>&About</source> + <translation>&Giá»›i thiệu</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.ui" line="150"/> + <source>Open donations website</source> + <translation>Mở trang web ủng há»™</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.ui" line="153"/> + <source>&Donate</source> + <translation>Ủng &há»™</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.ui" line="163"/> + <source>Open help and support website</source> + <translation>Mở trang web trợ giúp</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.ui" line="166"/> + <source>&Support</source> + <translation>&Há»— trợ</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.ui" line="176"/> + <source>Open issues and bug-tracking website</source> + <translation>Mở trang web theo dõi lá»—i và vấn Ä‘á»</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.ui" line="179"/> + <source>&Known issues</source> + <translation>&Vấn đỠđã biết</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.ui" line="189"/> + <source>Open release notes website</source> + <translation>Mở trang web ghi chú phát hà nh</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.ui" line="192"/> + <source>&Release notes</source> + <translation>&Ghi chú phát hà nh</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.cpp" line="216"/> + <source><h1>Welcome to the Calamares setup program for %1.</h1></source> + <translation><h1>Chà o mừng đến vá»›i chÆ°Æ¡ng trình Calamares để thiết láºp cho %1.</h1></translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.cpp" line="217"/> + <source><h1>Welcome to %1 setup.</h1></source> + <translation><h1>Chà o mừng đến vá»›i thiết láºp %1.</h1></translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.cpp" line="222"/> + <source><h1>Welcome to the Calamares installer for %1.</h1></source> + <translation><h1>Chà o mừng đến vá»›i chÆ°Æ¡ng trình Calamares để cà i đặt cho %1.</h1></translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.cpp" line="223"/> + <source><h1>Welcome to the %1 installer.</h1></source> + <translation><h1>Chà o mừng đến vá»›i bá»™ cà i đặt %1.</h1></translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.cpp" line="228"/> + <source>%1 support</source> + <translation>Há»— trợ %1</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.cpp" line="235"/> + <source>About %1 setup</source> + <translation>Vá» thiết láºp %1</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.cpp" line="235"/> + <source>About %1 installer</source> + <translation>Vá» bá»™ cà i đặt %1</translation> + </message> + <message> + <location filename="../src/modules/welcome/WelcomePage.cpp" line="238"/> + <source><h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.</source> + <translation><h1>%1</h1><br/><strong>%2<br/>cho %3</strong><br/><br/>Bản quyá»n 2014-2017 bởi Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Bản quyá»n 2017-2020 bởi Adriaan de Groot &lt;groot@kde.org&gt;<br/>Cám Æ¡n <a href="https://calamares.io/team/">Ä‘á»™i ngÅ© Calamares</a> và <a href="https://www.transifex.com/calamares/calamares/">các dịch giả của Calamares</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> được tà i trợ bởi <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.</translation> + </message> + </context> + <context> + <name>WelcomeQmlViewStep</name> + <message> + <location filename="../src/modules/welcomeq/WelcomeQmlViewStep.cpp" line="41"/> + <source>Welcome</source> + <translation>Chà o mừng</translation> + </message> + </context> + <context> + <name>WelcomeViewStep</name> + <message> + <location filename="../src/modules/welcome/WelcomeViewStep.cpp" line="48"/> + <source>Welcome</source> + <translation>Chà o mừng</translation> + </message> + </context> + <context> + <name>about</name> + <message> + <location filename="../src/modules/welcomeq/about.qml" line="47"/> + <source><h1>%1</h1><br/> + <strong>%2<br/> + for %3</strong><br/><br/> + Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> + Copyright 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> + Thanks to <a href='https://calamares.io/team/'>the Calamares team</a> + and the <a href='https://www.transifex.com/calamares/calamares/'>Calamares + translators team</a>.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> + development is sponsored by <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software.</source> + <translation><h1>%1</h1><br/> + <strong>%2<br/> + cho %3</strong><br/><br/> + Bản quyá»n 2014-2017 bởi Teo Mrnjavac &lt;teo@kde.org&gt;<br/> + Bản quyá»n 2017-2020 bởi Adriaan de Groot &lt;groot@kde.org&gt;<br/> + Cám Æ¡n <a href='https://calamares.io/team/'>Ä‘á»™i ngÅ© Calamares</a> + và <a href='https://www.transifex.com/calamares/calamares/'>các dịch giả Calamares</a>.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> + được tà i trợ bởi <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software.</translation> + </message> + <message> + <location filename="../src/modules/welcomeq/about.qml" line="96"/> + <source>Back</source> + <translation>Quay lại</translation> + </message> + </context> + <context> + <name>i18n</name> + <message> + <location filename="../src/modules/localeq/i18n.qml" line="46"/> + <source><h1>Languages</h1> </br> + The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>.</source> + <translation><h1>Ngôn ngữ</h1> </br> + Cà i đặt ngôn ngữ hệ thống ảnh hưởng đến ngôn ngữ và bá»™ ký tá»± cho má»™t số thà nh phần giao diện ngÆ°á»i dùng dòng lệnh. Cà i đặt hiện tại là <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/localeq/i18n.qml" line="106"/> + <source><h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>.</source> + <translation><h1>Äịa phÆ°Æ¡ng</h1> </br> + Cà i đặt ngôn ngữ hệ thống ảnh hưởng đến số và định dạng ngà y tháng. Cà i đặt hiện tại là <strong>%1</strong>.</translation> + </message> + <message> + <location filename="../src/modules/localeq/i18n.qml" line="158"/> + <source>Back</source> + <translation>Trở lại</translation> + </message> + </context> + <context> + <name>keyboardq</name> + <message> + <location filename="../src/modules/keyboardq/keyboardq.qml" line="45"/> + <source>Keyboard Model</source> + <translation>Mẫu bà n phÃm</translation> + </message> + <message> + <location filename="../src/modules/keyboardq/keyboardq.qml" line="377"/> + <source>Layouts</source> + <translation>Bố cục</translation> + </message> + <message> + <location filename="../src/modules/keyboardq/keyboardq.qml" line="148"/> + <source>Keyboard Layout</source> + <translation>Bố cục bà n phÃm</translation> + </message> + <message> + <location filename="../src/modules/keyboardq/keyboardq.qml" line="60"/> + <source>Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.</source> + <translation>Nhấp và o kiểu bà n phÃm Æ°a thÃch của bạn để chá»n bố cục và biến thể hoặc sá» dụng kiểu mặc định dá»±a trên phần cứng được phát hiện.</translation> + </message> + <message> + <location filename="../src/modules/keyboardq/keyboardq.qml" line="253"/> + <source>Models</source> + <translation>Mẫu</translation> + </message> + <message> + <location filename="../src/modules/keyboardq/keyboardq.qml" line="260"/> + <source>Variants</source> + <translation>Các biến thể</translation> + </message> + <message> + <location filename="../src/modules/keyboardq/keyboardq.qml" line="276"/> + <source>Keyboard Variant</source> + <translation>Các biến thể bà n phÃm</translation> + </message> + <message> + <location filename="../src/modules/keyboardq/keyboardq.qml" line="386"/> + <source>Test your keyboard</source> + <translation>Thá» bà n phÃm</translation> + </message> + </context> + <context> + <name>localeq</name> + <message> + <location filename="../src/modules/localeq/localeq.qml" line="81"/> + <source>Change</source> + <translation>Äổi</translation> + </message> + </context> + <context> + <name>notesqml</name> + <message> + <location filename="../src/modules/notesqml/notesqml.qml" line="50"/> + <source><h3>%1</h3> + <p>These are example release notes.</p></source> + <translation><h3>%1</h3> + <p>Äây là ghi chú phát hà nh mẫu.</p></translation> + </message> + </context> + <context> + <name>release_notes</name> + <message> + <location filename="../src/modules/welcomeq/release_notes.qml" line="45"/> + <source><h3>%1</h3> + <p>This an example QML file, showing options in RichText with Flickable content.</p> + + <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> + + <p><b>This is bold text</b></p> + <p><i>This is italic text</i></p> + <p><u>This is underlined text</u></p> + <p><center>This text will be center-aligned.</center></p> + <p><s>This is strikethrough</s></p> + + <p>Code example: + <code>ls -l /home</code></p> + + <p><b>Lists:</b></p> + <ul> + <li>Intel CPU systems</li> + <li>AMD CPU systems</li> + </ul> + + <p>The vertical scrollbar is adjustable, current width set to 10.</p></source> + <translation><h3>%1</h3> + <p>Äây là má»™t tệp QML mẫu, hiển thị các tùy chá»n trong RichText vá»›i ná»™i dung Flickable..</p> + + <p>QML vá»›i RichText có thể sá» dụng thẻ HTML, ná»™i dung Flickable hữu Ãch cho mà n hình cảm ứng.</p> + + <p><b>Äây là văn bản in Ä‘áºm</b></p> + <p><i>Äây là văn bản in nghiêng</i></p> + <p><u>Äây là văn bản được gạch chân</u></p> + <p><center>Văn bản nà y sẽ được căn giữa.</center></p> + <p><s>Äây là đưá»ng gạch ngang</s></p> + + <p>Và dụ vá» mã: + <code>ls -l /home</code></p> + + <p><b>Danh sách:</b></p> + <ul> + <li>Hệ thống Intel CPU</li> + <li>Hệ thống AMD CPU</li> + </ul> + + <p>Thanh cuá»™n dá»c có thể Ä‘iá»u chỉnh được, chiá»u rá»™ng hiện tại được đặt thà nh 10.</p></translation> + </message> + <message> + <location filename="../src/modules/welcomeq/release_notes.qml" line="76"/> + <source>Back</source> + <translation>Quay lại</translation> + </message> + </context> + <context> + <name>usersq</name> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="36"/> + <source>Pick your user name and credentials to login and perform admin tasks</source> + <translation>Chá»n tên bạn và chứng chỉ để đăng nháºp và thá»±c hiện các tác vụ quản trị</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="52"/> + <source>What is your name?</source> + <translation>Hãy cho Vigo biết tên đầy đủ của bạn?</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="59"/> + <source>Your Full Name</source> + <translation>Tên đầy đủ</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="80"/> + <source>What name do you want to use to log in?</source> + <translation>Bạn muốn dùng tên nà o để đăng nháºp máy tÃnh?</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="87"/> + <source>Login Name</source> + <translation>Tên đăng nháºp</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="103"/> + <source>If more than one person will use this computer, you can create multiple accounts after installation.</source> + <translation>Tạo nhiá»u tà i khoản sau khi cà i đặt nếu có nhiá»u ngÆ°á»i dùng chung.</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="118"/> + <source>What is the name of this computer?</source> + <translation>Tên của máy tÃnh nà y là ?</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="125"/> + <source>Computer Name</source> + <translation>Tên máy tÃnh</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="140"/> + <source>This name will be used if you make the computer visible to others on a network.</source> + <translation>Tên nà y sẽ hiển thị khi bạn kết nối và o má»™t mạng.</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="155"/> + <source>Choose a password to keep your account safe.</source> + <translation>Chá»n máºt khẩu để giữ máy tÃnh an toà n.</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="166"/> + <source>Password</source> + <translation>Máºt khẩu</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="185"/> + <source>Repeat Password</source> + <translation>Lặp lại máºt khẩu</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="204"/> + <source>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</source> + <translation>Nháºp lại máºt khẩu hai lần để kiểm tra. Má»™t máºt khẩu tốt phải có Ãt nhất 8 ký tá»± và bao gồm chữ, số, ký hiệu đặc biệt. Nên được thay đổi thÆ°á»ng xuyên.</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="216"/> + <source>Validate passwords quality</source> + <translation>Xác thá»±c chất lượng máºt khẩu</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="226"/> + <source>When this box is checked, password-strength checking is done and you will not be able to use a weak password.</source> + <translation>Khi tÃch chá»n, bạn có thể chá»n máºt khẩu yếu.</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="234"/> + <source>Log in automatically without asking for the password</source> + <translation>Tá»± Ä‘á»™ng đăng nháºp không há»i máºt khẩu</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="243"/> + <source>Reuse user password as root password</source> + <translation>Dùng lại máºt khẩu ngÆ°á»i dùng nhÆ° máºt khẩu quản trị</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="253"/> + <source>Use the same password for the administrator account.</source> + <translation>Dùng cùng má»™t máºt khẩu cho tà i khoản quản trị.</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="268"/> + <source>Choose a root password to keep your account safe.</source> + <translation>Chá»n máºt khẩu quản trị để giữ máy tÃnh an toà n.</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="279"/> + <source>Root Password</source> + <translation>Máºt khẩu quản trị</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="298"/> + <source>Repeat Root Password</source> + <translation>Lặp lại máºt khẩu quản trị</translation> + </message> + <message> + <location filename="../src/modules/usersq/usersq.qml" line="318"/> + <source>Enter the same password twice, so that it can be checked for typing errors.</source> + <translation>Nháºp lại máºt khẩu hai lần để kiểm tra.</translation> + </message> + </context> + <context> + <name>welcomeq</name> + <message> + <location filename="../src/modules/welcomeq/welcomeq.qml" line="35"/> + <source><h3>Welcome to the %1 <quote>%2</quote> installer</h3> + <p>This program will ask you some questions and set up %1 on your computer.</p></source> + <translation><h3>Chà o mừng đến vá»›i bá»™ cà i đặt %1 <quote>%2</quote></h3> + <p>ChÆ°Æ¡ng trình sẽ há»i bản và i câu há»i và thiết láºp %1 trên máy tÃnh của bạn.</p></translation> + </message> + <message> + <location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/> + <source>About</source> + <translation>Giá»›i thiệu</translation> + </message> + <message> + <location filename="../src/modules/welcomeq/welcomeq.qml" line="80"/> + <source>Support</source> + <translation>Há»— trợ</translation> + </message> + <message> + <location filename="../src/modules/welcomeq/welcomeq.qml" line="91"/> + <source>Known issues</source> + <translation>Các vấn đỠđã biết</translation> + </message> + <message> + <location filename="../src/modules/welcomeq/welcomeq.qml" line="102"/> + <source>Release notes</source> + <translation>Ghi chú phát hà nh</translation> + </message> + <message> + <location filename="../src/modules/welcomeq/welcomeq.qml" line="114"/> + <source>Donate</source> + <translation>Ủng há»™</translation> + </message> + </context> +</TS> diff --git a/lang/calamares_zh_TW.ts b/lang/calamares_zh_TW.ts index fe591894381994c8f58b9174b55618b13aa6e598..85a49ee982225e88f9b7b61311b2e385d0bd3b9c 100644 --- a/lang/calamares_zh_TW.ts +++ b/lang/calamares_zh_TW.ts @@ -617,17 +617,17 @@ The installer will quit and all changes will be lost.</source> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> - <translation type="unfinished"/> + <translation>æ¤å„²å˜è£ç½®ä¸Šå·²æœ‰ä½œæ¥ç³»çµ±ï¼Œä½†åˆ†å‰²è¡¨ <strong>%1</strong> 與需è¦çš„ <strong>%2</strong> ä¸åŒã€‚<br/></translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/> <source>This storage device has one of its partitions <strong>mounted</strong>.</source> - <translation type="unfinished"/> + <translation>æ¤è£ç½®<strong>已掛載</strong>å…¶ä¸ä¸€å€‹åˆ†å‰²å€ã€‚</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/> <source>This storage device is a part of an <strong>inactive RAID</strong> device.</source> - <translation type="unfinished"/> + <translation>æ¤å„²å˜è£ç½®æ˜¯<strong>éžä½œç”¨ä¸ RAID</strong> è£ç½®çš„一部份。</translation> </message> <message> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/> diff --git a/lang/python/be/LC_MESSAGES/python.po b/lang/python/be/LC_MESSAGES/python.po index c31beab74d467b8839d5458f57adb8eff0e1d3ca..b9154868bee1c53308820031f09fdd77b242530a 100644 --- a/lang/python/be/LC_MESSAGES/python.po +++ b/lang/python/be/LC_MESSAGES/python.po @@ -201,6 +201,8 @@ msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"Ð¡Ð¿Ñ–Ñ Ð´Ñ‹Ñплейных кіраўнікоў пуÑÑ‚Ñ‹ альбо не вызначаны Ñž both globalstorage Ñ– " +"displaymanager.conf." #: src/modules/displaymanager/main.py:977 msgid "Display manager configuration was incomplete" @@ -314,11 +316,11 @@ msgstr "Ðаладка апаратнага гадзінніка." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." -msgstr "" +msgstr "СтварÑнне initramfs праз mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" -msgstr "" +msgstr "Ðе атрымалаÑÑ Ð·Ð°Ð¿ÑƒÑціць mkinitfs у пункце прызначÑннÑ" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" diff --git a/lang/python/bg/LC_MESSAGES/python.po b/lang/python/bg/LC_MESSAGES/python.po index 372847af8a37bb45af82e8d58ed8492c5e5c4b47..ca58592adc259e03e13e105ced33c0b4ab5bcd22 100644 --- a/lang/python/bg/LC_MESSAGES/python.po +++ b/lang/python/bg/LC_MESSAGES/python.po @@ -4,7 +4,7 @@ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # # Translators: -# Georgi Georgiev, 2020 +# Жоро, 2020 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-10-16 22:35+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Georgi Georgiev, 2020\n" +"Last-Translator: Жоро, 2020\n" "Language-Team: Bulgarian (https://www.transifex.com/calamares/teams/20061/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/lang/python/ca/LC_MESSAGES/python.po b/lang/python/ca/LC_MESSAGES/python.po index 3d057cae149e25fc3e756274dedc8f25bc2b5674..1dc1d6d142c63e495924ced77ff4a110a85df63e 100644 --- a/lang/python/ca/LC_MESSAGES/python.po +++ b/lang/python/ca/LC_MESSAGES/python.po @@ -204,6 +204,8 @@ msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"La llista de gestors de pantalla és buida o no definida ni a globalstorage " +"ni a displaymanager.conf." #: src/modules/displaymanager/main.py:977 msgid "Display manager configuration was incomplete" diff --git a/lang/python/da/LC_MESSAGES/python.po b/lang/python/da/LC_MESSAGES/python.po index e2603ca821a5bf1e50c304fce199dc14f4057593..6a103acbe834cd4f218829e1519c3fa9692d5081 100644 --- a/lang/python/da/LC_MESSAGES/python.po +++ b/lang/python/da/LC_MESSAGES/python.po @@ -204,6 +204,8 @@ msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"DisplayhÃ¥ndteringerlisten er tom eller udefineret i bÃ¥de globalstorage og " +"displaymanager.conf." #: src/modules/displaymanager/main.py:977 msgid "Display manager configuration was incomplete" diff --git a/lang/python/fi_FI/LC_MESSAGES/python.po b/lang/python/fi_FI/LC_MESSAGES/python.po index cb15f9ae9ed3e028d4702ffd4902490e4388cfba..e4e63e57dc5e9ca0d72d6163da51f350d502f6dd 100644 --- a/lang/python/fi_FI/LC_MESSAGES/python.po +++ b/lang/python/fi_FI/LC_MESSAGES/python.po @@ -201,6 +201,8 @@ msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"Luettelo on tyhjä tai määrittelemätön, sekä globalstorage, että " +"displaymanager.conf tiedostossa." #: src/modules/displaymanager/main.py:977 msgid "Display manager configuration was incomplete" diff --git a/lang/python/fur/LC_MESSAGES/python.po b/lang/python/fur/LC_MESSAGES/python.po index 3168c2f357fc96914f86933fa4cc94766590f58b..90800f4a2983b1f9bfbb1726e0b2f79b767ec321 100644 --- a/lang/python/fur/LC_MESSAGES/python.po +++ b/lang/python/fur/LC_MESSAGES/python.po @@ -23,11 +23,11 @@ msgstr "" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." -msgstr "" +msgstr "Configure GRUB." #: src/modules/mount/main.py:29 msgid "Mounting partitions." -msgstr "" +msgstr "Montaç des partizions." #: src/modules/mount/main.py:141 src/modules/initcpiocfg/main.py:196 #: src/modules/initcpiocfg/main.py:200 diff --git a/lang/python/hi/LC_MESSAGES/python.po b/lang/python/hi/LC_MESSAGES/python.po index 2b0ab266a89de698fa2a98017e5be774e9afdd0d..d577d9fd8299cf9dc3ee2050e57f0ee10b58eb27 100644 --- a/lang/python/hi/LC_MESSAGES/python.po +++ b/lang/python/hi/LC_MESSAGES/python.po @@ -200,6 +200,8 @@ msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"globalstorage व displaymanager.conf में डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक सूची रिकà¥à¤¤ या " +"अपरिà¤à¤¾à¤·à¤¿à¤¤ है।" #: src/modules/displaymanager/main.py:977 msgid "Display manager configuration was incomplete" diff --git a/lang/python/sv/LC_MESSAGES/python.po b/lang/python/sv/LC_MESSAGES/python.po index 0b8665e7a1a7b7634ba845c2b6dc30359204d786..d1c87de4cf936cb1df0619bd3c13f1422fe9a940 100644 --- a/lang/python/sv/LC_MESSAGES/python.po +++ b/lang/python/sv/LC_MESSAGES/python.po @@ -205,6 +205,8 @@ msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"Skärmhanterar listan är tom eller odefinierad i bÃ¥de globalstorage och " +"displaymanager.conf." #: src/modules/displaymanager/main.py:977 msgid "Display manager configuration was incomplete" diff --git a/lang/python/tg/LC_MESSAGES/python.po b/lang/python/tg/LC_MESSAGES/python.po index d99c9e711a8d94ec8c0d261bcbc5ae08101f9601..d9886a107cf1e7e68920985c81af629923d46ec4 100644 --- a/lang/python/tg/LC_MESSAGES/python.po +++ b/lang/python/tg/LC_MESSAGES/python.po @@ -205,6 +205,8 @@ msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"Рӯйхати displaymanagers ҳам дар globalstorage ва ҳам дар displaymanager.conf" +" холӣ Ñ‘ номаълум аÑÑ‚." #: src/modules/displaymanager/main.py:977 msgid "Display manager configuration was incomplete" diff --git a/lang/python/vi/LC_MESSAGES/python.po b/lang/python/vi/LC_MESSAGES/python.po new file mode 100644 index 0000000000000000000000000000000000000000..bb9b67a96343fb0a795e195ea286699382f8bbc2 --- /dev/null +++ b/lang/python/vi/LC_MESSAGES/python.po @@ -0,0 +1,363 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +# Translators: +# T. Tran <transifex@emiu.net>, 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-10-16 22:35+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: T. Tran <transifex@emiu.net>, 2020\n" +"Language-Team: Vietnamese (https://www.transifex.com/calamares/teams/20061/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "Cấu hình GRUB" + +#: src/modules/mount/main.py:29 +msgid "Mounting partitions." +msgstr "Äang gắn kết các phân vùng." + +#: src/modules/mount/main.py:141 src/modules/initcpiocfg/main.py:196 +#: src/modules/initcpiocfg/main.py:200 +#: src/modules/luksopenswaphookcfg/main.py:86 +#: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:69 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/localecfg/main.py:135 +#: src/modules/networkcfg/main.py:39 +msgid "Configuration Error" +msgstr "Lá»—i cấu hình" + +#: src/modules/mount/main.py:142 src/modules/initcpiocfg/main.py:197 +#: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 +#: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:70 +#: src/modules/fstab/main.py:362 +msgid "No partitions are defined for <pre>{!s}</pre> to use." +msgstr "Không có phân vùng nà o được định nghÄ©a cho <pre>{!s}</pre> để dùng." + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "Cấu hình các dịch vụ systemd" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "Không thể sá»a đổi dịch vụ" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}." +msgstr "" +"<code>systemctl {arg!s}</code> trong môi trÆ°á»ng chroot trả vá» lá»—i {num!s}." + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd service <code>{name!s}</code>." +msgstr "Không thể báºt dịch vụ systemd <code>{name!s}</code>." + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target <code>{name!s}</code>." +msgstr "Không thể báºt nhóm dịch vụ systemd <code>{name!s}</code>." + +#: src/modules/services-systemd/main.py:69 +msgid "Cannot disable systemd target <code>{name!s}</code>." +msgstr "Không thể tắt nhóm dịch vụ systemd <code>{name!s}</code>." + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot mask systemd unit <code>{name!s}</code>." +msgstr "Không thể đánh dấu Ä‘Æ¡n vị systemd <code>{name!s}</code>." + +#: src/modules/services-systemd/main.py:73 +msgid "" +"Unknown systemd commands <code>{command!s}</code> and " +"<code>{suffix!s}</code> for unit {name!s}." +msgstr "" +"Không nháºn ra lệnh systemd <code>{command!s}</code> và " +"<code>{suffix!s}</code> cho Ä‘Æ¡n vị {name!s}." + +#: src/modules/umount/main.py:31 +msgid "Unmount file systems." +msgstr "Gỡ kết nối các hệ thống táºp tin." + +#: src/modules/unpackfs/main.py:35 +msgid "Filling up filesystems." +msgstr "Äang là m đầy các hệ thống táºp tin." + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "rsync thất bại vá»›i lá»—i {}." + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "Äang bung hình ảnh {}/{}, táºp tin {}/{}" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "Bắt đầu bung ná»™i dung {}" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:463 +msgid "Failed to unpack image \"{}\"" +msgstr "Bung hình ảnh thất bại \"{}\"" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "Không có Ä‘iểm kết nối cho phân vùng gốc" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +msgstr "globalstorage không có khoá \"rootMountPoint\", sẽ không là m gì cả" + +#: src/modules/unpackfs/main.py:436 +msgid "Bad mount point for root partition" +msgstr "Sai Ä‘iểm kết nối cho phân vùng gốc" + +#: src/modules/unpackfs/main.py:437 +msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +msgstr "rootMountPoint không tồn tại, có giá trị là \"{}\", sẽ không là m gì cả" + +#: src/modules/unpackfs/main.py:453 src/modules/unpackfs/main.py:457 +#: src/modules/unpackfs/main.py:477 +msgid "Bad unsquash configuration" +msgstr "Sai cấu hình bung nén" + +#: src/modules/unpackfs/main.py:454 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "Hệ thống táºp tin cho \"{}\" ({}) không được há»— trợ bởi nhân hiện tại" + +#: src/modules/unpackfs/main.py:458 +msgid "The source filesystem \"{}\" does not exist" +msgstr "Hệ thống táºp tin nguồn \"{}\" không tồn tại" + +#: src/modules/unpackfs/main.py:464 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed" +msgstr "Không tìm thấy lệnh unsquashfs, vui lòng cà i đặt gói squashfs-tools" + +#: src/modules/unpackfs/main.py:478 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "Hệ thống Ä‘Ãch \"{}\" không phải là má»™t thÆ° mục" + +#: src/modules/displaymanager/main.py:514 +msgid "Cannot write KDM configuration file" +msgstr "Không thể ghi và o táºp tin cấu hình KDM" + +#: src/modules/displaymanager/main.py:515 +msgid "KDM config file {!s} does not exist" +msgstr "Táºp tin cấu hình KDM {!s} không tồn tại" + +#: src/modules/displaymanager/main.py:576 +msgid "Cannot write LXDM configuration file" +msgstr "Không thể ghi và o táºp tin cấu hình LXDM" + +#: src/modules/displaymanager/main.py:577 +msgid "LXDM config file {!s} does not exist" +msgstr "Táºp tin cấu hình LXDM {!s} không tồn tại" + +#: src/modules/displaymanager/main.py:660 +msgid "Cannot write LightDM configuration file" +msgstr "Không thể ghi và o táºp tin cấu hình LightDM" + +#: src/modules/displaymanager/main.py:661 +msgid "LightDM config file {!s} does not exist" +msgstr "Táºp tin cấu hình LightDM {!s} không tồn tại" + +#: src/modules/displaymanager/main.py:735 +msgid "Cannot configure LightDM" +msgstr "Không thể cấu hình LXDM" + +#: src/modules/displaymanager/main.py:736 +msgid "No LightDM greeter installed." +msgstr "Mà n hình chà o mừng LightDM không được cà i đặt." + +#: src/modules/displaymanager/main.py:767 +msgid "Cannot write SLIM configuration file" +msgstr "Không thể ghi và o táºp tin cấu hình SLIM" + +#: src/modules/displaymanager/main.py:768 +msgid "SLIM config file {!s} does not exist" +msgstr "Táºp tin cấu hình SLIM {!s} không tồn tại" + +#: src/modules/displaymanager/main.py:894 +msgid "No display managers selected for the displaymanager module." +msgstr "" +"Không có trình quản lý hiển thị nà o được chá»n cho mô-Ä‘un quản lý hiển thị" + +#: src/modules/displaymanager/main.py:895 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" +"Danh sách quản lý hiện thị trống hoặc không được định nghÄ©a cả trong " +"globalstorage và displaymanager.conf." + +#: src/modules/displaymanager/main.py:977 +msgid "Display manager configuration was incomplete" +msgstr "Cầu hình quản lý hiện thị không hoà n tất" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "Äang cấu hình mkinitcpio." + +#: src/modules/initcpiocfg/main.py:201 +#: src/modules/luksopenswaphookcfg/main.py:91 +#: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:74 +#: src/modules/fstab/main.py:368 src/modules/localecfg/main.py:136 +#: src/modules/networkcfg/main.py:40 +msgid "No root mount point is given for <pre>{!s}</pre> to use." +msgstr "Không có Ä‘iểm kết nối gốc cho <pre>{!s}</pre> để dùng." + +#: src/modules/luksopenswaphookcfg/main.py:26 +msgid "Configuring encrypted swap." +msgstr "Äang cấu hình hoán đổi mã hoá" + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "Äang cà i đặt dữ liệu." + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "Cấu hình dịch vụ OpenRC" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "Không thể thêm dịch vụ {name!s} và o run-level {level!s}." + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "Không thể loại bá» dịch vụ {name!s} từ run-level {level!s}." + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-" +"level {level!s}." +msgstr "" +"Không nháºn ra thao tác <code>{arg!s}</code> cho dịch vụ {name!s} ở run-level" +" {level!s}." + +#: src/modules/services-openrc/main.py:94 +msgid "" +"<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}." +msgstr "" +"Lệnh <code>rc-update {arg!s}</code> trong môi trÆ°á»ng chroot trả vá» lá»—i " +"{num!s}." + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "Nhóm dịch vụ khởi Ä‘á»™ng không tồn tại" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is <code>{path!s}</code>, which does not " +"exist." +msgstr "" +"ÄÆ°á»ng dẫn cho runlevel {level!s} là <code>{path!s}</code>, nhÆ°ng không tồn " +"tại." + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "Nhóm dịch vụ không tồn tại" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is <code>{path!s}</code>, which does not " +"exist." +msgstr "" +"ÄÆ°á»ng dẫn cho dịch vụ {name!s} là <code>{path!s}</code>, nhÆ°ng không tồn " +"tại." + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "Cấu hình giao diện Plymouth" + +#: src/modules/packages/main.py:50 src/modules/packages/main.py:59 +#: src/modules/packages/main.py:69 +msgid "Install packages." +msgstr "Äang cà i đặt các gói ứng dụng." + +#: src/modules/packages/main.py:57 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "Äang xá» lý gói (%(count)d / %(total)d)" + +#: src/modules/packages/main.py:62 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "Äang cà i đặt %(num)d gói ứng dụng." + +#: src/modules/packages/main.py:65 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "Äang gỡ bá» %(num)d gói ứng dụng." + +#: src/modules/bootloader/main.py:42 +msgid "Install bootloader." +msgstr "Äang cà i đặt bá»™ khởi Ä‘á»™ng." + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "Äang thiết láºp đồng hồ máy tÃnh." + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Äang tạo initramfs bằng mkinitfs." + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Chạy mkinitfs thất bại ở hệ thống Ä‘Ãch" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "Mã lá»—i trả vá» là {}" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Äang tạo initramfs bằng dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Chạy dracut thất bại ở hệ thống Ä‘Ãch" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "Äang cấu hình initramfs." + +#: src/modules/openrcdmcryptcfg/main.py:25 +msgid "Configuring OpenRC dmcrypt service." +msgstr "Äang cấu hình dịch vụ OpenRC dmcrypt." + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "Äang viết và o fstab." + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "Và dụ công việc python." + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "Và dụ python bÆ°á»›c {}" + +#: src/modules/localecfg/main.py:30 +msgid "Configuring locales." +msgstr "Äang cấu hình ngôn ngữ." + +#: src/modules/networkcfg/main.py:28 +msgid "Saving network configuration." +msgstr "Äang lÆ°u cấu hình mạng." diff --git a/lang/python/zh_TW/LC_MESSAGES/python.po b/lang/python/zh_TW/LC_MESSAGES/python.po index 92457638ce4081e40cc9a26216865e52bb1d4a19..4196c3d0b2d47e37495f8a0a227c740f25095a1f 100644 --- a/lang/python/zh_TW/LC_MESSAGES/python.po +++ b/lang/python/zh_TW/LC_MESSAGES/python.po @@ -199,7 +199,7 @@ msgstr "未在顯示管ç†å™¨æ¨¡çµ„ä¸é¸å–顯示管ç†å™¨ã€‚" msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." -msgstr "" +msgstr "顯示管ç†å™¨æ¸…單為空或在 globalstorage 與 displaymanager.conf ä¸çš†æœªå®šç¾©ã€‚" #: src/modules/displaymanager/main.py:977 msgid "Display manager configuration was incomplete" diff --git a/src/calamares/CalamaresWindow.cpp b/src/calamares/CalamaresWindow.cpp index 0960da10ac412e27d0396e781811e379c3387826..a141317e011209a25fb2454baf89ae5c93a6e077 100644 --- a/src/calamares/CalamaresWindow.cpp +++ b/src/calamares/CalamaresWindow.cpp @@ -271,7 +271,7 @@ flavoredWidget( Calamares::Branding::PanelFlavor flavor, case Calamares::Branding::PanelFlavor::None: return nullptr; } - NOTREACHED return nullptr; // All enum values handled above + __builtin_unreachable(); } /** @brief Adds widgets to @p layout if they belong on this @p side diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt index b1e40c3ae96bd003fdffc354b9af95345338b024..3964eb3e6084df4b2796fef20cc82c2731796772 100644 --- a/src/libcalamares/CMakeLists.txt +++ b/src/libcalamares/CMakeLists.txt @@ -86,9 +86,6 @@ if( WITH_PYTHON ) PythonJob.cpp PythonJobApi.cpp ) - set_source_files_properties( PythonJob.cpp - PROPERTIES COMPILE_FLAGS "${SUPPRESS_BOOST_WARNINGS}" - ) include_directories(${PYTHON_INCLUDE_DIRS}) link_directories(${PYTHON_LIBRARIES}) @@ -148,8 +145,8 @@ calamares_automoc( calamares ) target_link_libraries( calamares LINK_PRIVATE ${OPTIONAL_PRIVATE_LIBRARIES} - yamlcpp LINK_PUBLIC + yamlcpp Qt5::Core KF5::CoreAddons ${OPTIONAL_PUBLIC_LIBRARIES} diff --git a/src/libcalamares/PythonJob.cpp b/src/libcalamares/PythonJob.cpp index cd066b8bd3dd2d4f1a1adee06c2e09220f12e851..6944f38e59de4ac12b8889fc067064efa18919d2 100644 --- a/src/libcalamares/PythonJob.cpp +++ b/src/libcalamares/PythonJob.cpp @@ -284,7 +284,7 @@ PythonJob::exec() return JobResult::error( message, description ); } } - catch ( bp::error_already_set ) + catch ( bp::error_already_set& ) { QString msg; if ( PyErr_Occurred() ) diff --git a/src/libcalamares/geoip/Handler.cpp b/src/libcalamares/geoip/Handler.cpp index 648ea69f49377901e0ad2ec1d2f5f48244540b6f..8ef72d99b45d8b7992ab18b14f13274df18516f4 100644 --- a/src/libcalamares/geoip/Handler.cpp +++ b/src/libcalamares/geoip/Handler.cpp @@ -101,7 +101,7 @@ create_interface( Handler::Type t, const QString& selector ) case Handler::Type::Fixed: return std::make_unique< GeoIPFixed >( selector ); } - NOTREACHED return nullptr; + __builtin_unreachable(); } static RegionZonePair diff --git a/src/libcalamares/modulesystem/RequirementsModel.cpp b/src/libcalamares/modulesystem/RequirementsModel.cpp index 9dfab0c8f49f2157049361f78e80d4d05eb6d59f..6a7e0a5b49aadc8ef79357031c2987e241e84243 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.cpp +++ b/src/libcalamares/modulesystem/RequirementsModel.cpp @@ -85,16 +85,11 @@ void RequirementsModel::describe() const { cDebug() << "Requirements model has" << m_requirements.count() << "items"; - bool acceptable = true; int count = 0; for ( const auto& r : m_requirements ) { cDebug() << Logger::SubEntry << "requirement" << count << r.name << "satisfied?" << r.satisfied << "mandatory?" << r.mandatory; - if ( r.mandatory && !r.satisfied ) - { - acceptable = false; - } ++count; } } diff --git a/src/libcalamares/partition/PartitionSize.cpp b/src/libcalamares/partition/PartitionSize.cpp index d09cc6064c2f88fdc2cfaaa36de615c5973e69ce..ddd3be2ef5f40a7844736e820ec6be7b2454b5dc 100644 --- a/src/libcalamares/partition/PartitionSize.cpp +++ b/src/libcalamares/partition/PartitionSize.cpp @@ -139,9 +139,7 @@ PartitionSize::toBytes( qint64 totalSectors, qint64 sectorSize ) const case SizeUnit::GiB: return toBytes(); } - - // notreached - return -1; + __builtin_unreachable(); } qint64 @@ -178,9 +176,7 @@ PartitionSize::toBytes( qint64 totalBytes ) const case SizeUnit::GiB: return toBytes(); } - - // notreached - return -1; + __builtin_unreachable(); } qint64 @@ -211,7 +207,7 @@ PartitionSize::toBytes() const case SizeUnit::GiB: return CalamaresUtils::GiBtoBytes( static_cast< unsigned long long >( value() ) ); } - NOTREACHED return -1; + __builtin_unreachable(); } bool @@ -237,7 +233,7 @@ PartitionSize::operator<( const PartitionSize& other ) const case SizeUnit::GiB: return ( toBytes() < other.toBytes() ); } - NOTREACHED return false; + __builtin_unreachable(); } bool @@ -263,7 +259,7 @@ PartitionSize::operator>( const PartitionSize& other ) const case SizeUnit::GiB: return ( toBytes() > other.toBytes() ); } - NOTREACHED return false; + __builtin_unreachable(); } bool @@ -289,7 +285,7 @@ PartitionSize::operator==( const PartitionSize& other ) const case SizeUnit::GiB: return ( toBytes() == other.toBytes() ); } - NOTREACHED return false; + __builtin_unreachable(); } } // namespace Partition diff --git a/src/libcalamares/utils/Yaml.cpp b/src/libcalamares/utils/Yaml.cpp index b787589c6e9d71977fc04cb8dcaed387103200ef..dd7523ae4cac310f024a3750caa99d518efc4188 100644 --- a/src/libcalamares/utils/Yaml.cpp +++ b/src/libcalamares/utils/Yaml.cpp @@ -52,9 +52,7 @@ yamlToVariant( const YAML::Node& node ) case YAML::NodeType::Undefined: return QVariant(); } - - // NOTREACHED - return QVariant(); + __builtin_unreachable(); } diff --git a/src/libcalamaresui/utils/QtCompat.h b/src/libcalamaresui/utils/QtCompat.h new file mode 100644 index 0000000000000000000000000000000000000000..d53c01e0b6dd4fa322fae0f915bfe66041a025cd --- /dev/null +++ b/src/libcalamaresui/utils/QtCompat.h @@ -0,0 +1,42 @@ +/* === This file is part of Calamares - <https://calamares.io> === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org> + * SPDX-License-Identifier: GPL-3.0-or-later + * Calamares is Free Software: see the License-Identifier above. + * + */ + +/**@file Handle compatibility and deprecations across Qt versions + * + * Since Calamares is supposed to work with Qt 5.9 or later, it covers a + * lot of changes in the Qt API. Especially the later Qt 5.15 (last LTS) + * versions deprecate a number of enum values and parts of the QWidgets + * API. This file adjusts for that by introducing suitable aliases + * and workaround-functions. + * + * For a similar approach for QtCore, see libcalamares/utils/String.h + */ + +#ifndef UTILS_QTCOMPAT_H +#define UTILS_QTCOMPAT_H + +#include <QPalette> + +/* Avoid warnings about QPalette changes */ +constexpr static const auto WindowBackground = +#if QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 ) + QPalette::Background +#else + QPalette::Window +#endif + ; + +constexpr static const auto WindowText = +#if QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 ) + QPalette::Foreground +#else + QPalette::WindowText +#endif + ; + +#endif diff --git a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp index e3498c62ded2b1ba3c8f99e9d377f0cceb262891..bb629b217db5b0702a0257f12e28a2a3714d6577 100644 --- a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp +++ b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp @@ -42,7 +42,7 @@ makeSlideshow( QWidget* parent ) return new Calamares::SlideshowPictures( parent ); #ifdef WITH_QML case 1: - FALLTHRU; + [[fallthrough]]; case 2: return new Calamares::SlideshowQML( parent ); #endif diff --git a/src/modules/keyboard/AdditionalLayoutInfo.h b/src/modules/keyboard/AdditionalLayoutInfo.h new file mode 100644 index 0000000000000000000000000000000000000000..61e854d3b9ad2ea35430d9918827d6a9232b591c --- /dev/null +++ b/src/modules/keyboard/AdditionalLayoutInfo.h @@ -0,0 +1,25 @@ +/* === This file is part of Calamares - <https://calamares.io> === + * + * SPDX-FileCopyrightText: 2020 Artem Grinev <agrinev@manjaro.org> + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef KEYBOARD_ADDITIONAL_LAYOUT_INFO_H +#define KEYBOARD_ADDITIONAL_LAYOUT_INFO_H + +#include <QString> + +struct AdditionalLayoutInfo +{ + QString additionalLayout; + QString additionalVariant; + + QString groupSwitcher; + + QString vconsoleKeymap; +}; + +#endif diff --git a/src/modules/keyboard/CMakeLists.txt b/src/modules/keyboard/CMakeLists.txt index e9037bc0318277e660345078ff45cb962a1910d6..32e9a0592e6a6e2f727e32f22156bbfa3dc01d53 100644 --- a/src/modules/keyboard/CMakeLists.txt +++ b/src/modules/keyboard/CMakeLists.txt @@ -7,6 +7,7 @@ calamares_add_plugin( keyboard TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES + Config.cpp KeyboardViewStep.cpp KeyboardPage.cpp KeyboardLayoutModel.cpp diff --git a/src/modules/keyboard/Config.cpp b/src/modules/keyboard/Config.cpp index 11a20bbb74cba74376e5cfed36089a8b6d23913b..6475d9bc854cb2ad020ac544c91b30e8340cf9ea 100644 --- a/src/modules/keyboard/Config.cpp +++ b/src/modules/keyboard/Config.cpp @@ -18,176 +18,131 @@ #include "utils/Logger.h" #include "utils/Retranslator.h" #include "utils/String.h" +#include "utils/Variant.h" #include <QApplication> #include <QProcess> #include <QTimer> -KeyboardModelsModel::KeyboardModelsModel( QObject* parent ) - : QAbstractListModel( parent ) +/* Returns stringlist with suitable setxkbmap command-line arguments + * to set the given @p model. + */ +static inline QStringList +xkbmap_model_args( const QString& model ) { - detectModels(); + QStringList r { "-model", model }; + return r; } -void -KeyboardModelsModel::detectModels() + +/* Returns stringlist with suitable setxkbmap command-line arguments + * to set the given @p layout and @p variant. + */ +static inline QStringList +xkbmap_layout_args( const QString& layout, const QString& variant ) { - beginResetModel(); - const auto models = KeyboardGlobal::getKeyboardModels(); - auto index = -1; - for ( const auto& key : models.keys() ) + QStringList r { "-layout", layout }; + if ( !variant.isEmpty() ) { - index++; - m_list << QMap< QString, QString > { { "label", key }, { "key", models[ key ] } }; - if ( models[ key ] == "pc105" ) - { - this->setCurrentIndex( index ); - } + r << "-variant" << variant; } - endResetModel(); -} - -void -KeyboardModelsModel::refresh() -{ - m_list.clear(); - setCurrentIndex( -1 ); - detectModels(); + return r; } -QVariant -KeyboardModelsModel::data( const QModelIndex& index, int role ) const +static inline QStringList +xkbmap_layout_args( const QStringList& layouts, + const QStringList& variants, + const QString& switchOption = "grp:alt_shift_toggle" ) { - if ( !index.isValid() ) + if ( layouts.size() != variants.size() ) { - return QVariant(); + cError() << "Number of layouts and variants must be equal (empty string should be used if there is no " + "corresponding variant)"; + return QStringList(); } - const auto item = m_list.at( index.row() ); - return role == Qt::DisplayRole ? item[ "label" ] : item[ "key" ]; -} -int -KeyboardModelsModel::rowCount( const QModelIndex& ) const -{ - return m_list.count(); -} - -QHash< int, QByteArray > -KeyboardModelsModel::roleNames() const -{ - return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } }; -} + QStringList r { "-layout", layouts.join( "," ) }; -int -KeyboardModelsModel::currentIndex() const -{ - return m_currentIndex; -} + if ( !variants.isEmpty() ) + { + r << "-variant" << variants.join( "," ); + } -const QMap< QString, QString > -KeyboardModelsModel::item( const int& index ) const -{ - if ( index >= m_list.count() || index < 0 ) + if ( !switchOption.isEmpty() ) { - return QMap< QString, QString >(); + r << "-option" << switchOption; } - return m_list.at( index ); + return r; } -const QMap< QString, QString > -KeyboardVariantsModel::item( const int& index ) const +/* Returns group-switch setxkbd option if set + * or an empty string otherwise + */ +static inline QString +xkbmap_query_grp_option() { - if ( index >= m_list.count() || index < 0 ) + QProcess setxkbmapQuery; + setxkbmapQuery.start( "setxkbmap", { "-query" } ); + setxkbmapQuery.waitForFinished(); + + QString outputLine; + + do { - return QMap< QString, QString >(); + outputLine = setxkbmapQuery.readLine(); + } while ( setxkbmapQuery.canReadLine() && !outputLine.startsWith( "options:" ) ); + + if ( !outputLine.startsWith( "options:" ) ) + { + return QString(); } - return m_list.at( index ); -} + int index = outputLine.indexOf( "grp:" ); -void -KeyboardModelsModel::setCurrentIndex( const int& index ) -{ - if ( index >= m_list.count() || index < 0 ) + if ( index == -1 ) { - return; + return QString(); } - m_currentIndex = index; - emit currentIndexChanged( m_currentIndex ); -} + //it's either in the end of line or before the other option so \s or , + int lastIndex = outputLine.indexOf( QRegExp( "[\\s,]" ), index ); -KeyboardVariantsModel::KeyboardVariantsModel( QObject* parent ) - : QAbstractListModel( parent ) -{ + return outputLine.mid( index, lastIndex - 1 ); } -int -KeyboardVariantsModel::currentIndex() const +AdditionalLayoutInfo +Config::getAdditionalLayoutInfo( const QString& layout ) { - return m_currentIndex; -} + QFile layoutTable( ":/non-ascii-layouts" ); -void -KeyboardVariantsModel::setCurrentIndex( const int& index ) -{ - if ( index >= m_list.count() || index < 0 ) + if ( !layoutTable.open( QIODevice::ReadOnly | QIODevice::Text ) ) { - return; + cError() << "Non-ASCII layout table could not be opened"; + return AdditionalLayoutInfo(); } - m_currentIndex = index; - emit currentIndexChanged( m_currentIndex ); -} + QString tableLine; -QVariant -KeyboardVariantsModel::data( const QModelIndex& index, int role ) const -{ - if ( !index.isValid() ) + do + { + tableLine = layoutTable.readLine(); + } while ( layoutTable.canReadLine() && !tableLine.startsWith( layout ) ); + + if ( !tableLine.startsWith( layout ) ) { - return QVariant(); + return AdditionalLayoutInfo(); } - const auto item = m_list.at( index.row() ); - return role == Qt::DisplayRole ? item[ "label" ] : item[ "key" ]; -} -int -KeyboardVariantsModel::rowCount( const QModelIndex& ) const -{ - return m_list.count(); -} + QStringList tableEntries = tableLine.split( " ", SplitSkipEmptyParts ); -QHash< int, QByteArray > -KeyboardVariantsModel::roleNames() const -{ - return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } }; -} + AdditionalLayoutInfo r; -void -KeyboardVariantsModel::setVariants( QMap< QString, QString > variants ) -{ - m_list.clear(); - beginResetModel(); - for ( const auto& key : variants.keys() ) - { - const auto item = QMap< QString, QString > { { "label", key }, { "key", variants[ key ] } }; - m_list << item; - } - endResetModel(); -} + r.additionalLayout = tableEntries[ 1 ]; + r.additionalVariant = tableEntries[ 2 ] == "-" ? "" : tableEntries[ 2 ]; + + r.vconsoleKeymap = tableEntries[ 3 ]; -/* Returns stringlist with suitable setxkbmap command-line arguments - * to set the given @p layout and @p variant. - */ -static inline QStringList -xkbmap_args( const QString& layout, const QString& variant ) -{ - QStringList r { "-layout", layout }; - if ( !variant.isEmpty() ) - { - r << "-variant" << variant; - } return r; } @@ -201,9 +156,9 @@ Config::Config( QObject* parent ) // Connect signals and slots connect( m_keyboardModelsModel, &KeyboardModelsModel::currentIndexChanged, [&]( int index ) { - m_selectedModel = m_keyboardModelsModel->item( index ).value( "key", "pc105" ); - // Set Xorg keyboard model - QProcess::execute( "setxkbmap", QStringList { "-model", m_selectedModel } ); + // Set Xorg keyboard model + m_selectedModel = m_keyboardModelsModel->key( index ); + QProcess::execute( "setxkbmap", xkbmap_model_args( m_selectedModel ) ); emit prettyStatusChanged(); } ); @@ -214,9 +169,9 @@ Config::Config( QObject* parent ) } ); connect( m_keyboardVariantsModel, &KeyboardVariantsModel::currentIndexChanged, [&]( int index ) { - m_selectedVariant = m_keyboardVariantsModel->item( index )[ "key" ]; + // Set Xorg keyboard layout + variant + m_selectedVariant = m_keyboardVariantsModel->key( index ); - // Set Xorg keyboard layout if ( m_setxkbmapTimer.isActive() ) { m_setxkbmapTimer.stop(); @@ -224,8 +179,32 @@ Config::Config( QObject* parent ) } connect( &m_setxkbmapTimer, &QTimer::timeout, this, [=] { - QProcess::execute( "setxkbmap", xkbmap_args( m_selectedLayout, m_selectedVariant ) ); - cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant; + m_additionalLayoutInfo = getAdditionalLayoutInfo( m_selectedLayout ); + + if ( !m_additionalLayoutInfo.additionalLayout.isEmpty() ) + { + m_additionalLayoutInfo.groupSwitcher = xkbmap_query_grp_option(); + + if ( m_additionalLayoutInfo.groupSwitcher.isEmpty() ) + { + m_additionalLayoutInfo.groupSwitcher = "grp:alt_shift_toggle"; + } + + QProcess::execute( "setxkbmap", + xkbmap_layout_args( { m_additionalLayoutInfo.additionalLayout, m_selectedLayout }, + { m_additionalLayoutInfo.additionalVariant, m_selectedVariant }, + m_additionalLayoutInfo.groupSwitcher ) ); + + + cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant << "(added " + << m_additionalLayoutInfo.additionalLayout << "-" << m_additionalLayoutInfo.additionalVariant + << " since current layout is not ASCII-capable)"; + } + else + { + QProcess::execute( "setxkbmap", xkbmap_layout_args( m_selectedLayout, m_selectedVariant ) ); + cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant; + } m_setxkbmapTimer.disconnect( this ); } ); m_setxkbmapTimer.start( QApplication::keyboardInputInterval() ); @@ -269,7 +248,7 @@ findLayout( const KeyboardLayoutModel* klm, const QString& currentLayout ) } void -Config::init() +Config::detectCurrentKeyboardLayout() { //### Detect current keyboard layout and variant QString currentLayout; @@ -281,18 +260,25 @@ Config::init() { const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts ); - for ( QString line : list ) + // A typical line looks like + // xkb_symbols { include "pc+latin+ru:2+inet(evdev)+group(alt_shift_toggle)+ctrl(swapcaps)" }; + for ( const auto& line : list ) { - line = line.trimmed(); - if ( !line.startsWith( "xkb_symbols" ) ) + if ( !line.trimmed().startsWith( "xkb_symbols" ) ) { continue; } - line = line.remove( "}" ).remove( "{" ).remove( ";" ); - line = line.mid( line.indexOf( "\"" ) + 1 ); + int firstQuote = line.indexOf( '"' ); + int lastQuote = line.lastIndexOf( '"' ); - QStringList split = line.split( "+", SplitSkipEmptyParts ); + if ( firstQuote < 0 || lastQuote < 0 || lastQuote <= firstQuote ) + { + continue; + } + + QStringList split = line.mid( firstQuote + 1, lastQuote - firstQuote ).split( "+", SplitSkipEmptyParts ); + cDebug() << split; if ( split.size() >= 2 ) { currentLayout = split.at( 1 ); @@ -338,11 +324,11 @@ Config::prettyStatus() const { QString status; status += tr( "Set keyboard model to %1.<br/>" ) - .arg( m_keyboardModelsModel->item( m_keyboardModelsModel->currentIndex() )[ "label" ] ); + .arg( m_keyboardModelsModel->label( m_keyboardModelsModel->currentIndex() ) ); QString layout = m_keyboardLayoutsModel->item( m_keyboardLayoutsModel->currentIndex() ).second.description; QString variant = m_keyboardVariantsModel->currentIndex() >= 0 - ? m_keyboardVariantsModel->item( m_keyboardVariantsModel->currentIndex() )[ "label" ] + ? m_keyboardVariantsModel->label( m_keyboardVariantsModel->currentIndex() ) : QString( "<default>" ); status += tr( "Set keyboard layout to %1/%2." ).arg( layout, variant ); @@ -350,16 +336,17 @@ Config::prettyStatus() const } Calamares::JobList -Config::createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ) +Config::createJobs() { QList< Calamares::job_ptr > list; Calamares::Job* j = new SetKeyboardLayoutJob( m_selectedModel, m_selectedLayout, m_selectedVariant, - xOrgConfFileName, - convertedKeymapPath, - writeEtcDefaultKeyboard ); + m_additionalLayoutInfo, + m_xOrgConfFileName, + m_convertedKeymapPath, + m_writeEtcDefaultKeyboard ); list.append( Calamares::job_ptr( j ) ); return list; @@ -393,13 +380,12 @@ Config::guessLayout( const QStringList& langParts ) cDebug() << "Next level:" << *countryPart; for ( int variantnumber = 0; variantnumber < m_keyboardVariantsModel->rowCount(); ++variantnumber ) { - if ( m_keyboardVariantsModel->item( variantnumber )[ "key" ].compare( *countryPart, - Qt::CaseInsensitive ) ) + if ( m_keyboardVariantsModel->key( variantnumber ).compare( *countryPart, Qt::CaseInsensitive ) + == 0 ) { m_keyboardVariantsModel->setCurrentIndex( variantnumber ); - cDebug() << Logger::SubEntry << "matched variant" - << m_keyboardVariantsModel->item( variantnumber )[ "key" ] << ' ' - << m_keyboardVariantsModel->item( variantnumber )[ "key" ]; + cDebug() << Logger::SubEntry << "matched variant" << *countryPart << ' ' + << m_keyboardVariantsModel->key( variantnumber ); } } } @@ -507,6 +493,13 @@ Config::finalize() { gs->insert( "keyboardLayout", m_selectedLayout ); gs->insert( "keyboardVariant", m_selectedVariant ); //empty means default variant + + if ( !m_additionalLayoutInfo.additionalLayout.isEmpty() ) + { + gs->insert( "keyboardAdditionalLayout", m_additionalLayoutInfo.additionalLayout ); + gs->insert( "keyboardAdditionalLayout", m_additionalLayoutInfo.additionalVariant ); + gs->insert( "keyboardVConsoleKeymap", m_additionalLayoutInfo.vconsoleKeymap ); + } } //FIXME: also store keyboard model for something? @@ -529,3 +522,41 @@ Config::updateVariants( const QPersistentModelIndex& currentItem, QString curren } } } + +void +Config::setConfigurationMap( const QVariantMap& configurationMap ) +{ + using namespace CalamaresUtils; + + if ( configurationMap.contains( "xOrgConfFileName" ) + && configurationMap.value( "xOrgConfFileName" ).type() == QVariant::String + && !getString( configurationMap, "xOrgConfFileName" ).isEmpty() ) + { + m_xOrgConfFileName = getString( configurationMap, "xOrgConfFileName" ); + } + else + { + m_xOrgConfFileName = "00-keyboard.conf"; + } + + if ( configurationMap.contains( "convertedKeymapPath" ) + && configurationMap.value( "convertedKeymapPath" ).type() == QVariant::String + && !getString( configurationMap, "convertedKeymapPath" ).isEmpty() ) + { + m_convertedKeymapPath = getString( configurationMap, "convertedKeymapPath" ); + } + else + { + m_convertedKeymapPath = QString(); + } + + if ( configurationMap.contains( "writeEtcDefaultKeyboard" ) + && configurationMap.value( "writeEtcDefaultKeyboard" ).type() == QVariant::Bool ) + { + m_writeEtcDefaultKeyboard = getBool( configurationMap, "writeEtcDefaultKeyboard", true ); + } + else + { + m_writeEtcDefaultKeyboard = true; + } +} diff --git a/src/modules/keyboard/Config.h b/src/modules/keyboard/Config.h index 44a893faa2bf5a28965789fe17eb5a49524bdde6..e35193484aaf63367eb6dbd7e7f46f5424b9f184 100644 --- a/src/modules/keyboard/Config.h +++ b/src/modules/keyboard/Config.h @@ -11,6 +11,7 @@ #ifndef KEYBOARD_CONFIG_H #define KEYBOARD_CONFIG_H +#include "AdditionalLayoutInfo.h" #include "Job.h" #include "KeyboardLayoutModel.h" @@ -20,63 +21,6 @@ #include <QTimer> #include <QUrl> -class KeyboardModelsModel : public QAbstractListModel -{ - Q_OBJECT - Q_PROPERTY( int currentIndex WRITE setCurrentIndex READ currentIndex NOTIFY currentIndexChanged ) - -public: - explicit KeyboardModelsModel( QObject* parent = nullptr ); - int rowCount( const QModelIndex& = QModelIndex() ) const override; - QVariant data( const QModelIndex& index, int role ) const override; - - void setCurrentIndex( const int& index ); - int currentIndex() const; - const QMap< QString, QString > item( const int& index ) const; - -public slots: - void refresh(); - -protected: - QHash< int, QByteArray > roleNames() const override; - -private: - int m_currentIndex = -1; - QVector< QMap< QString, QString > > m_list; - void detectModels(); - -signals: - void currentIndexChanged( int index ); -}; - -class KeyboardVariantsModel : public QAbstractListModel -{ - Q_OBJECT - Q_PROPERTY( int currentIndex WRITE setCurrentIndex READ currentIndex NOTIFY currentIndexChanged ) - -public: - explicit KeyboardVariantsModel( QObject* parent = nullptr ); - void setVariants( QMap< QString, QString > variants ); - - int rowCount( const QModelIndex& = QModelIndex() ) const override; - QVariant data( const QModelIndex& index, int role ) const override; - - void setCurrentIndex( const int& index ); - int currentIndex() const; - - const QMap< QString, QString > item( const int& index ) const; - -protected: - QHash< int, QByteArray > roleNames() const override; - -private: - int m_currentIndex = -1; - QVector< QMap< QString, QString > > m_list; - -signals: - void currentIndexChanged( int index ); -}; - class Config : public QObject { Q_OBJECT @@ -88,15 +32,35 @@ class Config : public QObject public: Config( QObject* parent = nullptr ); - void init(); + void detectCurrentKeyboardLayout(); - Calamares::JobList - createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ); + Calamares::JobList createJobs(); QString prettyStatus() const; void onActivate(); void finalize(); + void setConfigurationMap( const QVariantMap& configurationMap ); + + static AdditionalLayoutInfo getAdditionalLayoutInfo( const QString& layout ); + + /* A model is a physical configuration of a keyboard, e.g. 105-key PC + * or TKL 88-key physical size. + */ + KeyboardModelsModel* keyboardModels() const; + /* A layout describes the basic keycaps / language assigned to the + * keys of the physical keyboard, e.g. English (US) or Russian. + */ + KeyboardLayoutModel* keyboardLayouts() const; + /* A variant describes a variant of the basic keycaps; this can + * concern options (dead keys), or different placements of the keycaps + * (dvorak). + */ + KeyboardVariantsModel* keyboardVariants() const; + +signals: + void prettyStatusChanged(); + private: void guessLayout( const QStringList& langParts ); void updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant = QString() ); @@ -108,16 +72,16 @@ private: QString m_selectedLayout; QString m_selectedModel; QString m_selectedVariant; - QTimer m_setxkbmapTimer; -protected: - KeyboardModelsModel* keyboardModels() const; - KeyboardLayoutModel* keyboardLayouts() const; - KeyboardVariantsModel* keyboardVariants() const; + // Layout (and corresponding info) added if current one doesn't support ASCII (e.g. Russian or Japanese) + AdditionalLayoutInfo m_additionalLayoutInfo; + QTimer m_setxkbmapTimer; -signals: - void prettyStatusChanged(); + // From configuration + QString m_xOrgConfFileName; + QString m_convertedKeymapPath; + bool m_writeEtcDefaultKeyboard = true; }; diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index 5b92678f60dde8df725a9fd49eb15cc5e755e62d..b8cb892f4d76f3db02a206a37261680d3cc91846 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -10,8 +10,108 @@ #include "KeyboardLayoutModel.h" +#include "utils/Logger.h" + #include <algorithm> +XKBListModel::XKBListModel( QObject* parent ) + : QAbstractListModel( parent ) +{ +} + +int +XKBListModel::rowCount( const QModelIndex& ) const +{ + return m_list.count(); +} + +QVariant +XKBListModel::data( const QModelIndex& index, int role ) const +{ + if ( !index.isValid() ) + { + return QVariant(); + } + if ( index.row() < 0 || index.row() >= m_list.count() ) + { + return QVariant(); + } + + const auto item = m_list.at( index.row() ); + switch ( role ) + { + case LabelRole: + return item.label; + case KeyRole: + return item.key; + default: + return QVariant(); + } + __builtin_unreachable(); +} + +QString +XKBListModel::key( int index ) const +{ + if ( index < 0 || index >= m_list.count() ) + { + return QString(); + } + return m_list[ index ].key; +} + +QString +XKBListModel::label( int index ) const +{ + if ( index < 0 || index >= m_list.count() ) + { + return QString(); + } + return m_list[ index ].label; +} + +QHash< int, QByteArray > +XKBListModel::roleNames() const +{ + return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } }; +} + +void +XKBListModel::setCurrentIndex( int index ) +{ + if ( index >= m_list.count() || index < 0 ) + { + return; + } + if ( m_currentIndex != index ) + { + m_currentIndex = index; + emit currentIndexChanged( m_currentIndex ); + } +} + +KeyboardModelsModel::KeyboardModelsModel( QObject* parent ) + : XKBListModel( parent ) +{ + // The models map is from human-readable names (!) to xkb identifier + const auto models = KeyboardGlobal::getKeyboardModels(); + m_list.reserve( models.count() ); + int index = 0; + for ( const auto& key : models.keys() ) + { + // So here *key* is the key in the map, which is the human-readable thing, + // while the struct fields are xkb-id, and human-readable + m_list << ModelInfo { models[ key ], key }; + if ( models[ key ] == "pc105" ) + { + m_defaultPC105 = index; + } + index++; + } + + cDebug() << "Loaded" << m_list.count() << "keyboard models"; +} + KeyboardLayoutModel::KeyboardLayoutModel( QObject* parent ) : QAbstractListModel( parent ) @@ -83,15 +183,18 @@ KeyboardLayoutModel::roleNames() const } void -KeyboardLayoutModel::setCurrentIndex( const int& index ) +KeyboardLayoutModel::setCurrentIndex( int index ) { if ( index >= m_layouts.count() || index < 0 ) { return; } - m_currentIndex = index; - emit currentIndexChanged( m_currentIndex ); + if ( m_currentIndex != index ) + { + m_currentIndex = index; + emit currentIndexChanged( m_currentIndex ); + } } int @@ -99,3 +202,22 @@ KeyboardLayoutModel::currentIndex() const { return m_currentIndex; } + + +KeyboardVariantsModel::KeyboardVariantsModel( QObject* parent ) + : XKBListModel( parent ) +{ +} + +void +KeyboardVariantsModel::setVariants( QMap< QString, QString > variants ) +{ + beginResetModel(); + m_list.clear(); + m_list.reserve( variants.count() ); + for ( const auto& key : variants.keys() ) + { + m_list << ModelInfo { variants[ key ], key }; + } + endResetModel(); +} diff --git a/src/modules/keyboard/KeyboardLayoutModel.h b/src/modules/keyboard/KeyboardLayoutModel.h index f4699c9f8834a2fdec02f30268c047038e3b355c..60747da55ed7508a4ba57fe8e8f249dfaed1222c 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.h +++ b/src/modules/keyboard/KeyboardLayoutModel.h @@ -17,6 +17,85 @@ #include <QMetaType> #include <QObject> +/** @brief A list model with an xkb key and a human-readable string + * + * This model acts like it has a single selection, as well. + */ + +class XKBListModel : public QAbstractListModel +{ + Q_OBJECT + Q_PROPERTY( int currentIndex WRITE setCurrentIndex READ currentIndex NOTIFY currentIndexChanged ) + +public: + enum + { + LabelRole = Qt::DisplayRole, ///< Human-readable + KeyRole = Qt::UserRole ///< xkb identifier + }; + + explicit XKBListModel( QObject* parent = nullptr ); + + int rowCount( const QModelIndex& = QModelIndex() ) const override; + QVariant data( const QModelIndex& index, int role ) const override; + /** @brief xkb key for a given index (row) + * + * This is like calling data( QModelIndex( index ), KeyRole ).toString(), + * but shorter and faster. Can return an empty string if index is invalid. + */ + QString key( int index ) const; + + /** @brief human-readable label for a given index (row) + * + * This is like calling data( QModelIndex( index ), LabelRole ).toString(), + * but shorter and faster. Can return an empty string if index is invalid. + */ + QString label( int index ) const; + + QHash< int, QByteArray > roleNames() const override; + + void setCurrentIndex( int index ); + int currentIndex() const { return m_currentIndex; } + +signals: + void currentIndexChanged( int index ); + +protected: + struct ModelInfo + { + /// XKB identifier + QString key; + /// Human-readable + QString label; + }; + QVector< ModelInfo > m_list; + int m_currentIndex = -1; +}; + + +/** @brief A list model of the physical keyboard formats ("models" in xkb) + * + * This model acts like it has a single selection, as well. + */ +class KeyboardModelsModel : public XKBListModel +{ + Q_OBJECT + +public: + explicit KeyboardModelsModel( QObject* parent = nullptr ); + + /// @brief Set the index back to PC105 (the default physical model) + void setCurrentIndex() { XKBListModel::setCurrentIndex( m_defaultPC105 ); } + +private: + int m_defaultPC105 = -1; ///< The index of pc105, if there is one +}; + +/** @brief A list of keyboard layouts (arrangements of keycaps) + * + * Layouts can have a list of associated Variants, so this + * is slightly more complicated than the "regular" XKBListModel. + */ class KeyboardLayoutModel : public QAbstractListModel { Q_OBJECT @@ -35,7 +114,7 @@ public: QVariant data( const QModelIndex& index, int role ) const override; - void setCurrentIndex( const int& index ); + void setCurrentIndex( int index ); int currentIndex() const; const QPair< QString, KeyboardGlobal::KeyboardInfo > item( const int& index ) const; @@ -51,4 +130,20 @@ signals: void currentIndexChanged( int index ); }; +/** @brief A list of variants (xkb id and human-readable) + * + * The variants that are available depend on the Layout that is used, + * so the `setVariants()` function can be used to update the variants + * when the two models are related. + */ +class KeyboardVariantsModel : public XKBListModel +{ + Q_OBJECT + +public: + explicit KeyboardVariantsModel( QObject* parent = nullptr ); + + void setVariants( QMap< QString, QString > variants ); +}; + #endif // KEYBOARDLAYOUTMODEL_H diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp index 07c5cf763a49ef55794146b1f6bafa8ad8f4979d..2be897e58ab6079941f16e26425c33e99fc29dd3 100644 --- a/src/modules/keyboard/KeyboardPage.cpp +++ b/src/modules/keyboard/KeyboardPage.cpp @@ -15,6 +15,7 @@ #include "KeyboardPage.h" +#include "Config.h" #include "KeyboardLayoutModel.h" #include "SetKeyboardLayoutJob.h" #include "keyboardwidget/keyboardpreview.h" @@ -40,451 +41,64 @@ public: LayoutItem::~LayoutItem() {} -static QPersistentModelIndex -findLayout( const KeyboardLayoutModel* klm, const QString& currentLayout ) -{ - QPersistentModelIndex currentLayoutItem; - - for ( int i = 0; i < klm->rowCount(); ++i ) - { - QModelIndex idx = klm->index( i ); - if ( idx.isValid() && idx.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString() == currentLayout ) - { - currentLayoutItem = idx; - } - } - - return currentLayoutItem; -} - -KeyboardPage::KeyboardPage( QWidget* parent ) +KeyboardPage::KeyboardPage( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::Page_Keyboard ) , m_keyboardPreview( new KeyBoardPreview( this ) ) - , m_defaultIndex( 0 ) + , m_config( config ) { ui->setupUi( this ); // Keyboard Preview ui->KBPreviewLayout->addWidget( m_keyboardPreview ); - m_setxkbmapTimer.setSingleShot( true ); - - // Connect signals and slots - connect( ui->listVariant, &QListWidget::currentItemChanged, this, &KeyboardPage::onListVariantCurrentItemChanged ); - - connect( - ui->buttonRestore, &QPushButton::clicked, [this] { ui->comboBoxModel->setCurrentIndex( m_defaultIndex ); } ); - - connect( ui->comboBoxModel, &QComboBox::currentTextChanged, [this]( const QString& text ) { - QString model = m_models.value( text, "pc105" ); - - // Set Xorg keyboard model - QProcess::execute( "setxkbmap", QStringList { "-model", model } ); - } ); - - CALAMARES_RETRANSLATE( ui->retranslateUi( this ); ) -} - - -KeyboardPage::~KeyboardPage() -{ - delete ui; -} - - -void -KeyboardPage::init() -{ - //### Detect current keyboard layout and variant - QString currentLayout; - QString currentVariant; - QProcess process; - process.start( "setxkbmap", QStringList() << "-print" ); - - if ( process.waitForFinished() ) { - const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts ); - - for ( QString line : list ) - { - line = line.trimmed(); - if ( !line.startsWith( "xkb_symbols" ) ) - { - continue; - } - - line = line.remove( "}" ).remove( "{" ).remove( ";" ); - line = line.mid( line.indexOf( "\"" ) + 1 ); - - QStringList split = line.split( "+", SplitSkipEmptyParts ); - if ( split.size() >= 2 ) - { - currentLayout = split.at( 1 ); - - if ( currentLayout.contains( "(" ) ) - { - int parenthesisIndex = currentLayout.indexOf( "(" ); - currentVariant = currentLayout.mid( parenthesisIndex + 1 ).trimmed(); - currentVariant.chop( 1 ); - currentLayout = currentLayout.mid( 0, parenthesisIndex ).trimmed(); - } - - break; - } - } + auto* model = config->keyboardModels(); + model->setCurrentIndex(); // To default PC105 + ui->physicalModelSelector->setModel( model ); + ui->physicalModelSelector->setCurrentIndex( model->currentIndex() ); } - - //### Models - m_models = KeyboardGlobal::getKeyboardModels(); - QMapIterator< QString, QString > mi( m_models ); - - ui->comboBoxModel->blockSignals( true ); - - while ( mi.hasNext() ) { - mi.next(); - - if ( mi.value() == "pc105" ) - { - m_defaultIndex = ui->comboBoxModel->count(); - } - - ui->comboBoxModel->addItem( mi.key() ); - } - - ui->comboBoxModel->blockSignals( false ); - - // Set to default value pc105 - ui->comboBoxModel->setCurrentIndex( m_defaultIndex ); - - - //### Layouts and Variants - - KeyboardLayoutModel* klm = new KeyboardLayoutModel( this ); - ui->listLayout->setModel( klm ); - connect( ui->listLayout->selectionModel(), - &QItemSelectionModel::currentChanged, - this, - &KeyboardPage::onListLayoutCurrentItemChanged ); - - // Block signals - ui->listLayout->blockSignals( true ); - - QPersistentModelIndex currentLayoutItem = findLayout( klm, currentLayout ); - if ( !currentLayoutItem.isValid() && ( ( currentLayout == "latin" ) || ( currentLayout == "pc" ) ) ) - { - currentLayout = "us"; - currentLayoutItem = findLayout( klm, currentLayout ); - } - - // Set current layout and variant - if ( currentLayoutItem.isValid() ) - { - ui->listLayout->setCurrentIndex( currentLayoutItem ); - updateVariants( currentLayoutItem, currentVariant ); - } - - // Unblock signals - ui->listLayout->blockSignals( false ); - - // Default to the first available layout if none was set - // Do this after unblocking signals so we get the default variant handling. - if ( !currentLayoutItem.isValid() && klm->rowCount() > 0 ) - { - ui->listLayout->setCurrentIndex( klm->index( 0 ) ); + auto* model = config->keyboardLayouts(); + ui->layoutSelector->setModel( model ); + ui->layoutSelector->setCurrentIndex( model->index( model->currentIndex() ) ); } -} - - -QString -KeyboardPage::prettyStatus() const -{ - QString status; - status += tr( "Set keyboard model to %1.<br/>" ).arg( ui->comboBoxModel->currentText() ); - - QString layout = ui->listLayout->currentIndex().data().toString(); - QString variant = ui->listVariant->currentItem() ? ui->listVariant->currentItem()->text() : QString( "<default>" ); - status += tr( "Set keyboard layout to %1/%2." ).arg( layout, variant ); - - return status; -} - - -QList< Calamares::job_ptr > -KeyboardPage::createJobs( const QString& xOrgConfFileName, - const QString& convertedKeymapPath, - bool writeEtcDefaultKeyboard ) -{ - QList< Calamares::job_ptr > list; - QString selectedModel = m_models.value( ui->comboBoxModel->currentText(), "pc105" ); - - Calamares::Job* j = new SetKeyboardLayoutJob( selectedModel, - m_selectedLayout, - m_selectedVariant, - xOrgConfFileName, - convertedKeymapPath, - writeEtcDefaultKeyboard ); - list.append( Calamares::job_ptr( j ) ); - - return list; -} - - -void -KeyboardPage::guessLayout( const QStringList& langParts ) -{ - const KeyboardLayoutModel* klm = dynamic_cast< KeyboardLayoutModel* >( ui->listLayout->model() ); - bool foundCountryPart = false; - for ( auto countryPart = langParts.rbegin(); !foundCountryPart && countryPart != langParts.rend(); ++countryPart ) { - cDebug() << Logger::SubEntry << "looking for locale part" << *countryPart; - for ( int i = 0; i < klm->rowCount(); ++i ) - { - QModelIndex idx = klm->index( i ); - QString name - = idx.isValid() ? idx.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString() : QString(); - if ( idx.isValid() && ( name.compare( *countryPart, Qt::CaseInsensitive ) == 0 ) ) - { - cDebug() << Logger::SubEntry << "matched" << name; - ui->listLayout->setCurrentIndex( idx ); - foundCountryPart = true; - break; - } - } - if ( foundCountryPart ) - { - ++countryPart; - if ( countryPart != langParts.rend() ) - { - cDebug() << "Next level:" << *countryPart; - for ( int variantnumber = 0; variantnumber < ui->listVariant->count(); ++variantnumber ) - { - LayoutItem* variantdata = dynamic_cast< LayoutItem* >( ui->listVariant->item( variantnumber ) ); - if ( variantdata && ( variantdata->data.compare( *countryPart, Qt::CaseInsensitive ) == 0 ) ) - { - ui->listVariant->setCurrentItem( variantdata ); - cDebug() << Logger::SubEntry << "matched variant" << variantdata->data << ' ' - << variantdata->text(); - } - } - } - } + auto* model = config->keyboardVariants(); + ui->variantSelector->setModel( model ); + ui->variantSelector->setCurrentIndex( model->index( model->currentIndex() ) ); + cDebug() << "Variants now" << model->rowCount() << model->currentIndex(); } -} - -void -KeyboardPage::onActivate() -{ - /* Guessing a keyboard layout based on the locale means - * mapping between language identifiers in <lang>_<country> - * format to keyboard mappings, which are <country>_<layout> - * format; in addition, some countries have multiple languages, - * so fr_BE and nl_BE want different layouts (both Belgian) - * and sometimes the language-country name doesn't match the - * keyboard-country name at all (e.g. Ellas vs. Greek). - * - * This is a table of language-to-keyboard mappings. The - * language identifier is the key, while the value is - * a string that is used instead of the real language - * identifier in guessing -- so it should be something - * like <layout>_<country>. - */ - static constexpr char arabic[] = "ara"; - static const auto specialCaseMap = QMap< std::string, std::string >( { - /* Most Arab countries map to Arabic keyboard (Default) */ - { "ar_AE", arabic }, - { "ar_BH", arabic }, - { "ar_DZ", arabic }, - { "ar_EG", arabic }, - { "ar_IN", arabic }, - { "ar_IQ", arabic }, - { "ar_JO", arabic }, - { "ar_KW", arabic }, - { "ar_LB", arabic }, - { "ar_LY", arabic }, - /* Not Morocco: use layout ma */ - { "ar_OM", arabic }, - { "ar_QA", arabic }, - { "ar_SA", arabic }, - { "ar_SD", arabic }, - { "ar_SS", arabic }, - /* Not Syria: use layout sy */ - { "ar_TN", arabic }, - { "ar_YE", arabic }, - { "ca_ES", "cat_ES" }, /* Catalan */ - { "as_ES", "ast_ES" }, /* Asturian */ - { "en_CA", "us" }, /* Canadian English */ - { "el_CY", "gr" }, /* Greek in Cyprus */ - { "el_GR", "gr" }, /* Greek in Greeze */ - { "ig_NG", "igbo_NG" }, /* Igbo in Nigeria */ - { "ha_NG", "hausa_NG" } /* Hausa */ + connect( + ui->buttonRestore, &QPushButton::clicked, [config = config] { config->keyboardModels()->setCurrentIndex(); } ); + + connect( ui->physicalModelSelector, + QOverload< int >::of( &QComboBox::currentIndexChanged ), + config->keyboardModels(), + QOverload< int >::of( &XKBListModel::setCurrentIndex ) ); + connect( config->keyboardModels(), + &KeyboardModelsModel::currentIndexChanged, + ui->physicalModelSelector, + &QComboBox::setCurrentIndex ); + + connect( ui->layoutSelector->selectionModel(), + &QItemSelectionModel::currentChanged, + [this]( const QModelIndex& current ) { m_config->keyboardLayouts()->setCurrentIndex( current.row() ); } ); + connect( config->keyboardLayouts(), &KeyboardLayoutModel::currentIndexChanged, [this]( int index ) { + ui->layoutSelector->setCurrentIndex( m_config->keyboardLayouts()->index( index ) ); } ); - ui->listLayout->setFocus(); - - // Try to preselect a layout, depending on language and locale - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - QString lang = gs->value( "localeConf" ).toMap().value( "LANG" ).toString(); - - cDebug() << "Got locale language" << lang; - if ( !lang.isEmpty() ) - { - // Chop off .codeset and @modifier - int index = lang.indexOf( '.' ); - if ( index >= 0 ) - { - lang.truncate( index ); - } - index = lang.indexOf( '@' ); - if ( index >= 0 ) - { - lang.truncate( index ); - } - - lang.replace( '-', '_' ); // Normalize separators - } - if ( !lang.isEmpty() ) - { - std::string lang_s = lang.toStdString(); - if ( specialCaseMap.contains( lang_s ) ) - { - QString newLang = QString::fromStdString( specialCaseMap.value( lang_s ) ); - cDebug() << Logger::SubEntry << "special case language" << lang << "becomes" << newLang; - lang = newLang; - } - } - if ( !lang.isEmpty() ) - { - const auto langParts = lang.split( '_', SplitSkipEmptyParts ); - - // Note that this his string is not fit for display purposes! - // It doesn't come from QLocale::nativeCountryName. - QString country = QLocale::countryToString( QLocale( lang ).country() ); - cDebug() << Logger::SubEntry << "extracted country" << country << "::" << langParts; - - guessLayout( langParts ); - } -} - - -void -KeyboardPage::finalize() -{ - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - if ( !m_selectedLayout.isEmpty() ) - { - gs->insert( "keyboardLayout", m_selectedLayout ); - gs->insert( "keyboardVariant", m_selectedVariant ); //empty means default variant - } - - //FIXME: also store keyboard model for something? -} - - -void -KeyboardPage::updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant ) -{ - // Block signals - ui->listVariant->blockSignals( true ); - - QMap< QString, QString > variants - = currentItem.data( KeyboardLayoutModel::KeyboardVariantsRole ).value< QMap< QString, QString > >(); - QMapIterator< QString, QString > li( variants ); - LayoutItem* defaultItem = nullptr; - - ui->listVariant->clear(); - - while ( li.hasNext() ) - { - li.next(); - - LayoutItem* item = new LayoutItem(); - item->setText( li.key() ); - item->data = li.value(); - ui->listVariant->addItem( item ); - - // currentVariant defaults to QString(). It is only non-empty during the - // initial setup. - if ( li.value() == currentVariant ) - { - defaultItem = item; - } - } - - // Unblock signals - ui->listVariant->blockSignals( false ); - - // Set to default value - if ( defaultItem ) - { - ui->listVariant->setCurrentItem( defaultItem ); - } -} - - -void -KeyboardPage::onListLayoutCurrentItemChanged( const QModelIndex& current, const QModelIndex& previous ) -{ - Q_UNUSED( previous ) - if ( !current.isValid() ) - { - return; - } - - updateVariants( QPersistentModelIndex( current ) ); -} - -/* Returns stringlist with suitable setxkbmap command-line arguments - * to set the given @p layout and @p variant. - */ -static inline QStringList -xkbmap_args( const QString& layout, const QString& variant ) -{ - QStringList r { "-layout", layout }; - if ( !variant.isEmpty() ) - { - r << "-variant" << variant; - } - return r; + connect( ui->variantSelector->selectionModel(), + &QItemSelectionModel::currentChanged, + [this]( const QModelIndex& current ) { m_config->keyboardVariants()->setCurrentIndex( current.row() ); } ); + connect( config->keyboardVariants(), &KeyboardVariantsModel::currentIndexChanged, [this]( int index ) { + ui->variantSelector->setCurrentIndex( m_config->keyboardVariants()->index( index ) ); + } ); + CALAMARES_RETRANSLATE( ui->retranslateUi( this ); ) } -void -KeyboardPage::onListVariantCurrentItemChanged( QListWidgetItem* current, QListWidgetItem* previous ) +KeyboardPage::~KeyboardPage() { - Q_UNUSED( previous ) - - QPersistentModelIndex layoutIndex = ui->listLayout->currentIndex(); - LayoutItem* variantItem = dynamic_cast< LayoutItem* >( current ); - - if ( !layoutIndex.isValid() || !variantItem ) - { - return; - } - - QString layout = layoutIndex.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString(); - QString variant = variantItem->data; - - m_keyboardPreview->setLayout( layout ); - m_keyboardPreview->setVariant( variant ); - - //emit checkReady(); - - // Set Xorg keyboard layout - if ( m_setxkbmapTimer.isActive() ) - { - m_setxkbmapTimer.stop(); - m_setxkbmapTimer.disconnect( this ); - } - - connect( &m_setxkbmapTimer, &QTimer::timeout, this, [=] { - QProcess::execute( "setxkbmap", xkbmap_args( layout, variant ) ); - cDebug() << "xkbmap selection changed to: " << layout << '-' << variant; - m_setxkbmapTimer.disconnect( this ); - } ); - m_setxkbmapTimer.start( QApplication::keyboardInputInterval() ); - - m_selectedLayout = layout; - m_selectedVariant = variant; + delete ui; } diff --git a/src/modules/keyboard/KeyboardPage.h b/src/modules/keyboard/KeyboardPage.h index 4faeebd57be55636a6aeb951872541cd8fd33daf..98925fcad0c3d440b34042b303df179cd8362222 100644 --- a/src/modules/keyboard/KeyboardPage.h +++ b/src/modules/keyboard/KeyboardPage.h @@ -27,42 +27,20 @@ namespace Ui class Page_Keyboard; } +class Config; class KeyBoardPreview; class KeyboardPage : public QWidget { Q_OBJECT public: - explicit KeyboardPage( QWidget* parent = nullptr ); + explicit KeyboardPage( Config* config, QWidget* parent = nullptr ); ~KeyboardPage() override; - void init(); - - QString prettyStatus() const; - - Calamares::JobList - createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ); - - void onActivate(); - void finalize(); - -protected slots: - void onListLayoutCurrentItemChanged( const QModelIndex& current, const QModelIndex& previous ); - void onListVariantCurrentItemChanged( QListWidgetItem* current, QListWidgetItem* previous ); - private: - /// Guess a layout based on the split-apart locale - void guessLayout( const QStringList& langParts ); - void updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant = QString() ); - Ui::Page_Keyboard* ui; KeyBoardPreview* m_keyboardPreview; - int m_defaultIndex; - QMap< QString, QString > m_models; - - QString m_selectedLayout; - QString m_selectedVariant; - QTimer m_setxkbmapTimer; + Config* m_config; }; #endif // KEYBOARDPAGE_H diff --git a/src/modules/keyboard/KeyboardPage.ui b/src/modules/keyboard/KeyboardPage.ui index f7e430a044deefe97a59f8b7578619c28118e9ad..f7592fc6a83fb17d313a4e709981f9713d547b4a 100644 --- a/src/modules/keyboard/KeyboardPage.ui +++ b/src/modules/keyboard/KeyboardPage.ui @@ -76,7 +76,7 @@ SPDX-License-Identifier: GPL-3.0-or-later </widget> </item> <item> - <widget class="QComboBox" name="comboBoxModel"> + <widget class="QComboBox" name="physicalModelSelector"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -110,10 +110,10 @@ SPDX-License-Identifier: GPL-3.0-or-later <number>9</number> </property> <item> - <widget class="QListView" name="listLayout"/> + <widget class="QListView" name="layoutSelector"/> </item> <item> - <widget class="QListWidget" name="listVariant"/> + <widget class="QListView" name="variantSelector"/> </item> </layout> </item> @@ -139,9 +139,9 @@ SPDX-License-Identifier: GPL-3.0-or-later </layout> </widget> <tabstops> - <tabstop>comboBoxModel</tabstop> - <tabstop>listLayout</tabstop> - <tabstop>listVariant</tabstop> + <tabstop>physicalModelSelector</tabstop> + <tabstop>layoutSelector</tabstop> + <tabstop>variantSelector</tabstop> <tabstop>LE_TestKeyboard</tabstop> <tabstop>buttonRestore</tabstop> </tabstops> diff --git a/src/modules/keyboard/KeyboardViewStep.cpp b/src/modules/keyboard/KeyboardViewStep.cpp index 55402fd14c764047e7d3b7bfd839c500eb79b361..d1eb3eb68b4e0235ee4b801e937480c707db2882 100644 --- a/src/modules/keyboard/KeyboardViewStep.cpp +++ b/src/modules/keyboard/KeyboardViewStep.cpp @@ -9,24 +9,21 @@ #include "KeyboardViewStep.h" +#include "Config.h" #include "KeyboardPage.h" #include "GlobalStorage.h" #include "JobQueue.h" -#include "utils/Variant.h" - CALAMARES_PLUGIN_FACTORY_DEFINITION( KeyboardViewStepFactory, registerPlugin< KeyboardViewStep >(); ) KeyboardViewStep::KeyboardViewStep( QObject* parent ) : Calamares::ViewStep( parent ) - , m_widget( new KeyboardPage() ) - , m_nextEnabled( false ) - , m_writeEtcDefaultKeyboard( true ) + , m_config( new Config( this ) ) + , m_widget( new KeyboardPage( m_config ) ) { - m_widget->init(); - m_nextEnabled = true; - emit nextStatusChanged( m_nextEnabled ); + m_config->detectCurrentKeyboardLayout(); + emit nextStatusChanged( true ); } @@ -49,7 +46,7 @@ KeyboardViewStep::prettyName() const QString KeyboardViewStep::prettyStatus() const { - return m_prettyStatus; + return m_config->prettyStatus(); } @@ -63,7 +60,7 @@ KeyboardViewStep::widget() bool KeyboardViewStep::isNextEnabled() const { - return m_nextEnabled; + return true; } @@ -91,60 +88,26 @@ KeyboardViewStep::isAtEnd() const QList< Calamares::job_ptr > KeyboardViewStep::jobs() const { - return m_jobs; + return m_config->createJobs(); } void KeyboardViewStep::onActivate() { - m_widget->onActivate(); + m_config->onActivate(); } void KeyboardViewStep::onLeave() { - m_widget->finalize(); - m_jobs = m_widget->createJobs( m_xOrgConfFileName, m_convertedKeymapPath, m_writeEtcDefaultKeyboard ); - m_prettyStatus = m_widget->prettyStatus(); + m_config->finalize(); } void KeyboardViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - using namespace CalamaresUtils; - - if ( configurationMap.contains( "xOrgConfFileName" ) - && configurationMap.value( "xOrgConfFileName" ).type() == QVariant::String - && !getString( configurationMap, "xOrgConfFileName" ).isEmpty() ) - { - m_xOrgConfFileName = getString( configurationMap, "xOrgConfFileName" ); - } - else - { - m_xOrgConfFileName = "00-keyboard.conf"; - } - - if ( configurationMap.contains( "convertedKeymapPath" ) - && configurationMap.value( "convertedKeymapPath" ).type() == QVariant::String - && !getString( configurationMap, "convertedKeymapPath" ).isEmpty() ) - { - m_convertedKeymapPath = getString( configurationMap, "convertedKeymapPath" ); - } - else - { - m_convertedKeymapPath = QString(); - } - - if ( configurationMap.contains( "writeEtcDefaultKeyboard" ) - && configurationMap.value( "writeEtcDefaultKeyboard" ).type() == QVariant::Bool ) - { - m_writeEtcDefaultKeyboard = getBool( configurationMap, "writeEtcDefaultKeyboard", true ); - } - else - { - m_writeEtcDefaultKeyboard = true; - } + m_config->setConfigurationMap( configurationMap ); } diff --git a/src/modules/keyboard/KeyboardViewStep.h b/src/modules/keyboard/KeyboardViewStep.h index aa9a1d3350d39f98a13bed06ec240ae52085b003..902b888fd3785e12ea9cc35046c4b4b9cb24b2c5 100644 --- a/src/modules/keyboard/KeyboardViewStep.h +++ b/src/modules/keyboard/KeyboardViewStep.h @@ -17,6 +17,7 @@ #include <QObject> +class Config; class KeyboardPage; class PLUGINDLLEXPORT KeyboardViewStep : public Calamares::ViewStep @@ -46,15 +47,8 @@ public: void setConfigurationMap( const QVariantMap& configurationMap ) override; private: + Config* m_config; KeyboardPage* m_widget; - bool m_nextEnabled; - QString m_prettyStatus; - - QString m_xOrgConfFileName; - QString m_convertedKeymapPath; - bool m_writeEtcDefaultKeyboard; - - Calamares::JobList m_jobs; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( KeyboardViewStepFactory ) diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.cpp b/src/modules/keyboard/SetKeyboardLayoutJob.cpp index cabe0b5c0aa0b8a99e4077b10b13f544ab8c40b2..419d6f3fcd3d7aea8f697d779b80047d9f8810a3 100644 --- a/src/modules/keyboard/SetKeyboardLayoutJob.cpp +++ b/src/modules/keyboard/SetKeyboardLayoutJob.cpp @@ -33,6 +33,7 @@ SetKeyboardLayoutJob::SetKeyboardLayoutJob( const QString& model, const QString& layout, const QString& variant, + const AdditionalLayoutInfo& additionalLayoutInfo, const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ) @@ -40,6 +41,7 @@ SetKeyboardLayoutJob::SetKeyboardLayoutJob( const QString& model, , m_model( model ) , m_layout( layout ) , m_variant( variant ) + , m_additionalLayoutInfo( additionalLayoutInfo ) , m_xOrgConfFileName( xOrgConfFileName ) , m_convertedKeymapPath( convertedKeymapPath ) , m_writeEtcDefaultKeyboard( writeEtcDefaultKeyboard ) @@ -250,19 +252,34 @@ SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const " Identifier \"system-keyboard\"\n" " MatchIsKeyboard \"on\"\n"; - if ( !m_layout.isEmpty() ) - { - stream << " Option \"XkbLayout\" \"" << m_layout << "\"\n"; - } - if ( !m_model.isEmpty() ) + if ( m_additionalLayoutInfo.additionalLayout.isEmpty() ) { - stream << " Option \"XkbModel\" \"" << m_model << "\"\n"; - } + if ( !m_layout.isEmpty() ) + { + stream << " Option \"XkbLayout\" \"" << m_layout << "\"\n"; + } - if ( !m_variant.isEmpty() ) + if ( !m_variant.isEmpty() ) + { + stream << " Option \"XkbVariant\" \"" << m_variant << "\"\n"; + } + } + else { - stream << " Option \"XkbVariant\" \"" << m_variant << "\"\n"; + if ( !m_layout.isEmpty() ) + { + stream << " Option \"XkbLayout\" \"" << m_additionalLayoutInfo.additionalLayout << "," << m_layout + << "\"\n"; + } + + if ( !m_variant.isEmpty() ) + { + stream << " Option \"XkbVariant\" \"" << m_additionalLayoutInfo.additionalVariant << "," << m_variant + << "\"\n"; + } + + stream << " Option \"XkbOptions\" \"" << m_additionalLayoutInfo.groupSwitcher << "\"\n"; } stream << "EndSection\n"; diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.h b/src/modules/keyboard/SetKeyboardLayoutJob.h index f1eabe1952153a76c1b67949f36720cdf8680430..15fadfb525caae3b1fdf9721718881a8d4fa6d22 100644 --- a/src/modules/keyboard/SetKeyboardLayoutJob.h +++ b/src/modules/keyboard/SetKeyboardLayoutJob.h @@ -11,6 +11,7 @@ #ifndef SETKEYBOARDLAYOUTJOB_H #define SETKEYBOARDLAYOUTJOB_H +#include "AdditionalLayoutInfo.h" #include "Job.h" @@ -21,6 +22,7 @@ public: SetKeyboardLayoutJob( const QString& model, const QString& layout, const QString& variant, + const AdditionalLayoutInfo& additionaLayoutInfo, const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ); @@ -38,6 +40,7 @@ private: QString m_model; QString m_layout; QString m_variant; + AdditionalLayoutInfo m_additionalLayoutInfo; QString m_xOrgConfFileName; QString m_convertedKeymapPath; const bool m_writeEtcDefaultKeyboard; diff --git a/src/modules/keyboard/keyboard.qrc b/src/modules/keyboard/keyboard.qrc index dd211e63016f912fab182b94cf5b3b974d82db26..4283d81907788485a11dd7a57391b44e7032c1e1 100644 --- a/src/modules/keyboard/keyboard.qrc +++ b/src/modules/keyboard/keyboard.qrc @@ -2,5 +2,6 @@ <qresource prefix="/"> <file>kbd-model-map</file> <file>images/restore.png</file> + <file>non-ascii-layouts</file> </qresource> </RCC> diff --git a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp index 329913d79832bbeec30df4ad6f9eff84b0ee9c1d..8099cb231d12e29820772e6da2e202abe149983f 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp +++ b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp @@ -75,7 +75,7 @@ parseKeyboardModels( const char* filepath ) break; } - // here we are in the model section, otherwhise we would continue or break + // here we are in the model section, otherwise we would continue or break QRegExp rx; rx.setPattern( "^\\s+(\\S+)\\s+(\\w.*)\n$" ); diff --git a/src/modules/keyboard/non-ascii-layouts b/src/modules/keyboard/non-ascii-layouts new file mode 100644 index 0000000000000000000000000000000000000000..83935c190bb64630604ea98a67fd468c4d57c379 --- /dev/null +++ b/src/modules/keyboard/non-ascii-layouts @@ -0,0 +1,4 @@ +# Layouts stored here need additional layout (usually us) to provide ASCII support for user + +#layout additional-layout additional-variant vconsole-keymap +ru us - ruwin_alt_sh-UTF-8 diff --git a/src/modules/keyboardq/KeyboardQmlViewStep.cpp b/src/modules/keyboardq/KeyboardQmlViewStep.cpp index d42ab52690bcf7523d52c15e2ac0881bf79d0bcf..e8ae630e7c5f92e5e07532f54b3816383616cee5 100644 --- a/src/modules/keyboardq/KeyboardQmlViewStep.cpp +++ b/src/modules/keyboardq/KeyboardQmlViewStep.cpp @@ -2,6 +2,7 @@ * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac <teo@kde.org> * SPDX-FileCopyrightText: 2020 Camilo Higuita <milo.h@aol.com> + * SPDX-FileCopyrightText: 2020 Anke Boersma <demm@kaosx.us> * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. @@ -10,21 +11,19 @@ #include "KeyboardQmlViewStep.h" +#include "Config.h" + #include "GlobalStorage.h" #include "JobQueue.h" -#include "utils/Variant.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( KeyboardQmlViewStepFactory, registerPlugin< KeyboardQmlViewStep >(); ) KeyboardQmlViewStep::KeyboardQmlViewStep( QObject* parent ) : Calamares::QmlViewStep( parent ) , m_config( new Config( this ) ) - , m_nextEnabled( false ) - , m_writeEtcDefaultKeyboard( true ) { - m_config->init(); - m_nextEnabled = true; - emit nextStatusChanged( m_nextEnabled ); + m_config->detectCurrentKeyboardLayout(); + emit nextStatusChanged( true ); } QString @@ -36,13 +35,13 @@ KeyboardQmlViewStep::prettyName() const QString KeyboardQmlViewStep::prettyStatus() const { - return m_prettyStatus; + return m_config->prettyStatus(); } bool KeyboardQmlViewStep::isNextEnabled() const { - return m_nextEnabled; + return true; } bool @@ -66,7 +65,7 @@ KeyboardQmlViewStep::isAtEnd() const Calamares::JobList KeyboardQmlViewStep::jobs() const { - return m_jobs; + return m_config->createJobs(); } void @@ -79,8 +78,6 @@ void KeyboardQmlViewStep::onLeave() { m_config->finalize(); - m_jobs = m_config->createJobs( m_xOrgConfFileName, m_convertedKeymapPath, m_writeEtcDefaultKeyboard ); - m_prettyStatus = m_config->prettyStatus(); } QObject* @@ -92,39 +89,6 @@ KeyboardQmlViewStep::getConfig() void KeyboardQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - using namespace CalamaresUtils; - - if ( configurationMap.contains( "xOrgConfFileName" ) - && configurationMap.value( "xOrgConfFileName" ).type() == QVariant::String - && !getString( configurationMap, "xOrgConfFileName" ).isEmpty() ) - { - m_xOrgConfFileName = getString( configurationMap, "xOrgConfFileName" ); - } - else - { - m_xOrgConfFileName = "00-keyboard.conf"; - } - - if ( configurationMap.contains( "convertedKeymapPath" ) - && configurationMap.value( "convertedKeymapPath" ).type() == QVariant::String - && !getString( configurationMap, "convertedKeymapPath" ).isEmpty() ) - { - m_convertedKeymapPath = getString( configurationMap, "convertedKeymapPath" ); - } - else - { - m_convertedKeymapPath = QString(); - } - - if ( configurationMap.contains( "writeEtcDefaultKeyboard" ) - && configurationMap.value( "writeEtcDefaultKeyboard" ).type() == QVariant::Bool ) - { - m_writeEtcDefaultKeyboard = getBool( configurationMap, "writeEtcDefaultKeyboard", true ); - } - else - { - m_writeEtcDefaultKeyboard = true; - } - + m_config->setConfigurationMap( configurationMap ); Calamares::QmlViewStep::setConfigurationMap( configurationMap ); } diff --git a/src/modules/keyboardq/KeyboardQmlViewStep.h b/src/modules/keyboardq/KeyboardQmlViewStep.h index 4571a9a60bcd0bff12ad090512ec51a2ab2e0c24..eb31c3d595c09204304f7d6da872a488ce33838c 100644 --- a/src/modules/keyboardq/KeyboardQmlViewStep.h +++ b/src/modules/keyboardq/KeyboardQmlViewStep.h @@ -13,14 +13,12 @@ #include "Config.h" -#include <DllMacro.h> -#include <utils/PluginFactory.h> -#include <viewpages/QmlViewStep.h> +#include "DllMacro.h" +#include "utils/PluginFactory.h" +#include "viewpages/QmlViewStep.h" #include <QObject> -class KeyboardPage; - class PLUGINDLLEXPORT KeyboardQmlViewStep : public Calamares::QmlViewStep { Q_OBJECT @@ -47,14 +45,6 @@ public: private: Config* m_config; - bool m_nextEnabled; - QString m_prettyStatus; - - QString m_xOrgConfFileName; - QString m_convertedKeymapPath; - bool m_writeEtcDefaultKeyboard; - - Calamares::JobList m_jobs; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( KeyboardQmlViewStepFactory ) diff --git a/src/modules/keyboardq/keyboardq.qrc b/src/modules/keyboardq/keyboardq.qrc index 492f6e213004cdb9c27dd329db1a9849cb38aec1..d2473a8eccdbea251e46c8bac745289cca8a766a 100644 --- a/src/modules/keyboardq/keyboardq.qrc +++ b/src/modules/keyboardq/keyboardq.qrc @@ -3,5 +3,6 @@ <file alias="kbd-model-map">../keyboard/kbd-model-map</file> <file alias="images/restore.png">../keyboard/images/restore.png</file> <file>keyboardq.qml</file> + <file alias="non-ascii-layouts">../keyboard/non-ascii-layouts</file> </qresource> </RCC> diff --git a/src/modules/license/LicenseWidget.cpp b/src/modules/license/LicenseWidget.cpp index b2e66515dfd84b983344950ce39c13dccb574f51..a8d581ab5e58d84626b84467a3d1d24f32b71263 100644 --- a/src/modules/license/LicenseWidget.cpp +++ b/src/modules/license/LicenseWidget.cpp @@ -13,6 +13,7 @@ #include "LicenseWidget.h" #include "utils/Logger.h" +#include "utils/QtCompat.h" #include <QDesktopServices> #include <QFile> @@ -48,7 +49,7 @@ LicenseWidget::LicenseWidget( LicenseEntry entry, QWidget* parent ) , m_isExpanded( m_entry.expandByDefault() ) { QPalette pal( palette() ); - pal.setColor( QPalette::Background, palette().window().color().lighter( 108 ) ); + pal.setColor( WindowBackground, palette().window().color().lighter( 108 ) ); setObjectName( "licenseItem" ); diff --git a/src/modules/machineid/MachineIdJob.cpp b/src/modules/machineid/MachineIdJob.cpp index 8a33288b94782b8c41047c05e8af7d3e22343eff..fef63828aa53c2a2dace0d3bd95f7c9fe85f4834 100644 --- a/src/modules/machineid/MachineIdJob.cpp +++ b/src/modules/machineid/MachineIdJob.cpp @@ -153,18 +153,13 @@ MachineIdJob::setConfigurationMap( const QVariantMap& map ) m_dbus_symlink = m_dbus && m_dbus_symlink; m_entropy_copy = CalamaresUtils::getBool( map, "entropy-copy", false ); - m_entropy_files = CalamaresUtils::getStringList( map, "entropy-files" ); if ( CalamaresUtils::getBool( map, "entropy", false ) ) { - cWarning() << "MachineId:: configuration setting *entropy* is deprecated, use *entropy-files*."; - - QString target_entropy_file = QStringLiteral( "/var/lib/urandom/random-seed" ); - if ( !m_entropy_files.contains( target_entropy_file ) ) - { - m_entropy_files.append( target_entropy_file ); - } + cWarning() << "MachineId:: configuration setting *entropy* is deprecated, use *entropy-files* instead."; + m_entropy_files.append( QStringLiteral( "/var/lib/urandom/random-seed" ) ); } + m_entropy_files.removeDuplicates(); } CALAMARES_PLUGIN_FACTORY_DEFINITION( MachineIdJobFactory, registerPlugin< MachineIdJob >(); ) diff --git a/src/modules/machineid/machineid.conf b/src/modules/machineid/machineid.conf index c6189e59803e7b1be61403ecdf4a0b2e6c742403..15e190299c5c595ec1cafc10a21d54d309a6a91a 100644 --- a/src/modules/machineid/machineid.conf +++ b/src/modules/machineid/machineid.conf @@ -11,21 +11,39 @@ # --- # Whether to create /etc/machine-id for systemd. +# The default is *false*. systemd: true # Whether to create /var/lib/dbus/machine-id for D-Bus. +# The default is *false*. dbus: true # Whether /var/lib/dbus/machine-id should be a symlink to /etc/machine-id # (ignored if dbus is false, or if there is no /etc/machine-id to point to). +# The default is *false*. dbus-symlink: true -# Whether to create an entropy file /var/lib/urandom/random-seed -# -# DEPRECATED: list the file in entropy-files instead -entropy: false -# Whether to copy entropy from the host +# Copy entropy from the host? If this is set to *true*, then +# any entropy file listed below will be copied from the host +# if it exists. Non-existent files will be generated from +# /dev/urandom . The default is *false*. entropy-copy: false -# Which files to write (paths in the target) +# Which files to write (paths in the target). Each of these files is +# either generated from /dev/urandom or copied from the host, depending +# on the setting for *entropy-copy*, above. entropy-files: - /var/lib/urandom/random-seed - /var/lib/systemd/random-seed + +# Whether to create an entropy file /var/lib/urandom/random-seed +# +# DEPRECATED: list the file in entropy-files instead. If this key +# exists and is set to *true*, a warning is printed and Calamares +# behaves as if `/var/lib/urandom/random-seed` is listed in *entropy-files*. +# +# entropy: false + +# Whether to create a symlink for D-Bus +# +# DEPRECATED: set *dbus-symlink* with the same meaning instead. +# +# symlink: false diff --git a/src/modules/machineid/machineid.schema.yaml b/src/modules/machineid/machineid.schema.yaml index 1ae67e132f4300fa79361f7b0f4257d5345f7d40..59bb5f81b7e65094a68c85f8f9e30ac5e6daaafc 100644 --- a/src/modules/machineid/machineid.schema.yaml +++ b/src/modules/machineid/machineid.schema.yaml @@ -6,11 +6,11 @@ $id: https://calamares.io/schemas/machineid additionalProperties: false type: object properties: - systemd: { type: boolean, default: true } - dbus: { type: boolean, default: true } - "dbus-symlink": { type: boolean, default: true } + systemd: { type: boolean, default: false } + dbus: { type: boolean, default: false } + "dbus-symlink": { type: boolean, default: false } "entropy-copy": { type: boolean, default: false } "entropy-files": { type: array, items: { type: string } } # Deprecated properties - symlink: { type: boolean, default: true } + symlink: { type: boolean, default: false } entropy: { type: boolean, default: false } diff --git a/src/modules/netinstall/Config.cpp b/src/modules/netinstall/Config.cpp index ddbb36fcc63b4b7c432e13c48a85b892866dfbac..e69b3c2a4a3985fdbb456f102fb394a02f0875d3 100644 --- a/src/modules/netinstall/Config.cpp +++ b/src/modules/netinstall/Config.cpp @@ -43,7 +43,7 @@ Config::status() const case Status::FailedNetworkError: return tr( "Network Installation. (Disabled: Unable to fetch package lists, check your network connection)" ); } - NOTREACHED return QString(); + __builtin_unreachable(); } diff --git a/src/modules/netinstall/NetInstallViewStep.cpp b/src/modules/netinstall/NetInstallViewStep.cpp index beb295c32a31562950a8a916912c05d57e65b51f..e96d1724fc73b662cfade2623cbb743bb7e1bab8 100644 --- a/src/modules/netinstall/NetInstallViewStep.cpp +++ b/src/modules/netinstall/NetInstallViewStep.cpp @@ -47,7 +47,7 @@ NetInstallViewStep::prettyName() const return m_sidebarLabel ? m_sidebarLabel->get() : tr( "Package selection" ); #if defined( TABLE_OF_TRANSLATIONS ) - NOTREACHED + __builtin_unreachable(); // This is a table of "standard" labels for this module. If you use them // in the label: sidebar: section of the config file, the existing // translations can be used. diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp index 0d5df81777d0db3e2f31174cb71462f780d3bbe7..e46809fdda475f11bfdec7222a5751c3283455b4 100644 --- a/src/modules/packagechooser/PackageChooserPage.cpp +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -33,12 +33,12 @@ PackageChooserPage::PackageChooserPage( PackageChooserMode mode, QWidget* parent switch ( mode ) { case PackageChooserMode::Optional: - FALLTHRU; + [[fallthrough]]; case PackageChooserMode::Required: ui->products->setSelectionMode( QAbstractItemView::SingleSelection ); break; case PackageChooserMode::OptionalMultiple: - FALLTHRU; + [[fallthrough]]; case PackageChooserMode::RequiredMultiple: ui->products->setSelectionMode( QAbstractItemView::ExtendedSelection ); } diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp index f162c074b7114794c1f1b3421f420af7fbc32b7c..d576f275379063250cc223fa255bf483f39196d8 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.cpp +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -110,8 +110,7 @@ PackageChooserViewStep::isNextEnabled() const // exactly one OR one or more return m_widget->hasSelection(); } - - NOTREACHED return true; + __builtin_unreachable(); } diff --git a/src/modules/partition/core/Config.h b/src/modules/partition/core/Config.h index 1629ccc2208caf40b4d3c8b319baea4175ff021a..57230b6e851f32d4713e9f3f6f9b55407ad515e6 100644 --- a/src/modules/partition/core/Config.h +++ b/src/modules/partition/core/Config.h @@ -28,7 +28,7 @@ class Config : public QObject public: Config( QObject* parent ); - virtual ~Config() = default; + ~Config() override = default; enum InstallChoice { diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index e6c1a520ddb28fe0b65722485c3c8868749af18d..a514b9c341ccad7cf0ffcab83a5c07d2d02e36bc 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -59,7 +59,7 @@ convenienceName( const Partition* const candidate ) QString p; QTextStream s( &p ); - s << (void*)candidate; + s << static_cast<const void*>(candidate); // No good name available, use pointer address return p; } diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index 3d726aef1f57fabc4e03020940a1889187c56a79..3327eb50b82e23df2b93f0ce0d107852d25f3053 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -110,7 +110,7 @@ updatePreview( Job* job, const std::true_type& ) template < typename Job > void -updatePreview( Job* job, const std::false_type& ) +updatePreview( Job*, const std::false_type& ) { } @@ -483,7 +483,6 @@ PartitionCoreModule::deletePartition( Device* device, Partition* partition ) } } - const Calamares::JobList& jobs = deviceInfo->jobs(); if ( partition->state() == KPM_PARTITION_STATE( New ) ) { // Take all the SetPartFlagsJob from the list and delete them diff --git a/src/modules/partition/core/PartitionCoreModule.h b/src/modules/partition/core/PartitionCoreModule.h index 1dc61db6feed556fe1afbdc680d3180f86ac205a..1e4179b979df4bcc9f536c148d37f43b3a7a791d 100644 --- a/src/modules/partition/core/PartitionCoreModule.h +++ b/src/modules/partition/core/PartitionCoreModule.h @@ -85,7 +85,7 @@ public: }; PartitionCoreModule( QObject* parent = nullptr ); - ~PartitionCoreModule(); + ~PartitionCoreModule() override; /** * @brief init performs a devices scan and initializes all KPMcore data diff --git a/src/modules/partition/core/PartitionLayout.cpp b/src/modules/partition/core/PartitionLayout.cpp index 182e7606bb452085ccaa850747740ededc8f821c..d42e7b568ba0fd4967a85574055ac40a9c21dab0 100644 --- a/src/modules/partition/core/PartitionLayout.cpp +++ b/src/modules/partition/core/PartitionLayout.cpp @@ -44,13 +44,13 @@ getDefaultFileSystemType() } PartitionLayout::PartitionLayout() + : m_defaultFsType( getDefaultFileSystemType() ) { - m_defaultFsType = getDefaultFileSystemType(); } PartitionLayout::PartitionLayout( PartitionLayout::PartitionEntry entry ) + : PartitionLayout() { - m_defaultFsType = getDefaultFileSystemType(); m_partLayout.append( entry ); } @@ -82,10 +82,10 @@ PartitionLayout::PartitionEntry::PartitionEntry() } PartitionLayout::PartitionEntry::PartitionEntry( const QString& size, const QString& min, const QString& max ) - : partSize( size ) + : partAttributes( 0 ) + , partSize( size ) , partMinSize( min ) , partMaxSize( max ) - , partAttributes( 0 ) { } @@ -172,33 +172,31 @@ PartitionLayout::execute( Device* dev, // Let's check if we have enough space for each partSize for ( const auto& part : qAsConst( m_partLayout ) ) { - qint64 size; - // Calculate partition size + if ( !part.partSize.isValid() ) + { + cWarning() << "Partition" << part.partMountPoint << "size is invalid, skipping..."; + continue; + } - if ( part.partSize.isValid() ) + // Calculate partition size: Rely on "possibly uninitialized use" + // warnings to ensure that all the cases are covered below. + qint64 size; + // We need to ignore the percent-defined until later + if ( part.partSize.unit() != CalamaresUtils::Partition::SizeUnit::Percent ) { - // We need to ignore the percent-defined - if ( part.partSize.unit() != CalamaresUtils::Partition::SizeUnit::Percent ) + size = part.partSize.toSectors( totalSize, dev->logicalSize() ); + } + else + { + if ( part.partMinSize.isValid() ) { - size = part.partSize.toSectors( totalSize, dev->logicalSize() ); + size = part.partMinSize.toSectors( totalSize, dev->logicalSize() ); } else { - if ( part.partMinSize.isValid() ) - { - size = part.partMinSize.toSectors( totalSize, dev->logicalSize() ); - } - else - { - size = 0; - } + size = 0; } } - else - { - cWarning() << "Partition" << part.partMountPoint << "size (" << size << "sectors) is invalid, skipping..."; - continue; - } partSizeMap.insert( &part, size ); availableSize -= size; diff --git a/src/modules/partition/gui/BootInfoWidget.cpp b/src/modules/partition/gui/BootInfoWidget.cpp index 5d9dcf8b58a3bcf1e0ee488da7113396a7618aa4..0b9d08c4708dc14c4aafbfaf2b9b99d4dfebe1ca 100644 --- a/src/modules/partition/gui/BootInfoWidget.cpp +++ b/src/modules/partition/gui/BootInfoWidget.cpp @@ -12,6 +12,7 @@ #include "core/PartUtils.h" #include "utils/CalamaresUtilsGui.h" +#include "utils/QtCompat.h" #include "utils/Retranslator.h" #include <QDir> @@ -45,7 +46,7 @@ BootInfoWidget::BootInfoWidget( QWidget* parent ) m_bootLabel->setAlignment( Qt::AlignCenter ); QPalette palette; - palette.setBrush( QPalette::Foreground, QColor( "#4D4D4D" ) ); //dark grey + palette.setBrush( WindowText, QColor( "#4D4D4D" ) ); //dark grey m_bootIcon->setAutoFillBackground( true ); m_bootLabel->setAutoFillBackground( true ); diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index ac8d6fd92c22516acc3599a1f6d1b45c3bc456da..a91c9a8e1b117f6be3bff47fa46414f456b734e1 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -845,10 +845,11 @@ ChoicePage::doReplaceSelectedPartition( const QModelIndex& current ) /** - * @brief ChoicePage::updateDeviceStatePreview clears and rebuilds the contents of the - * preview widget for the current on-disk state. This also triggers a rescan in the - * PCM to get a Device* copy that's unaffected by subsequent PCM changes. - * @param currentDevice a pointer to the selected Device. + * @brief clear and then rebuild the contents of the preview widget + * + * The preview widget for the current disk is completely re-constructed + * based on the on-disk state. This also triggers a rescan in the + * PCM to get a Device* copy that's unaffected by subsequent PCM changes. */ void ChoicePage::updateDeviceStatePreview() @@ -916,10 +917,10 @@ ChoicePage::updateDeviceStatePreview() /** - * @brief ChoicePage::updateActionChoicePreview clears and rebuilds the contents of the - * preview widget for the current PCM-proposed state. No rescans here, this should - * be immediate. - * @param currentDevice a pointer to the selected Device. + * @brief rebuild the contents of the preview for the PCM-proposed state. + * + * No rescans here, this should be immediate. + * * @param choice the chosen partitioning action. */ void @@ -1464,7 +1465,7 @@ ChoicePage::setupActions() } if ( m_somethingElseButton->isHidden() && m_alongsideButton->isHidden() && m_replaceButton->isHidden() - && m_somethingElseButton->isHidden() ) + && m_eraseButton->isHidden() ) { if ( atLeastOneIsMounted ) { diff --git a/src/modules/partition/gui/ChoicePage.h b/src/modules/partition/gui/ChoicePage.h index 118f23a465876ea7f36b4fb34be91088b4b9a4d7..1bdee10eac080657d2464765e201c9e0437eb886 100644 --- a/src/modules/partition/gui/ChoicePage.h +++ b/src/modules/partition/gui/ChoicePage.h @@ -54,7 +54,7 @@ class ChoicePage : public QWidget, private Ui::ChoicePage Q_OBJECT public: explicit ChoicePage( Config* config, QWidget* parent = nullptr ); - virtual ~ChoicePage(); + ~ChoicePage() override; /** * @brief init runs when the PartitionViewStep and the PartitionCoreModule are diff --git a/src/modules/partition/gui/CreatePartitionDialog.h b/src/modules/partition/gui/CreatePartitionDialog.h index dc756d352d310fb2f8308072f0d470f05fc1a09f..bee70f61b52f61d0341c8799298366fa463746b6 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.h +++ b/src/modules/partition/gui/CreatePartitionDialog.h @@ -45,7 +45,7 @@ public: Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); - ~CreatePartitionDialog(); + ~CreatePartitionDialog() override; /** * Must be called when user wants to create a partition in diff --git a/src/modules/partition/gui/DeviceInfoWidget.cpp b/src/modules/partition/gui/DeviceInfoWidget.cpp index 80eacd05bf0a255cba10513dc50e9798477a629e..708982101f5bfbe4a77accd32313b2e23aa12769 100644 --- a/src/modules/partition/gui/DeviceInfoWidget.cpp +++ b/src/modules/partition/gui/DeviceInfoWidget.cpp @@ -7,13 +7,13 @@ * */ - #include "DeviceInfoWidget.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" +#include "utils/QtCompat.h" #include "utils/Retranslator.h" #include <QDir> @@ -47,7 +47,7 @@ DeviceInfoWidget::DeviceInfoWidget( QWidget* parent ) m_ptLabel->setAlignment( Qt::AlignCenter ); QPalette palette; - palette.setBrush( QPalette::Foreground, QColor( "#4D4D4D" ) ); //dark grey + palette.setBrush( WindowText, QColor( "#4D4D4D" ) ); //dark grey m_ptIcon->setAutoFillBackground( true ); m_ptLabel->setAutoFillBackground( true ); diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.h b/src/modules/partition/gui/EditExistingPartitionDialog.h index 96cc2c4c4aaa63c1a87040ddce4c14555223af9a..89b5b55e4bccdc50bb4d6acf052ad8902a913214 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.h +++ b/src/modules/partition/gui/EditExistingPartitionDialog.h @@ -36,7 +36,7 @@ public: Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); - ~EditExistingPartitionDialog(); + ~EditExistingPartitionDialog() override; void applyChanges( PartitionCoreModule* module ); diff --git a/src/modules/partition/gui/PartitionPage.h b/src/modules/partition/gui/PartitionPage.h index 26c7dbccf4b2d84ee0058c4694cd17e6873c4457..81c2cd983505955ef4a01ce97c35e9f617368e58 100644 --- a/src/modules/partition/gui/PartitionPage.h +++ b/src/modules/partition/gui/PartitionPage.h @@ -34,7 +34,7 @@ class PartitionPage : public QWidget Q_OBJECT public: explicit PartitionPage( PartitionCoreModule* core, QWidget* parent = nullptr ); - ~PartitionPage(); + ~PartitionPage() override; void onRevertClicked(); diff --git a/src/modules/partition/gui/PartitionViewStep.cpp b/src/modules/partition/gui/PartitionViewStep.cpp index 20c7d0f082c0813b8f35e98c7fff1b147c8a2fe4..63227e3b7f0935d22b4c34a620bffb5e06fea6b3 100644 --- a/src/modules/partition/gui/PartitionViewStep.cpp +++ b/src/modules/partition/gui/PartitionViewStep.cpp @@ -34,6 +34,7 @@ #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" +#include "utils/QtCompat.h" #include "utils/Retranslator.h" #include "utils/Variant.h" #include "widgets/WaitingWidget.h" @@ -273,7 +274,7 @@ PartitionViewStep::createSummaryWidget() const jobsLabel->setText( jobsLines.join( "<br/>" ) ); jobsLabel->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); QPalette pal; - pal.setColor( QPalette::Background, pal.window().color().lighter( 108 ) ); + pal.setColor( WindowBackground, pal.window().color().lighter( 108 ) ); jobsLabel->setAutoFillBackground( true ); jobsLabel->setPalette( pal ); } diff --git a/src/modules/partition/gui/ReplaceWidget.h b/src/modules/partition/gui/ReplaceWidget.h index 5277e56266f9f6b1fcfbba07ccf76db21ab30bd8..fbd19b429094b782eeb9774cada94770a5983b7f 100644 --- a/src/modules/partition/gui/ReplaceWidget.h +++ b/src/modules/partition/gui/ReplaceWidget.h @@ -27,7 +27,7 @@ class ReplaceWidget : public QWidget Q_OBJECT public: explicit ReplaceWidget( PartitionCoreModule* core, QComboBox* devicesComboBox, QWidget* parent = nullptr ); - virtual ~ReplaceWidget(); + virtual ~ReplaceWidget() override; bool isNextEnabled() const; diff --git a/src/modules/partition/gui/VolumeGroupBaseDialog.h b/src/modules/partition/gui/VolumeGroupBaseDialog.h index 253160d97b370d99c67ff0868e3637ef77650fba..94ed0b98bc65419f760b51def2c01264fc98f1cb 100644 --- a/src/modules/partition/gui/VolumeGroupBaseDialog.h +++ b/src/modules/partition/gui/VolumeGroupBaseDialog.h @@ -30,7 +30,7 @@ class VolumeGroupBaseDialog : public QDialog public: explicit VolumeGroupBaseDialog( QString& vgName, QVector< const Partition* > pvList, QWidget* parent = nullptr ); - ~VolumeGroupBaseDialog(); + ~VolumeGroupBaseDialog() override; protected: virtual void updateOkButton(); diff --git a/src/modules/partition/tests/CreateLayoutsTests.cpp b/src/modules/partition/tests/CreateLayoutsTests.cpp index 7589b5b65860d98174204e886f2a320416a12f56..12c19db5fe3bc1d0a65952b81e4f5a8c53ca5c2e 100644 --- a/src/modules/partition/tests/CreateLayoutsTests.cpp +++ b/src/modules/partition/tests/CreateLayoutsTests.cpp @@ -28,7 +28,7 @@ class SmartStatus; QTEST_GUILESS_MAIN( CreateLayoutsTests ) -CalamaresUtils::Partition::KPMManager* kpmcore = nullptr; +static CalamaresUtils::Partition::KPMManager* kpmcore = nullptr; using CalamaresUtils::operator""_MiB; using CalamaresUtils::operator""_GiB; @@ -156,3 +156,7 @@ TestDevice::TestDevice( const QString& name, const qint64 logicalSectorSize, con { } #endif + +TestDevice::~TestDevice() +{ +} diff --git a/src/modules/partition/tests/CreateLayoutsTests.h b/src/modules/partition/tests/CreateLayoutsTests.h index 98d2d8cb9a4314c3938e381e9957211125699aa8..2ecc7b634fe6f6e6abb826b543b5e90879cfc4d1 100644 --- a/src/modules/partition/tests/CreateLayoutsTests.h +++ b/src/modules/partition/tests/CreateLayoutsTests.h @@ -18,6 +18,7 @@ class CreateLayoutsTests : public QObject Q_OBJECT public: CreateLayoutsTests(); + ~CreateLayoutsTests() override = default; private Q_SLOTS: void testFixedSizePartition(); @@ -31,6 +32,7 @@ class TestDevice : public Device { public: TestDevice( const QString& name, const qint64 logicalSectorSize, const qint64 totalLogicalSectors ); + ~TestDevice() override; }; #endif diff --git a/src/modules/partition/tests/PartitionJobTests.cpp b/src/modules/partition/tests/PartitionJobTests.cpp index 94eec8496e2bebf7b857893d84cc803e0973c341..326fd53bb96e422eaa24c631441c637fdab91433 100644 --- a/src/modules/partition/tests/PartitionJobTests.cpp +++ b/src/modules/partition/tests/PartitionJobTests.cpp @@ -157,7 +157,7 @@ QueueRunner::onFailed( const QString& message, const QString& details ) QFAIL( qPrintable( msg ) ); } -CalamaresUtils::Partition::KPMManager* kpmcore = nullptr; +static CalamaresUtils::Partition::KPMManager* kpmcore = nullptr; //- PartitionJobTests ------------------------------------------------------------------ PartitionJobTests::PartitionJobTests() diff --git a/src/modules/summary/SummaryPage.cpp b/src/modules/summary/SummaryPage.cpp index d6917d962edf4e610cd77b9d66c9b1df356bf7eb..96781c25ef52668cf3cfab9f2dc28f72ab3b44ae 100644 --- a/src/modules/summary/SummaryPage.cpp +++ b/src/modules/summary/SummaryPage.cpp @@ -19,6 +19,7 @@ #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" +#include "utils/QtCompat.h" #include "utils/Retranslator.h" #include "viewpages/ExecutionViewStep.h" @@ -183,7 +184,7 @@ SummaryPage::createBodyLabel( const QString& text ) const QLabel* label = new QLabel; label->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); QPalette pal( palette() ); - pal.setColor( QPalette::Background, palette().window().color().lighter( 108 ) ); + pal.setColor( WindowBackground, palette().window().color().lighter( 108 ) ); label->setAutoFillBackground( true ); label->setPalette( pal ); label->setText( text ); diff --git a/src/modules/tracking/Config.cpp b/src/modules/tracking/Config.cpp index f1f61edfdcc42494c3d76a90cbd2780f98c6caaf..0d9778c6a9f79d64d9833697650fe838e1d0b1ad 100644 --- a/src/modules/tracking/Config.cpp +++ b/src/modules/tracking/Config.cpp @@ -182,10 +182,10 @@ enableLevelsBelow( Config* config, TrackingType level ) { case TrackingType::UserTracking: config->userTracking()->setTracking( TrackingStyleConfig::TrackingState::EnabledByUser ); - FALLTHRU; + [[fallthrough]]; case TrackingType::MachineTracking: config->machineTracking()->setTracking( TrackingStyleConfig::TrackingState::EnabledByUser ); - FALLTHRU; + [[fallthrough]]; case TrackingType::InstallTracking: config->installTracking()->setTracking( TrackingStyleConfig::TrackingState::EnabledByUser ); break; diff --git a/src/modules/unpackfs/unpackfs.schema.yaml b/src/modules/unpackfs/unpackfs.schema.yaml index 66c7c0da81d2ace3144c73f755d286a2b71fec7b..0d96fe9cb65427f00fd7c64a478b74ed1beb9b5d 100644 --- a/src/modules/unpackfs/unpackfs.schema.yaml +++ b/src/modules/unpackfs/unpackfs.schema.yaml @@ -17,4 +17,5 @@ properties: destination: { type: string } excludeFile: { type: string } exclude: { type: array, items: { type: string } } + weight: { type: integer, exclusiveMinimum: 0 } required: [ source , sourcefs, destination ] diff --git a/src/modules/users/CMakeLists.txt b/src/modules/users/CMakeLists.txt index 5752ae67aecbbe9622596ab6f05ba78151e43c0f..fdae38440026bad1c57f98f935dd596ff829b68f 100644 --- a/src/modules/users/CMakeLists.txt +++ b/src/modules/users/CMakeLists.txt @@ -85,7 +85,7 @@ calamares_add_test( ${JOB_SRC} ${CONFIG_SRC} LIBRARIES - ${USER_EXTRA_LIB} Qt5::DBus # HostName job can use DBus to systemd ${CRYPT_LIBRARIES} # SetPassword job uses crypt() + ${USER_EXTRA_LIB} )